Belenios: Instrukce pro uživatele volebního systému

Jedná se o český neoficiální překlad Pokynů pro uživatele systému Belenios.

Úvod

Belenios představuje ověřitelný systém elektronického hlasování. Každý volič si může ověřit, že jeho hlasovací lístek je skutečně ve volební urně, a jakákoli třetí strana může ověřit, že tvrzený výsledek odpovídá hlasovacím lístkům přítomným ve volební urně a že tyto lístky pocházejí od legitimních voličů. Tajnost hlasování je zajištěna rozdělením dešifrovacího klíče mezi několik orgánů (např. některé členy výboru odpovědného za volby) s prahovým mechanismem (například k dešifrování stačí 3 z 5).

Pěkné bezpečnostní vlastnosti však platí pouze v případě, že každý provede všechna ověření, která mají dělat. Tento dokument podrobně uvádí pro každou roli ve volbách (volič, správce atd.), co je třeba v každém kroku udělat.

Klíčovým pojmem v následujících pokynech je místo, url kde se účastník připojí. Použijeme pojem PREFIX a UUID, kde PREFIX udává url server Belenios obsluhující volby a UUID identifikuje volby, o kterých mluvíme, mezi možnými mnoha volbami, které na tomto serveru probíhají. Obvykle, pokud je hlavní stránka voleb formuláře

https://vote.belenios.org/elections/8GVH85AoSyweXG/

pak PREFIX=https://vote.belenios.org a UUID=8GVH85AoSyweXG.

Pokyny pro voliče

Před zahájením voleb obdrží volič e-mail, který obsahuje jeho soukromý údaj credential a informace url o volbách. Volební stránka zobrazuje datum zahájení volby, pokud ještě není volba zahájena.

Během voleb může volič navštívit volební stránku a hlasovat takto:

  • vstoupí do svého soukromého credential (profilu)
  • pak může vidět otázky a vybrat své kandidáty
  • jeho počítač zašifruje jeho volby (pomocí programu Javascript) a vytiskne smart ballot tracker, což je otisk hlasovacího lístku. Tento smart ballot tracker je také zaslán e-mailem voliči, když dokončí postup hlasování.
  • jakmile volič zkontroluje své vybrané volby, musí se nejprve ověřit zadáním své e-mailové adresy. Poté obdrží e-mailem jednorázové heslo, které je třeba zadat do hlasovacího rozhraní. Mohou být použity jiné autentizační prostředky (např. heslo může být zasláno před začátkem voleb).
  • poznámka: volič může hlasovat znovu. Počítá se pouze poslední hlas.

Systém Belenios je ověřitelný .

  • volič si může ověřit, zda je jeho hlasovací lístek skutečně zohledněn, tím, že jej vyhledá pomocí smart ballot tracker na volební urně a navštíví odkaz See accepted ballots na hlavní stránce voleb. Pokud tomu tak není, musí si stěžovat. Pro ještě větší bezpečnost může volič tuto kontrolu provést pomocí jiného zařízení, případně z jiného místa. Pokud volič hlasuje několikrát, zobrazí se na volební urně pouze poslední inteligentní sledovač hlasovacích lístků.
  • Volič musí také vehementně protestovat, pokud obdrží potvrzovací e-mail, který obsahuje smart ballot tracker jiný než ten, který byl vytištěn (zobrazen) na obrazovce během fáze hlasování. Někomu se pravděpodobně podařilo přidat hlasovací lístek na jméno daného voliče. Může to být například náznak útoku správce systému, který má přístup do schránky voliče, v případě, že jsou přihlašovací jméno / heslo a pověření zaslány na stejnou adresu.

Volič si také může celý průběh hlasování ověřit. Místo toho, aby kontroloval pouze přítomnost svého hlasovacího lístku ve volební urně, může ověřit platnost všech hlasovacích lístků, může sledovat volební urnu a zkontrolovat, zda žádný hlasovací lístek nezmizel (s výjimkou případu odvolávání), a nakonec zkontrolovat, zda nárokovaný výsledek odpovídá hlasovacím lístkům ve volební urně. K tomu všemu může volič postupovat podle pokynů auditora níže.

Pokyny pro garanty (trustees)

Během nastavování voleb je každý garant vyzván, aby vygeneroval dešifrovací klíč pomocí odkazu zaslaného správcem voleb. Důvěryhodný uživatel musí následovat odkaz a ujistit se, že adresa URL výsledné stránky má jeden z následujících tvarů (kde PREFIX a UUID odpovídají definici výše a TOKEN je náhodně vypadající znakový řetězec):

  • PREFIX/draft/trustee.html#UUID-TOKEN, nebo
  • PREFIX/draft/threshold-trustee.html#UUID-TOKEN (v prahovém režimu)

