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. Tentosmart 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í odkazSee 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
, neboPREFIX/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
neboprivate_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) neboRFC-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.privcreds
a$TIMESTAMP.pubcreds
, a vypíšefingerprint of public credentials
😉
- nahrajte
.pubcreds
soubor sSubmit by file
formulářem; - uchovejte
.privcreds
soubor a uložte jej jakocreds.txt
.
- zkopírujte seznam voličů do souboru, např.
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
(kdehttps://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 napublic 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.
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í obsahujeresult.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.