Nový systém švýcarské pošty pro elektronické volby obsahuje závažný bezpečnostní problém.

Outsourcing je ve světě IT nesmírně „in“, protože umožňuje citelné úspory. Na druhou stranu také komplikuje komunikaci mezi týmy, hovořícími jinými jazyky a vzdálenými stovky kilometrů. Důsledkem bývají chyby.

V tomto případě hovoříme o docela zásadní chybě v digitálním hlasovacím systému, o který se stará švýcarská pošta a který měl být poprvé naostro nasazen již při celostátních volbách v říjnu 2019. O příslušný kus kódu pečovala barcelonská firma Scytl.

Zdrojový kód švýcarského systému utekl i se svojí dokumentací na internet už předtím, než jej jeho provozovatelé zveřejnili k testování oficiálně. První výzkumníci, kteří se do jeho zkoumání pustili, označili zdrojáky za matoucí, nečitelně napsané a příliš komplexní. (Ve světě počítačové bezpečnosti není slovo „komplexní“ pochvalou, právě naopak; čím zamotanější systém, tím snáze se do něj zanesou chyby – a tím hůře se kontroluje.)

To, že Švýcaři zpřístupnili svůj systém světové veřejnosti k prozkoumání, je záslužné. Čím více lidských očí hledí na kus softwaru, tím větší šance, že odhalí chyby v něm. A vskutku; trvalo jen pár týdnů, než jeden odborný tým velmi závažnou chybu skutečně našel. Umožňovala by „insiderům“, kteří by měli přístup k IT infrastruktuře švýcarské pošty, zmanipulovat prakticky libovolně výsledky hlasování tak, že by to nebylo možné odhalit ani kryptografickým auditem systému.

Slovy jednoho z odborníků, Matthewa Greena:

„I don’t think this was deliberate. However, if I set out to design a backdoor that allowed someone to compromise the election, it would look exactly like this .“

„Myslím, že to nebyl úmysl. Ale kdybych se rozhodl navrhnout zadní vrátka, která by někomu umožňovala ovlivnit výsledky voleb, vypadala by přesně takhle.“

Matthew Green

Zábavné přitom je, že chyba není úplně nová; poprvé byla zachycena již roku 2017 a Švýcaři ji vrátili Kataláncům k opravě. Jenomže ti ji holt neopravili pořádně. Výzkumníci teď nejspíš za svůj objev dostanou odměnu, protože švýcarské úřady právě pro takové případy odměny vypsaly.


Dovolte mi nyní pronést hejt na téma „elektronické volby“. Už dlouho jsem se k němu chystal a tato příležitost je pro něj jako dělaná. Bude podpořen třemi různými argumenty.

Nejde mi přitom o staromilství, to bych byl pokrytec. Sám nepíšu telegramy místo e-mailu a nemaluji si krajinky vodovkami, místo abych je fotil digitálním foťákem; ani neposílám krátké textové zprávy tlučením do afrických bubnů místo běžného mobilu.

Moje námitky jsou jiné podstaty. Zaváděním elektronického hlasování nahrazujeme funkční a kvalitní systém, jehož slabiny jsou známé a ošetřené již po staletí, něčím, co se vymyká naší kontrole.

A přitom k tomu, kruci, není žádný dobrý důvod.


Problém první je přesně ten, který potkal Švýcary. Software je komplexní. Tím myslím, „zatraceně, zle, totálně f*cking komplexní“. To je opravdu závada, ne pochvala. Jakmile přesáhne délka nějakého programu pár desítek řádků, začnou se v něm skrývat těžko odhalitelné chyby. Navíc nemůžete oddělit software samotný od operačního systému, na kterém běží, a ve kterém se mohou skrývat další chyby.

Některé ty chyby jsou docela vážné. Zrovna teď se v případě zřícených Boeingů řeší otázka, zda je neposlala k zemi nějaká závada ve firmwaru. A první let nové rakety Ariane 5 skončil v moři kvůli tomu, že v řídícím softwaru se v průběhu vzletu jedno kladné číslo změnilo v záporné, tzv. přetečení typu; i nabrala si to raketa poslušně do oceánu místo do vesmíru, drahé žbluňk za půl miliardy dolarů. Aspoň se to obešlo beze škod na životech, protože Ariane s kosmonauty nelétá.

Nejlepší bonmot, který jsem k tomuto tématu slyšel, zní takto:

„Kdyby architekti stavěli města stejně, jako programátoři programují software, dokázal by jeden jediný datel zbořit celé městské čtvrti.“

Nemám tušení, kdo je autorem