Kromě toho se očekává, že garant uloží:

  • jeho dešifrovací klíč (nebo klíč PKI v režimu prahu) (soubor private_key.json nebo private_key.txt). Tento klíč musí být uložen na bezpečném místě (zašifrovaný kontejner, USB klíč uložený na uzavřeném místě atd.), protože chrání tajemství hlasování (v kombinaci s dešifrovacími klíči ostatních garantů);
  • url voleb;
  • (v prahovém režimu) otisk jeho veřejného klíče PKI, jednoduše nazvaný public key níže;
  • otisk jeho ověřovacího klíče spojený s jejím dešifrovacím klíčem verification key.

Jakmile budou volby připraveny, očekává se, že garant zkontroluje:

  • že verification key je přítomna na volební stránce vedle jeho jména;
  • (v režimu prahu), že jeho PKI public key je na volební stránce vedle jeho jména.

Po skončení voleb se garant podílí na výpočtu výsledku. V případě voleb s alternativním hlasováním (seřazení kandidátů, jejich hodnocení) začíná sčítání fází náhodného výběru. Za tímto účelem se od garanta očekává, že:

  • zkontroluje, že adresa URL stránky má následující tvar: PREFIX/election/shuffle.html#UUID-TOKEN;
  • uloží otisk volební urny po jejím zamíchání: fingerprint of your shuffle;
  • okamžitě poté zkontroluje, zda je tento otisk na stránce voleb (aby se zajistilo, že jeho zamíchání nebude ignorováno).

Ve všech případech pak sčítání pokračuje fází, kdy důvěryhodný uživatel použije svůj soukromý klíč k dešifrování výsledku. Očekává se, že garant:

  • zkontroluje, že adresa URL stránky má následující tvar: PREFIX/election/trustees.html#UUID-TOKEN;
  • zkontroluje (pouze pro alternativní hlasování) otisk jejího náhodného pořadí fingerprint of your shuffle, jak byl uložen v předchozím kroku, je na stránce voleb vedle jeho jména. Pokud tomu tak není, nesmí být použit soukromý klíč;
  • uloží otisk volební urny k dešifrování: fingerprint of the encrypted tally.

Po dokončení sčítání jsou výsledky zveřejněny na stránce voleb. Očekává se, že garant:

  • zničí jeho dešifrovací klíč;
  • zkontroluje, zda jsou na této stránce přítomny následující údaje, pokaždé spojené s jeho jménem:
  • (v prahovém režimu) jeho PKI public key;
  • jeho verification key;
  • (pro alternativní hlasování) otisk jeho zamíchání;
  • otisk hlasovací urny, která má být dešifrována fingerprint of the encrypted tally (aby se ověřilo, že jeho soukromý klíč nebyl použit k dešifrování něčeho jiného).

Pokyny pro pověřenou autoritu

Hlavní úlohou pověření je generovat a předávat soukromé pověření každému voliči.

Založit. Během nastavování voleb získá pověření nejprve soukromý odkaz. Musí následovat odkaz a ujistit se, že adresa URL výsledné stránky má následující tvar: PREFIX/draft/credentials.html#UUID-TOKEN.

Na této stránce je seznam voličů. Pověřovací orgán musí u komise pověřené volbou ověřit správnost tohoto seznamu a také váhu každého voliče v případě váženého hlasu;

