Jak przeprowadzić tajne wybory powszechne przez Internet

Wybory powszechne są tajne. Realizacja takich wyborów online mimo to jest możliwa, jednak wymaga zastosowania osiągnięć kryptografii asymetrycznej w tym również protokołu ślepych podpisów, istniejącego już profilu zaufanego i nota bene publicznego blockchaina

Jak przeprowadzić tajne wybory powszechne przez Internet

Głosowanie online wymaga otwartego audytowalnego protokołu jak poniższy, który może być realizowany przez dowolne oprogramowanie, a w ostateczności nawet ręcznie krok po kroku przez głosujących.

Jak zatem może wyglądać protokół głosowania online?

Kluczowym elementem całego procesu jest uzyskanie przez uprawnione do głosowania osoby ważnej elektronicznej karty do głosowania, która pozwoli oddać głos anonimowo. Jak tego dokonać?

W pierwszym kroku uprawniony do głosowania:

  • generuje parę kluczy RSA tzw. klucz prywatny i publiczny (w tym celu można wykorzystać wykorzystywane od lat oprogramowanie służące do tego celu na całym świecie)
  • następnie tak uzyskany klucz publiczny podpisuje urzędowym podpisem, w Polsce może do tego posłużyć śmiało profil zaufany (ePUAP)
  • tak podpisany klucz publiczny rejestrowany jest następnie w PKW lub dowolnej innej niezależnej komisji wyborczej i udostępniany jest publicznie

Na tym etapie uprawniony do głosowania może rozpocząć procedurę generowania tokenu karty do głosowania wykorzystując protokół ślepych podpisów.

💡
Prosta analogią używaną do porównania ze ślepymi podpisami, jest zamykanie wiadomości z kalką w kopercie, która potem jest podpisywana przez inna osobę. Pomimo że strona podpisująca nie widziała wiadomości, to każdy może potem stwierdzić jej autentyczność. Ślepe podpisy uniemożliwiają również powiązanie wiadomości z jej autorem, nawet po przekazaniu jej oryginału do osoby która ja wcześniej podpisała.
  • uprawniony do głosowania generuje unikalny klucz, który zgodnie z protokołem ślepego podpisu jest szyfrowany i wysyłany do ślepego podpisu przez wybrane niezależne Komisje Wyborcze wraz z zarejestrowanym wcześniej kluczem publicznym uprawnionego do głosowania.
  • Na tym etapie żadna z KW nie zna wartości tego unikalnego klucza, ale go podpisuje i odsyła głosującemu. W przyszłości KW jest w stanie potwierdzić, że faktycznie taki unikalny klucz podpisywała, ale bez możliwości wskazania czyj to był unikalny klucz.

Unikalny klucz staje się ważną kartą do głosowania

  • głosujący następnie generuję nową anonimową parę kluczy RSA
  • głosujący tworzy podpisaną nowym anonimowym kluczem wiadomość zawierającą unikalny klucz i wartość głosu np. wybór kandydata
  • głosujący stempluje czasowo taką wiadomość na publicznym blockchainie Bitcoin np. za pomocą OpenTimestamps i wysyła stempel oraz wiadomość z oddanym głosem do dowolnej KW. Niezależny stempel czasowy na blockchainie uniemożliwia ponowne użycie Unikalnego Klucza do głosowania

Na tym etapie dowolna KW może zweryfikować ważność głosu (przez weryfikację ślepego podpisu), a wyniki mogą być zliczone przez dowolną osobę / instytucję.

Potencjalne problemy

  • możliwość odsprzedawania kart do głosowania
  • programistyczne błędy w oprogramowaniu implementującym ten protokoł
  • brak zaufania i zrozumienia protokołu przez interesariuszy
  • wykluczenie cyfrowe
  • przesyłanie głosów nie może wiązać się z rejestracja meta danych jak adresy IP itp.

Więcej na temat protokołu ślepych podpisów:

Protokół ślepych podpisów – Wikipedia, wolna encyklopedia

Implementacja blind signatures: https://www.npmjs.com/package/blind-signatures