Asi tak jediné, co se s tím dá dělat, je poskytnout zdrojové kódy systému k veřejné kontrole a doufat, že světová veřejnost vychytá všechny chyby. Ale ani to není jistota. Kritická chyba jménem Heartbleed žila v důležité kryptografické knihovně openSSL celé dva roky, než si jí někdo všimnul. Dodnes běhají po světě zařízení (staré neupdatované routery a spol.), které jí trpí.

Nu, a objevíte-li takovou chybu se zpožděním, musíte si vždycky klást otázku: byli jste první? Neobjevil ji třeba předtím už někdo jiný, kdo by si to tajemství nechal pro sebe, nebo jej třeba někomu pod rukou prodal (takové věci se dějí)? Jinými slovy: nebyla už někdy použita proti vám? Někdy je možné auditovat události zpětně a zjistit, jak se věci měly; jindy ne. Zrovna ten výše zmíněný Heartbleed byl zpětně jen dost těžko prokazatelný.


Druhý problém: matematika. Kryptografické algoritmy jsou matematické podstaty a bezpečnost některých z nich je založena na neřešitelnosti určitých problémů.

Tak například problém takzvané faktorizace. Vezměte velmi dlouhá prvočísla p, q (tím myslím cca tisíc bitů každé) a vynásobte je dohromady. Vznikne nějaké N. To je rychlý proces, na moderním počítači rozhodně kratší než jedna sekunda. Když pak ale to N předhodíte zpátky světu a řeknete „tak, a teď z něj dostaňte zpátky čísla p, q“, je to obtížný proces. Současné metody a současné počítače by k tomu potřebovaly miliony let, a tenhle odhad dále roste s tím, jak rostou délky faktorů p, q.

Na tom, že neumíme najít p, q dříve než za miliony let, je založena spousta bezpečnostních protokolů ve světě počítačů. Když se podíváte do navigačního řádku svého prohlížeče, uvidíte tam zelený zámeček:


Šifra, která napomohla bezpečnému přenesení dat ode mne k vám, se jmenuje RSA, a její účinnost stojí a padá s tím, že nikdo neumí najít p, q rychle.

Jenže my neumíme prokázat, že to opravdu nejde. Jediné, co víme, je, že zatím nikdo veřejně neohlásil, že by p, q rychle najít uměl. Klidně se může stát, že jednoho krásného dne se nějaký nerd na Tchajwanu probudí a hlavou mu bleskne geniální postup, kterým půjde p,q najít za pár vteřin. A tím bude šifra RSA zlomena.

A nejen to, všechny minulé šifrované komunikace, které byly pomocí RSA chráněny a které si někdo uložil pro strýčka Příhodu (třeba NSA nebo její ekvivalenty v jiných státech), budou zpětně odhaleny. Klidně i desítky let nazpět.

A to jsme ani nezačali řešit otázku toho, že i formální matematický důkaz může být špatně. Zrovna ten švýcarský systém obsahuje tzv. důkaz nulové informace (zero-knowledge proof), který měl formálně garantovat integritu systému; jenže holt negarantuje, takže někde v tom důkazu se skrývá nějaká subtilní, ale kritická chybka, které si nikdo nevšiml. Matematika je svým způsobem dokonalá, matematici však rozhodně ne.

Update 20.3.2019 v 10.30: Administrátoři a jiní praktici mne upozorňují, že při TLS přenosech je dnes běžnější mít nakonfigurováno „efemerální Diffie-Hellman protokol“ (DHE) než RSA. A že ten zajišťuje Perfect Forward Secrecy (PFS).

No, přátelé, tohle je zrovna moje parketa z dob doktorandských studií na MFF UK. Název Perfect Forward Secrecy je pro laika notně zavádějící. Bezpečnost Diffie-Hellmanova protokolu je pro změnu závislá na nemožnosti rychle řešit tzv. diskrétní logaritmus. PFS vás chrání proti pozdějšímu úniku privátního klíče, ale ne proti úspěšné kryptoanalýze protokolu samotného. Pokud si někdo jednoho dne poradí s diskrétním logaritmováním, je veškerá secrecy tzv. v čudu, a to i zpětně. Zatím, pokud víme, se tak nestalo.

Faktorizační problém, na němž je založena RSA, a diskrétní logaritmus, na němž je založen Diffie-Hellman, jsou sice odlišné problémy, ale ne úplně odlišné. Algebraicky řečeno – v obou případech jde o hledání určitých skrytých podgrup ve velkých abelovských grupách.

Stává se tedy, že algoritmus, který částečně řeší jeden problém, lze adaptovat tak, aby částečně řešil i ten druhý. Je to třeba případ algoritmu jménem Number Field Sieve (NFS), který byl původně vyvinut k faktorizaci, ale ukazuje se, že jej lze použít i pro diskrétní logaritmování. Naštěstí NFS není tak účinný, aby ohrožoval fungování těchto šifer v praxi.

