Votul secret dus la extrem

Google a publicat  un articol științific unde demonstra că în același sistem informațional nu poți avea integral (concomitent): anonimitatea votului, confirmarea identității și auditarea votării. Din cele trei poți alege doar două. Dacă ai anonimitatea votului și secretul votului nu poți face audit, dacă ai audit și confirmarea identității nu poți avea anonimitatea votului și dacă ai anonimitatea votului și audit — nu poți avea confirmarea identității. Cuvântul cheie în acel articol este ACELAȘI. Deci, acești trei piloni pot fi despărțiți în 2 sisteme informatice care nu sunt legate între ele, iar astfel putem asigura secretul votului.

În Estonia s-a mers pe acest principiu. Un sistem informatic confirmă identitatea, colectează voturile criptate și apoi într-un alt sistem informatic (voturile criptate sunt transferate pe un DVD) se decriptează. Pentru decriptare ei folosesc un server HSM, destul de scump, care generează cheile de criptare și decriptare.

La VoteMeApp am hotărât să mergem un pic mai departe. Să folosim o soluție mult mai ieftină, care poate fi utilizată ușor de către comunități/organizații mici. Să folosim un iPad, care este resetat după fiecare generare sau restabilire de chei.

Toată magia cu secretul votului se reduce la împărțirea procesului de votare în câteva sisteme informatice, unde niciunul dintre aceste sisteme nu posedă informația completă.

  1. Mpass asigură autentificare. Acest sistem nu știe nimic despre votare.
  2. VoteMeApp asigură autorizarea și restricționarea în baza de INDP la votare și colectează voturile criptate. Acest sistem are informația cine votează însă nu poate decripta voturile.
  3. Sistemul SecretVoting (pe care îl voi explica mai jos) decriptează și calculează rezultatele. Acest sistem nu primește date despre votanți.

Secretul votului în cazul dat se asigură prin buna intenție și onestitatea celor care colectează datele împreună cu cei care sunt organizatori/observatori/candidați și care participă la generarea și împărțirea cheilor private. Teoretic, toți acești oameni ar putea fi corupți, însă practic e imposibil să corupi vreo 10-20 de oameni doar pentru a vedea cine și ce a votat. În ceea ce privește auditarea rezultatelor și demonstrarea că voturile au fost calculate corect, acestea pot fi făcute fără a dezvălui identitatea persoanelor.

Dacă cineva are intenția de a divulga identitățile votanților – o face din rea intenție.

Mai jos, pentru curioși, urmează o descriere a sistemului de generare a cheilor, împărțirea bucăților de cheie, restabilirea bucăților de cheie, decriptarea voturilor și semnarea digitală a rezultatului.

La baza votului secret stă un algoritm de criptare destul de popular, care este folosit peste tot în Internet, atunci când deschideți un site, comunicați prin messenger sau semnați un document cu MSign. Este algoritmul RSA de criptare/decriptare cu chei publice/private. Adică acest algoritm generează două chei (parole) legate între ele matematic care au niște proprietăți speciale. Dacă criptezi cu cheia 1, poți decripta doar cu cheia 2, și invers, dacă criptezi cu cheia 2 poți decripta doar cu cheia 1. La generarea acestora, cheia 1 se numește cheie publică, pentru că ea se împarte la toți care vor să cripteze informația și să ți-o transmită ție. Iar cheia 2 se consideră cheie privată, care trebuie păstrată după 7 lăcăți. Doar cu acea cheie privată puteți decripta informația.

Diagrama un sistem informațional pentru votare secretă.

Cât despre cele 7 lăcăți. Se ia un server și se pune într-un safeu și se închide cu o lăcată, cheia se dă la unul din organizatori, apoi acel safeu se pune în alt safeu și să închide cu o cheie care se dă la alt organizator și tot așa de 7 ori :D. Glumesc… sigur că nimeni nu va investi astfel de resurse fizice când este soluție matematică mult mai bună.