Poté má orgán dvě možnosti, jak vygenerovat přihlašovací údaje:

  • buď klikne na Generate v jeho prohlížeči;
  • nebo:
    • zkopírujte seznam voličů do souboru, např. voter.txt;
    • ponechte $UUID být identifikátor voleb (poslední komponenta v dané URL voleb, viz v horní části tohoto dokumentu);
    • ponechte $GROUP být buď BELENIOS-2048 (pokud neexistují žádné alternativní otázky) nebo RFC-3526-2048 (pokud existuje alespoň jedna alternativní otázka);
    • spusťte příkaz: belenios-tool setup generate-credentials --file voters.txt --group $GROUP --uuid $UUID (Vygeneruje dva soubory $TIMESTAMP.privcredsa $TIMESTAMP.pubcreds, a vypíše fingerprint of public credentials😉
    • nahrajte .pubcreds soubor s Submit by file formulářem;
    • uchovejte .privcreds soubor a uložte jej jako creds.txt.

Druhá možnost by měla být upřednostněna pro větší bezpečnost, zejména pokud není k dispozici žádný auditor pověřený monitorováním serveru.

Během tohoto kroku se očekává, že autorita pověření uloží:

  • seznam soukromých pověření: creds.txt soubor. Tento soubor musí být uložen na bezpečném místě (zašifrovaný kontejner, USB flash disk uložený na uzavřeném místě atd.), protože se jedná o ochranu proti nacpání hlasovacích lístků. Umožní také pověřovacímu úřadu znovu zaslat pověřovací listinu voliči, který ji ztratil;
  • url voleb
  • seznam voličů voters.txt;
  • otisk ze seznamu voličů: fingerprint of voters;
  • fingerprint of the public credentials.

Pověřovací orgán má na starosti zasílání pověřovacích listin voličům. Do zprávy, kterou zasílá (e-mailem, poštou), musí uvést URL volby. Pro zaslání přihlašovacích údajů e-mailem je možné použít skript contrib/send_credentials.py obsažený ve zdrojích Beleniosu (jak zdroje získat, viz část auditora níže). Po úpravě tohoto programu podle příslušných nastavení jej může spustit:

contrib/send_credentials.py

Fáze hlasování. Jakmile jsou volby otevřeny, a na konci voleb se očekává, že pověřená autorita:

  • ověří, že počet voličů odpovídá použitému seznamu voličů během nastavování a také celkovou váhu voleb v případě váženého hlasování a že otisk seznamu voličů odpovídá dříve uloženému fingerprint, například pomocí jednoho z na konci tohoto dokumentu navržených příkazů;
  • ověří, že otisk v seznamu veřejných pověření odpovídá otisku zobrazenému v blízkosti jeho jména;
  • při volbách mu může pověřovací orgán na požádání voliče znovu zaslat jeho soukromé pověření, pokud je ztratil.

Po sčítání. Na konci voleb se za účelem ověření záznamů očekává, že pověřená autorita:

  • ověří, že záznamy o hlasování poskytnuté správcem odpovídají hlasovacím lístkům ve volební schránce. Toto ověření lze provést příkazem: belenios-tool election compute-voters --privcreds /path/to/creds.txt --url https://url/to/election (kde https://url/to/election je formulář PREFIX/elections/UUID, jak je vysvětleno v horní části tohoto dokumentu). Výstup seznamu tímto příkazem se musí shodovat se seznamem zadaným administrátorem (možná v jiném pořadí).

Jakmile jsou volby dokončeny a potvrzeny, očekává se, že pověření:

  • zničí soubor creds.txt. Tento soubor skutečně poskytuje spojení mezi voličem a jeho (zašifrovaným) hlasovacím lístkem. Toto spojení by mohlo z dlouhodobého hlediska ohrozit tajnost hlasování, například pokud budou šifrovací klíče v budoucnu příliš malé pro výpočetní výkon (nebo pokud bude k dispozici kvantový počítač…).

Pokyny pro komisi, která má na starosti volby

Přinejmenším volební komise po otevření stránky voleb navštíví a zkontroluje, zda:

  • počet voličů odpovídá seznamu voličů;
  • zveřejněná hodnota voter list fingerprint odpovídá té, která je dána (systémem nebo administrátorem voleb). Tento otisk lze vypočítat pomocí jednoho z příkazů navržených na konci tohoto dokumentu;
  • seznam voličů voters.txt odpovídá oprávněným voličům s pravou váhou v případě váženého hlasu;
  • seznam otázek a možných odpovědí odpovídá tomu, co se očekává. Tyto otázky a odpovědi jsou také v $UUID.bel souboru, který lze získat kliknutím na public data v patičce volební stránky.

V ideálním případě volební komise plní i úkoly auditora nebo tím někoho pověřuje (např. systémového správce organizace).

Pokyny pro auditora

Auditorem může být každý, kdo ví o url voleb. Volba url má tvar PREFIX/elections/UUID/, kde například PREFIX=https://vote.belenios.org a UUID=8GVH85AoSyweXG.

Auditor zajistí zejména, že:

  • volební údaje (veřejné klíče, veřejné pověření atd.) jsou konzistentní a v průběhu času se nemění;
  • volební urna, která obsahuje zašifrované hlasy, se neustále vyvíjí: žádný hlasovací lístek není odstraněn, pokud není nahrazen hlasovacím lístkem se stejným pověřením (to odpovídá hlasování);
  • volební urna obsahuje pouze správně sestavené hlasovací lístky (s platnými doklady o nulových znalostech a platnými pověřeními);
  • integrita aktivních souborů (HTML, Javascript atd.) používaných voliči, garanty a pověřenou autoritou je zachována;
  • výsledek voleb odpovídá zašifrovaným hlasovacím lístkům díky důkazům o správném dešifrování s nulovými znalostmi, které produkují dešifrovací garanti.

Bezpečnost Belenios se opírá o skutečnost, že níže popsaná ověření provádí alespoň jedna čestná osoba.

Poznámka: Tato ověření jsou také automaticky spouštěna našimi servery pro volby, které jsou nastaveny s maximální úrovní zabezpečení (externí pověřená autorita a alespoň dva externí garanti).

Nastavení. K provedení těchto testů musí auditor použít nějaký software. Zde popisujeme, jak spustit ověřování pomocí belenios-tool, jehož zdroje jsou dostupné na Gitlab Inria a které lze nainstalovat pod Linux Debian/Ubuntu pomocí sudo apt install belenios-tool. Poté musí auditor vytvořit adresář workdir , kde budou informace o volebním auditu uloženy tak, jak jsou staženy, ve formě úložiště git.

Aby auditor ověřil, že kódy HTML/Javascript používané voliči, dešifrovacími garanty a pověřenými autoritami nejsou změněny poškozeným serverem, musí pro každý z těchto programů zjistit „správný“ kód. Poté se ujistí, že server doručuje tyto soubory nepoškozené. Nejprve je třeba připravit šablonu: pouze ji zkopírujeme ze zdrojů Belenios:

cp path/to/sources/belenios/contrib/reference_template.json workdir/hashref

Pak existuje několik řešení, jak zajistit, aby soubory obsluhované serverem byly platné, a zároveň sledovat volby identifikované pomocí UUID:

  • buď auditor jednoduše důvěřuje souborům staženým poprvé a zkontroluje, že se v průběhu času nemění ( princip TOFU ). Poté je příkaz k monitorování následující: ./monitor_elections.py --url PREFIX --wdir workdir --checkhash yes --hashref workdir/hashref --outputref workdir/hashref --uuid UUID Při každé změně souborů (včetně prvního spuštění) se zobrazí varovná zpráva.
  • nebo auditor načte zdroje, znovu zkompiluje kód, spustí místní server, použije předchozí příkaz k vyplnění souboru workdir/hashref důvěryhodnými hodnotami a zkopíruje jej, aby jej mohl použít jako referenci pro sledování skutečných voleb, které jsou spuštěny na externím serveru. Příkaz je pak stejný jako výše.
  • nebo auditor důvěřuje dobře identifikované osobě, která zveřejnila verzi referenčního souboru podepsanou gpg. V takovém případě musí být monitorovacímu nástroji předány další argumenty: adresa URL této podepsané verze a svazek klíčů gpg obsahující veřejný klíč dané osoby jako důvěryhodný. V případě naší hlasovací platformy takový soubor poskytuje hlavní vývojář Belenios, Stéphane Glondu. Poskytujeme odpovídající příkazový řádek, který má být přizpůsoben jinému serveru nebo jiné důvěryhodné osobě: ./monitor_elections.py --url https://vote.belenios.org/ --wdir workdir --checkhash yes --hashref workdir/hashref --outputref workdir/hashref --sighashref https://vote.belenios.org/monitoring-reference/reference.json.gpg --keyring workdir/trustdb.gpg --uuid UUID

Ve všech případech bude auditor pravidelně provádět monitorovací příkaz, který nazýváme monitor_elections. Pomocí volby je možné zprávy přesměrovat --logfile. Pak jsou hlášeny pouze abnormální chování na stdout/stderr, což umožňuje spustit příkaz z crontab a být varován v případě problému.

Fáze hlasování. Během voleb se očekává, že auditor:

  • v případě, že má revizor přístup k seznamu voličů voters.txt (vyžádáno u komise pro volby), ověří, že počet voličů zobrazených na hlavní stránce voleb odpovídá seznamu voličů a také odpovídá celková váha voličů volby v případě váženého hlasování a že otisk v seznamu voličů odpovídá dříve uloženému otisku prstu, například pomocí některého ze navržených příkazů na konci tohoto dokumentu;
  • nemá-li auditor přístup k seznamu voličů, ověří, že počet voličů a celková váha voleb zobrazená na hlavní stránce voleb odpovídá oficiálním údajům;
  • často běží monitor_elections. V ideálním případě by to mělo být provedeno v nepředvídatelných okamžicích, z různých IP adres, které odrážejí rozmanitost voličů a správců. Cílem je, aby poškozený server nemohl odhadnout, kdy požadavek přichází od auditora nebo skutečného voliče / garanta. Zde je několik pokynů pro motivovaného auditora, aby vypadal jako skutečný uživatel:
    • jak již bylo řečeno, požadavky na server by měly být prováděny často, ale ne pravidelnou, předvídatelnou rychlostí;měly by se používat nejen různé IP adresy, ale také různé informace o konfiguraci zařízení (typ a verze prohlížeče, operační systém, aktivní pluginy, časové pásmo, jazyk, rozlišení obrazovky atd.) z velkého množství typických konfigurací zařízení používaných ve skutečnosti lidmi ;IP adresy by měly odrážet různá umístění a poskytovatele služeb populace voličů;pořadí, ve kterém jsou soubory požadovány na serveru, by se mělo řídit pořadím typických návštěv voličů a důvěrníků, s pravděpodobnými (nepředvídatelnými) prodlevami mezi jednotlivými žádostmi o soubory.
    Všimněte si, že skript poskytnutý v belenios-tool nenabízí podporu pro toto.

Po sčítání. Po volbách se očekává, že auditor:

  • spustí znovu monitor_elections. Volební stránka nyní obsahuje result.json soubor a tento příkaz zkontroluje kryptografické důkazy spojené s výsledkem voleb;
  • ověří, že výsledek uvedený ve result.json spisu odpovídá výsledku zveřejněnému na stránce voleb. Toto ověření je nutné provést ručně.

Poznámka: Pokud nástroj příkazového řádku belenios-tool je použit, důvěra v ověřování auditu částečně závisí na důvěře v tento nástroj. Je možné napsat nezávislý ověřovací software podle specifikace Belenios dostupné zde.

Pokyny pro správce voleb

Může to vypadat divně, ale správce voleb nemá tolik ověřování, které musí provést. Vychází to ze skutečnosti, že hlasovací systém Belenios je navržen tak, abychom administrátorovi nemuseli věřit. Bezpečnost závisí na kombinovaném ověření různých účastníků: garantů, pověřených autorit, volební komise a auditorů.

Důležité pro správce je následující:

  • získat seznam voličů jako seznam platných e-mailových adres, jednu adresu od voliče. V případě váženého hlasu může být voličům přidělena jiná váha. Tento seznam musí potvrdit volební komise;
  • před zahájením voleb tyto emailové adresy zkontrolovat a znovu zkontrolovat ještě před odesláním pověření v automatickém režimu. Jakmile je nastavení voleb dokončeno, není možné je upravovat a nezobrazuje se žádné upozornění v případě, že se nepodařilo odeslat zprávu;
  • ověřit, že všichni účastníci používají stejné url pro volby;
  • pokud správce někoho nepověřila pověřením autority, musí si stáhnout seznam soukromých credentials (Download private credentials), aby mohl credentials znovu zaslat voliči, který jej ztratil. Pro lepší zabezpečení je však preferováno pověřit třetí stranu, aby hrála roli pověřené autority.

Pro získání nejlepší úrovně zabezpečení musí mít správce:

  • osobu (pověřenou autoritu) pověřenou generováním credentials a jejich zasíláním voličům (server to může udělat sám, ale otevírá to možnost útoku nacpáním hlasovacích lístků);
  • několik garantů pověřených ochranou tajného hlasování: za účelem dešifrování jednotlivých hlasovacích lístků je pak nutné zaútočit na všechny (nebo alespoň část z nich v prahovém režimu).

Jak vypočítat otisk souboru?

Chcete-li vypočítat otisk souboru, musíte použít stejný algoritmus hash, jaký se používá v Beleniosu. Nabízíme zde možná řešení pomocí příkazových řádků. Soubor voters.txt používáme jako příklad, ale samozřejmě jej můžete nahradit jakýmkoli jiným souborem.

sha256sum voters.txt | xxd -p -r | base64 | tr -d "="

(nebo shasum -a256 místo sha256sum například na MacOS)

cat voters.txt | python3 -c "import hashlib,base64,sys;m=hashlib.sha256();m.update(sys.stdin.read().encode());print(base64.b64encode(m.digest()).decode().strip('='))"

Můžete také použít online nástroj podporovaný společností Belenios.