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
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.
- 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:
Implementacja blind signatures: https://www.npmjs.com/package/blind-signatures