Algoritmul Shamir, împarte un număr/secret/cheie în mai multe bucăți. După împărțirea în bucăți, poți restabili înapoi cheia originală doar dacă se adună iarăși toți și arată bucățile lor. Algoritmul acesta are o proprietate interesantă. Cheia poate fi împărțită de exemplu la 20 de oameni însă poate fi restabilită cu 19 minim. Astfel se evită șantajul din partea unui singur om care nu dorește să își deschidă partea lui de cheie.

Deci, cum se face această procedură într-o formă transparentă și de încredere.

  1. Se adună un comitet de organizare, de dorit inițiatorul alegerilor, câțiva observatori și candidații.
  2. Se ia un iPad și se resetează pentru a evita orice suspectare de spionare.
  3. Se deschide de pe GitHub SecretVoting, o pagină html care ajută la crearea și împărțirea cheilor. (GitHub e un serviciu de hostare a codului sursă, un site unde majoritatea programatorilor își țin codurile sursă. Un plus că acest cod de la SecretVoting este public și oricine îl poate inspecta și convinge că totul e corect și transparent în acest proces de împărțire a cheilor).
  4. Se închide accesul la Internet pentru a evita orice scurgere de informație.
  5. Se configurează numărul de participanți la împărțirea cheilor și se setează numărul minim de participanți pentru restabilirea cheilor. Recomandarea noastră e să fie „n-1” minimum din „n” maximum setat (de exemplu 7 din 8). Dar e o alegere care se face adhoc de echipa organizatoare.
  6. Se generează cheia publică și se arată tuturor (în formă de QRCode) și oricine o poate fotografia și ține o copie la el în telefon. E important ca reprezentantul de la VoteMeApp să o fotografieze pentru că ea va merge la toți votanții și ei vor cripta voturile anume cu această cheie.
  7. Se invită, unul câte unul membrii comitetului de organizare. Fiecare fotografiază partea lui de cheie privată fără a vedea altele.
  8. Se reseteaza iPad-ul, pentru a distruge orice informație care potențial ar putea compromite cheia privată.

Cheia publică se transmite serverului de votare, iar oamenii când votează o pot vedea și respectiv toate voturile se criptează anume cu această cheie.

Setarea numărului de participanți la împărțirea cheii private.
Afișarea cheii publice
Ecranul de interacțiune a primului membru pentru a lua în privat o parte din cheia privată.
Afișarea unei parți din cheia privată, doar atât timp cât se ține apăsat butonul roșu.
Ecranul de finalizare și eliminare din memorie a cheilor generate.

După ce se încheie votarea, un reprezentat de la VoteMeApp vine cu voturile criptate la organizatori, care pot folosi același iPad (sau oricare altul).

  1. Se ia un iPad și se resetează.
  2. Se deschide de pe GitHub același SecretVoting.
  3. Pentru a minimiza interacțiunea prin Internet, transferul voturilor criptate se face cu un short link de o singură folosință (a doua oară cererea nu va mai întoarce voturile criptate) spre VoteMeApp.
  4. Se deconecteaza iPad-ul de la Internet.
  5. Se scanează QR-codul cheii publice și se copie în căsuța cheii publice.
  6. Apoi fiecare dintre membrii comitetului de organizare, își prezintă pe rând partea lor de cheie privată, pentru a fi scanată de la iPad. Astfel se va restabili cheia privată completă.
  7. Se apasă butonul Start, se lansează procedura de decriptare, calculare și afișare a rezultatelor.
  8. Rezultatele se semnează digital cu cheia privată completă. Rezultatele semnate digital se transferă la serverul de votare, unde toți participanții la votare pot vedea rezultatele și să le verifice cu semnătura digitală.
  9. Se resetează iPad-ul pentru a elimina orice urmă de cheie privată și voturi.
Ecranul de restabilire a cheii private, publice și importarea voturilor criptate.

Așa arată votarea secretă online dusă până la extrem.      

Leave a Comment