Ale je zcela reálně možné, že vyřeší-li někdo jednoho dne efektivně jeden z těch dvou problémů, dokáže jeho řešení někdo jiný adaptovat i na ten druhý problém. Ony mají prostě nějaké společné podhoubí.


Třetí problém: systém, který umožňuje jakékoliv hlasování na dálku, narušuje dvě důležité vlastnosti voleb: to, že voliči hlasují tajně (= nikdo jiný neví, jak hlasovali) a osobně (= že to za ně neodevzdal někdo jiný). Tentýž problém je se zasíláním volebních hlasů poštou, které se bohužel ve světě hojně praktikuje.

Vezmu-li český systém, je z tohoto hlediska velmi robustní. Za plentou může být naráz jen jeden člověk, před hlasováním musí ukázat doklad s fotkou, čerstvou sadu volebních lístků si může vyzvednout přímo u komise. Těžko na vás může vyvíjet účinný nátlak třeba zaměstnavatel. Musel by s vámi poslat bijce, který by hlídal, že si neberete nové lístky, a to by bylo poněkud nápadné.

S hlasováním na dálku je takový nátlak daleko snazší a daleko hůře prokazatelný. Zajde-li vás večer navštívit nějaký soudruh od mafie, nebo třeba od strýčka Erdogana, a podívá se vám pod prsty, jestli hlasujete pro žádoucího kandidáta, žádná volební komise si toho nemusí všimnout. I chytřeji se to dá udělat, třeba jako „večírek“ nebo „společenská akce“, smartphony a notebooky prosím s sebou, a kdyby se vám nechtělo, tak víme, kam chodí do školy vaše děti.

Nutno říci, že třeba estonský volební systém na toto myslí a umožňuje „smáznout“ elektronicky zaslaný hlas tak, že osobně zajdete k urně. Ale povšimněte si, že toto jde rovněž na úkor anonymity hlasování: k tomu, aby smázli právě ten váš hlas, a ne něčí jiný, musejí být administrátoři schopni zjistit, který to je. A skutečně, součástí digitálně zaslaného hlasu v Estonsku je ID voliče, dokonce je privátním klíčem voliče podepsán, což je vlastnost, kterou by asi robustní volební systém mít neměl. (Elektronicky zaslané hlasy se pak anonymizují až před sčítáním samotným.)

Oslabení principů tajnosti a osobního výkonu hlasování považuji za vážný problém. Není žádoucí usnadňovat jiným lidem zjištění, pro koho jste hlasovali. To se ani nemusí vymstít hned; při politické stabilitě Evropy se může stát klidně třeba za třicet let, že do země vpochodují cizí jednotky a začnou si dělat seznamy všech, kdo kdy hlasovali pro pana X. Spoléhat se na to, že se to určitě až do vaší smrti nestane, je špatná „občanská hygiena“.

Příklad něčeho podobného z historie: nizozemští Židé měli v Holocaustu velmi vysokou úmrtnost mj. proto, protože pečlivé nizozemské registry obyvatelstva padly do rukou nacistů. Svědomitost holandského úřednictva se v rukou cizí mocnosti stala zničující.

Dobrá, to je extrémní příklad, to se už třeba za našich životů nestane. Ale když tak pozoruji třeba vyhrocenou atmosféru v prezidentských volbách, považuji za dobré, aby šéfové, učitelé, ba ani rodinní příslušníci neměli šanci zjistit, že jste třeba volil jinak než oni. Zničené vztahy v rodině či na pracovišti jsou taky docela velký životní problém.

V současnosti jsme před tím chráněni fyzickou podobou volebního systému. Žádný „leak z databáze“ ani nečekané zlomení šifrovacího algoritmu, který dlouho vypadal bezpečně, naši anonymitu při házení papírového lístku do urny neohrozí.

Rád bych, aby to tak i zůstalo – a v případě digitálních systémů nevěřím, že to půjde. Paranoii už máme v dnešním světě i tak dost. Dál ji podněcovat zaváděním systémů, které v sobě mají řadu slabin principiálních a implementačních, to je podle mého názoru velmi špatný nápad.


Hudební epilog

Klasická hudba ke čtení, to zní dobře, ne?

P.S.: Čtete-li rádi tento blog, můžete autora podpořit.

Můžete si pořídit například Zapomenuté příběhy – pro sebe, pro někoho jiného, nebo třeba jako dárek pro místní knihovnu. To mi skutečně pomůže. Můžete je mít i s osobním věnováním.

Nedávno také začal předprodej Zapomenutých příběhů 2. Před vydáním jsou k mání se slevou.

A pokud jsi sem, milý čtenáři, dorazil z Facebooku nebo Twitteru, zvaž registraci k odběru novinek e-mailem. To je nezávislý distribuční kanál. Jak to udělat? Třeba zde: