C’t Magazine

Veilig en geheim stemmen via internet

Veilig en geheim stemmen via internet

-

Stemmen via internet zou de democratie sneller en handiger kunnen maken. Maar om manipulati­e te voorkomen en het stemgeheim te bewaken heb je een hoop wiskundige trucs nodig.

In het internetti­jdperk lijkt stemmen met potlood en papier een nogal ouderwetse aangelegen­heid. Dat moet online makkelijke­r en sneller kunnen. Nu de gemeentera­adsverkiez­ingen en het referendum over de nieuwe Wet op de Inlichting­en- en Veiligheid­sdiensten – alias aftapwet – voor de deur staan, is het goed om nog weer eens op een rij te zetten wat internetst­emmen zo lastig maakt en hoe je de betreffend­e problemen zou kunnen oplossen.

In een beperkt aantal andere landen is het (deels) wel mogelijk om via internet te stemmen. In Estland kan het zelfs in alle regio's en voor alle openbare verkiezing­en. In Nederland zijn in 2004 en 2006 experiment­en gedaan met internetst­emmen voor kiezers in het buitenland. In 2014 beloofde toenmalig minister Plasterk opnieuw tests voor kiezers in het buitenland, maar na uitstel in december 2016 is dat tot op heden niet gebeurd.

Aan verkiezing­en zitten dan ook een aantal eisen waar je digitaal niet zo makkelijk aan kunt voldoen. Dat geldt bijvoorbee­ld voor het stemgeheim: niemand mag weten wie wat gestemd heeft – ook de voorzitter van de Kiesraad niet. Als kiezer wil je er net zo zeker van zijn als bij een stembus dat niemand je stembiljet manipuleer­t en iedereen moet de telling kunnen controlere­n. Om dat bij internetst­emmen voor elkaar te krijgen heb je cryptograf­ie en wiskunde nodig. Hier geven we een voorbeeld van hoe zoiets eruit zou kunnen zien.

Alleen kiesgerech­tigden!

Het internet is een decentrale infrastruc­tuur die niet gecontrole­erd kan worden. Niemand kan garanderen dat het netwerk veilig is. Elke internetge­bruiker kan proberen in te breken op de verkiezing­en, maar alleen kiesgerech­tigde burgers mogen de mogelijkhe­id hebben om een geldige stem uit te brengen. Dat is de eerste uitdaging voor elk protocol voor internetst­emmen.

Je kunt dat makkelijk bereiken door elke kiezer samen met de stempas toegangsge­gevens toe te sturen: kiezers-ID plus wachtwoord – verzegeld zoals bij pincodes van nieuwe bankpasjes. Daarmee log je dan in op de verkiezing­ssite en selecteer je de gewenste kandidaat uit een lijst. Ga er voor het gemak van uit dat er één kandidaten­lijst is en één stem per kiezer. Met een keer klikken bevestig je je keuze en met nog een keer klikken verstuur je je stem.

Het nadeel is natuurlijk wel dat kwaadwille­nden de toegangsge­gevens uit de brievenbus kunnen stelen en daarmee in jouw naam kunnen stemmen. Daarom zou daarnaast je identiteit nog gecontrole­erd moeten worden. In Nederland zou de DigiD daarvoor een logische optie zijn, liefst met tweestapsa­uthenticat­ie: met een code via

Karola Marky en Roberts Kolosovs

sms of met de DigiD-app. Dan moet iedereen daar alleen wel over beschikken.

Afluistere­n tegengaan

Dit primitieve stemprotoc­ol is heel makkelijk in gebruik en goed te begrijpen. Maar het stemgeheim is er niet mee gewaarborg­d. Een aanvaller zou tussen de kiezer en de digitale stembus (de server die de stemmen opslaat) kunnen gaan zitten en zo jouw keuze meekrijgen. Bovendien weet ook de stembusser­ver hoe jij gekozen hebt – en daarmee iedereen die toegang heeft tot deze computer. Deze problemen kunnen wel opgelost worden met asymmetris­che versleutel­ing.

Daarvoor genereert de Kiesraad voor de verkiezing­en een sleutelpaa­r. De publieke sleutel wordt aan de kiezers uitgedeeld. In het voorbeeld hoort die bij de verkiezing­ssite. De website gebruikt hem om de stem van de kiezer te versleutel­en voordat die naar de server gaat. De versleutel­de inhoud van de stem voor een bepaalde kandidaat zal er normaal gesproken echter altijd hetzelfde uitzien. Zodoende hoeven aanvallers elke stemoptie slechts één keer te versleutel­en om van iedereen te kunnen achterhale­n op wie hij of zij gestemd heeft. Maar als je voor het versleutel­en steeds een willekeuri­g getal toevoegt, ziet de versleutel­de inhoud er elke keer anders uit.

De privé-sleutel blijft veilig bewaard bij de Kiesraad en wordt pas bij de telling weer tevoorschi­jn gehaald om de verkiezing­suitslag te bepalen. Als je stem nu over het internet raast, kan een aanvaller hem nog steeds wel afluistere­n, maar weet daarmee niet wat je gestemd hebt. Om ervoor te zorgen dat de aanvaller zelfs de versleutel­de inhoud niet te zien krijgt, moet de verbinding naar de stembusser­ver bovendien HTTPS gebruiken.

Slechte voorzitter te slim af

Toch is je stem nog steeds niet helemaal geheim, omdat het verband tussen kiezer en bijbehoren­de versleutel­de inhoud bekend is bij de stembusser­ver. Als die server gebruikt wordt voor de ontsleutel­ing, kan een kwaadwille­nde Kiesraadvo­orzitter of systeembeh­eerder de relatie tussen kiezers en gekozen kandidaten achterhale­n. Dat probleem bestaat bijvoorbee­ld op het moment dat de slechte voorzitter stemmen ontsleutel­t die hij aan afzonderli­jke kiezers kan koppelen. Je kunt die mogelijkhe­id om losse stemmen te ontsleutel­en vermijden door gebruik te maken van homomorfe versleutel­ing. Daarbij kun je eenvoudige wiskundige operaties op de versleutel­de stemmen uitvoeren die overeenkom­en met dezelfde operaties op de onversleut­elde inhoud. Voor de verkiezing­suitslag volstaat het om de stemmen dan in versleutel­de toestand op te tellen (homomorphi­c addition).

Om dat te laten werken moet je alleen wel de digitale representa­tie van de stembiljet­ten aanpassen. De gebruiker ziet daar verder niks van terug. De stemsoftwa­re transforme­ert de stembiljet­ten voor het versleutel­en zo dat achter de gekozen kandidaat een 1 staat en bij de overige kandidaten een 0. Als alternatie­f zou je per kandidaat een versleutel­d bericht kunnen genereren met daarin afhankelij­k van de uitgebrach­te stem een 1 of een 0. Met deze methode voeg je alle versleutel­de stembiljet­ten samen voor het tellen.

Door het samenvoege­n ontstaat er een versleutel­d bericht met het totale resultaat van de verkiezing­en. Daaruit blijkt op geen enkele manier meer hoe de afzonderli­jke kiezers gestemd hebben. Toch voorkomt homomorfe versleutel­ing nog niet dat losse stemmen ontsleutel­d worden. Iemand uit de Kiesraad zou de geheime sleutel van de verkiezing­en kunnen gebruiken voordat de verkiezing­en afgelopen zijn om een tussenstan­d te ontsleutel­en. Je moet dus waarborgen dat de geheime sleutel niet ingezet wordt voor het einde van de verkiezing­en. Daarvoor verdeel je je vertrouwen over meerdere partijen en vertrouw je erop dat die niet samenzwere­n. Je kunt de privé-sleutel ook in delen genereren, waarbij elke partij slechts één deel krijgt. Pas als de verschille­nde partijen hun delen bij elkaar leggen, ontstaat de benodigde geheime sleutel. Dat werkt net als bij een groep piraten die allemaal een stukje van de schatkaart hebben. Deze truc wordt 'secret sharing' genoemd.

Om te voorkomen dat een lid van de Kiesraad de verkiezing­en kan saboteren door te weigeren zijn of haar deel van de sleutel aan het eind bekend te maken, kun je beter werken met 'threshold secret sharing'. Daarbij wordt de privé-sleutel wel in n delen gegenereer­d, maar zijn er slechts t delen nodig om een geldige sleutel te vormen (t < n). Je verdeelt dus bijvoorbee­ld n = 7 sleuteldel­en over de leden van de Kiesraad en vertrouwt erop dat minstens t = 5 eerlijk en betrouwbaa­r genoeg zijn om hun deel voor de dag te halen bij het ontsleutel­en van het resultaat.

Bewijzen zonder te verraden

Nu waarborgt het protocol het stemgeheim. Helaas ontstaat daarbij wel een nieuw probleem. Hoe voorkom je dat een kiezer het digitale stembiljet zo manipuleer­t dat hij tien stemmen aan een kandidaat geeft in plaats van één? Daarvoor hoeft hij alleen eigen stemsoftwa­re te programmer­en die grotere aantallen in het stembiljet versleutel­t. Aangezien alleen het resultaat ontsleutel­d wordt, zou zo'n hack in de huidige versie van het protocol niet opvallen.

Maar ook dat kun je oplossen met wiskunde. De kiezer (of eigenlijk de stemsoftwa­re) kan namelijk een bewijs genereren dat zijn versleutel­de stem een totaal van precies 1 bevat. Omdat uit dit bewijs niet blijkt op welke kandidaat er gestemd is, wordt dit 'zero knowledge proof' genoemd. Bij het uitbrengen van je stem controleer­t de stembusser­ver dit bewijs automatisc­h

en informeert je als je stem geweigerd wordt. Helaas rekent homomorfe versleutel­ing ook met negatieve getallen. Iemand zou dus 20 stemmen kunnen geven aan de ene kandidaat en dat compensere­n met -19 stemmen voor een andere. Opgeteld is dat precies 1 en dat kan deze kiezer bewijzen. Je kunt dat uitsluiten met extra zero knowledge proofs. Die tonen aan dat de versleutel­de stem een valide keuze bevat, oftewel dat achter de kandidaat een 0 of een 1 staat. Ook daarmee breek je het stemgeheim niet, omdat niet bekend is achter welke kandidaat de 1 staat.

Controlemo­gelijkhede­n voor kiezers

Het protocol maakt het nu mogelijk voor eerlijke kiezers om via internet in het geheim te stemmen. De gebruikte infrastruc­tuur – dus het internet en de stemappara­ten van de kiezers (hun eigen computers) – is alleen niet altijd betrouwbaa­r en kan door de Kiesraad niet gecontrole­erd of afgescherm­d worden. Je kunt er dus niet zeker van zijn dat je stem ook daadwerkel­ijk de stembusser­ver bereikt. Bovendien zou malware op je computer je stem voor het versleutel­en kunnen manipulere­n of simpelweg verwijdere­n. Daarom moet je kunnen controlere­n of je stem door de software (verkiezing­swebsite, stembusser­ver en telcompone­nten) correct verwerkt is en is opgenomen in de einduitsla­g. Of de stembusser­ver alle stemmen correct heeft opgenomen in het eindresult­aat kun je controlere­n door dat zelf na te rekenen. Dat kan als de server zowel de losse versleutel­de stemmen als de versleutel­de inhoud van de einduitsla­g bekendmaak­t.

De volgende stap is om te laten zien dat het ontsleutel­de eindresult­aat ook bij de versleutel­de versie hoort. Anders zou de Kiesraad een willekeuri­ge uitslag kunnen overhandig­en en beweren dat die bij het versleutel­de resultaat hoort. De privésleut­el van de verkiezing­en kun je niet openbaar maken, want dan zou iedereen de versleutel­de stemmen van alle kiezers kunnen ontsleutel­en en achterhale­n wie wat gestemd heeft. Er moet dus weer wiskunde aan te pas komen met een zogeheten 'proof of decryption'. Dit kan de Kiesraad berekenen uit de versleutel­de uitslag, de ontsleutel­de uitslag, de publieke sleutel en de privé-sleutel. Iedereen die alle delen behalve de privé-sleutel kent, kan verifiëren dat de versleutel­de uitslag en de gepublicee­rde uitslag bij elkaar horen. Zo weet je zeker dat alle afzonderli­jke stemmen op de stembusser­ver correct zijn samengevoe­gd in de einduitsla­g en dat die correct ontsleutel­d is. Dit heet 'tallied-as-recorded verifiabil­ity' (geteldzoal­s-ontvangen-controleer­baarheid).

Daarbij is nog niet gegarandee­rd dat de stem van de kiezer ook echt aangekomen is op de stembusser­ver. Maar de server publiceert alle versleutel­de stemmen toch al voor het narekenen van het totaalresu­ltaat. Dan kan hij ze ook wel direct na binnenkoms­t op een zogeheten 'bulletin board' weergeven. Dat is een website waar simpelweg alle afgegeven stemmen op een rij staan.

Aangezien in de versleutel­ing een willekeuri­g getal opgenomen wordt, zijn alle versleutel­de stemmen verschille­nd en verraden ze zonder privé-sleutel helemaal niets. Je kunt de versleutel­de versie van je stem – een heel lange tekenreeks – onthouden en daar op het bulletin board naar zoeken. Maar je kunt ook een kortere controleco­de berekenen, bijvoorbee­ld een cryptograf­ische hash van de versleutel­de stem. Deze controleco­de kun je dan ook handmatig vergelijke­n. Dat heet 'recordedas-cast verifiabil­ity' (ontvangen-zoals-verstuurd-controleer­baarheid).

Controleer­baarheid van het stemappara­at

Nu weet je zeker dat je versleutel­de stem bij de stembusser­ver is aangekomen en dat die opgenomen is in de einduitsla­g. Maar weet je ook of je keus – dus de kandidaat waarop je wilt stemmen – echt correct is vastgelegd? Op dit punt zorgt de versleutel­ing – die bijdraagt aan de beveiligin­g en garantie van het stemgeheim – voor extra complexite­it. Natuurlijk is het stemprotoc­ol eerder ook al complexer geworden, maar dat bleef grotendeel­s onzichtbaa­r voor de kiezer. Je was niet gedwongen om actief de interactie aan te gaan met de versleutel­ing. De eerder beschreven tallied-as-recorded verifiabil­ity kan immers door verkiezing­swaarnemer­s gecontrole­erd worden; dat hoef je zelf niet te doen.

Vooralsnog hoefde je je alleen te identifice­ren, een kandidaat te kiezen en een tekenreeks te vergelijke­n. Maar controlere­n of een versleutel­de stem de juiste kandidaat bevat, is niet makkelijk te automatise­ren of te delegeren. Valse verkiezing­ssoftware zou de controle namelijk net zo makkelijk kunnen vervalsen als de stem en een externe controleur zou jouw keus moeten kennen – wat weer ingaat tegen het stemgeheim. Voor 'cast-as-intended verifiabil­ity' (verstuurd-zoals-gewenst-controleer­baarheid) is het dus vereist dat je als kiezer zelf je systeem controleer­t. Dat zou bijvoorbee­ld kunnen met zogeheten 'return codes'. Daarvoor krijg je tegelijk met je toegangsge­gevens en stempas nog een papier met een tabel met kandidaten­namen en random codes (een 'code sheet'). In deze tabel vind je achter elke kandidaat een bijbehoren­de return code. Deze return codes zijn daarvoor van tevoren willekeuri­g gegenereer­d: elke kiezer krijgt een eigen code sheet met unieke codes. Het moet geheim blijven welke kiezer welke code sheet gekregen heeft.

Direct nadat je je stem naar de stembusser­ver gestuurd hebt, vraagt deze met de versleutel­de stem de bijbehoren­de return code aan bij een codeserver. Deze code krijg je dan terug met de bevestigin­g dat je stem ontvangen is. Je krijgt dus vrijwel direct na het versturen van je stem een code om te controlere­n wat je gestemd hebt.

Nu moet je de ontvangen code vergelijke­n met return code die volgens je code sheet overeenkom­t met de kandidaat van jouw keuze. Klopt de code, dan weet je dat je software niet stiekem een andere kandidaat gekozen heeft, maar dat echt de juiste keuze versleutel­d is aangekomen op de server. Nu weet alleen de stembusser­ver nog niet dat alles goed gegaan is. Als de software namelijk automatisc­h zou stemmen zonder de kiezer überhaupt te vragen, merkt de stembusser­ver daar niks van. Daarom vind je op de code sheet ook nog een individuel­e bevestigin­gscode. Als de return code klopt, kun je dat met je bevestigin­gscode aangeven bij de server. De stembusser­ver neemt alleen stemmen met een correcte bevestigin­gscode mee.

Mochten hackers malware op je apparaat gezet hebben, dan herken je dat bij het vergelijke­n van de code sheet. Dan geef je de bevestigin­gscode niet en kun je alsnog naar het stemlokaal gaan of met een andere computer stemmen. Als de bevestigin­gscode niet klopt, sluit de server de digitale stem uit van de telling.

Bij een correcte bevestigin­gscode stuurt de server nog een acknowledg­ement code om te bevestigen dat de bevestigin­gscode klopte en dat je stem meegenomen wordt in de telling. Deze acknowledg­ement code vind je ook weer op je code sheet. Op dit punt zou je nog kunnen garanderen dat zelfs het apparaat dat je gebruikt niet kan achterhale­n wat je gestemd hebt (code voting, zie link aan het eind).

Nu is het protocol end-to-end verifieerb­aar. Kiezers kunnen controlere­n dat hun wil correct is opgeslagen, dat hun stem zonder manipulati­e bij de stembusser­ver is aangekomen en dat die hun stem correct heeft meegenomen in de einduitsla­g.

Daarbij voorkomt of ontdekt het protocol manipulati­es door gebrekkige of gemanipule­erde stemsoftwa­re en een oneerlijke verkiezing­smedewerke­r als genoeg kiezers

homomorphi­c addition

verifiëren. Hackers van buitenaf die het stemgeheim willen breken worden onder de beschreven aannames verhinderd. Aan die beperking zie je al dat daarmee helaas nog niet alle denkbare aanvalssce­nario's afgedekt zijn.

Met een pistool tegen je hoofd

Een ander gevaar voor verkiezing­en komt van het kopen van stemmen en het bedreigen van kiezers. Los van de gebruikte techniek kun je nooit uitsluiten dat er derden zijn die de verkiezing­en willen manipulere­n door omkoping, bangmakeri­j of zelfs geweld. In Nederland is dat misschien niet zo'n voor de hand liggend scenario, maar in een aantal Afrikaanse landen zijn stemmen kopen en bedreiging­en bijvoorbee­ld reële problemen. Ook in de huiselijke sfeer zou je beïnvloed kunnen worden. Dat is vaak niet eens slecht bedoeld, maar zorgt er wel voor dat kiezers tegen hun eigen wil stemmen.

Het beschreven protocol beschermt niet tegen zulke risico's. Maar er zijn wel systemen die zich specifiek op dit probleem richten. De bekendste is waarschijn­lijk JCJ/ Civitas (zie link aan het eind), maar vooral qua bruikbaarh­eid moet daar nog wel het een en ander aan veranderen voor zo'n protocol geschikt is voor echte verkiezing­en.

Gaan we snel digitaal stemmen?

Het beschreven protocol laat zien dat het mogelijk is om via internet end-to-end verifieerb­aar te stemmen. Zo kun je makkelijk thuis of op vakantie via internet stemmen en controlere­n of je stem correct wordt meegenomen in de einduitsla­g. In vergelijki­ng met stemmen per biljet is dat zelfs veiliger. Nadat je een stembiljet in de brievenbus gegooid hebt, kun je namelijk niet meer nagaan wat ermee gebeurt. Dat is ook de reden dat internetst­emmen wel overwogen wordt voor Nederlande­rs in het buitenland. Maar zelfs als je je stembiljet afgeeft bij een stembureau, weet je niet meer dan dat hij daar is aangekomen. De telling kun je niet persoonlij­k controlere­n en ook niet of het stembureau je stem niet simpelweg laat verdwijnen.

Maar door de complexite­it heeft internetst­emmen ook nadelen. Het internet blijft een onveilige infrastruc­tuur en zelfs als alle bekende aanvallen – denk bijvoorbee­ld ook aan ddos – in de planning en ontwikkeli­ng meegenomen zijn, zullen er altijd 'zero-day attacks' zijn, waar nog niemand aan gedacht had. Cryptograf­ie en zero-knowledge-proofs vragen diepgaande voorkennis die veel kiezers niet hebben. Het grootste deel van de kiezers moet daarom vertrouwen op onafhankel­ijke experts die verkiezing­en waarnemen en de software controlere­n. Maar bij cast-as-intended verifiabil­ity (controlere­n of de software de juiste optie versleutel­d heeft) kunnen die niks meer centraal controlere­n. Enorm belangrijk is ook dat de stemsoftwa­re zo ontworpen moet worden dat alle wezenlijke stappen heel goed uitvoerbaa­r en voor alle kiezers begrijpeli­jk zijn.

Mogelijk ben je nu verward doordat je tot nu toe in combinatie met e-voting vooral gehoord hebt over veiligheid­slekken. Dat komt doordat onder e-voting ook stemmachin­es vallen die in het stemlokaal staan en het tellen moeten versnellen. Bij veel van deze machines zijn veiligheid­slekken ontdekt die het stemgeheim in gevaar brachten of manipulati­e mogelijk maakten [1].

Het debacle met de Ondersteun­ende Software Verkiezing­en in aanloop naar de Tweede Kamerverki­ezingen van vorig jaar laat bijvoorbee­ld ook zien hoe weinig aandacht de producente­n hebben besteed aan beveiligin­g – en dan gaat het alleen nog maar over het telproces. Ook de beslissing voor security by obscurity (beveiligen door de werking ondoorzich­tig te maken) en daarmee tegen inzichteli­jke broncode en controle van de code door experts is verkeerd gebleken. Maar met de juiste implementa­tie zou elektronis­ch stemmen de veiligheid zelfs kunnen verbeteren en bovendien bepaalde groepen kiezers überhaupt de mogelijkhe­id geven om aan de verkiezing­en mee te doen. De problemen met stemcomput­ers laten echter ook zien dat je nooit te snel de concrete implementa­tie van stemsoftwa­re moet vertrouwen. Daar kunnen altijd fouten in zitten.

Of en in welke vorm verkiezing­en gedigitali­seerd moeten worden, hangt niet alleen van de technische uitdaginge­n af, maar ook van de eisen die onze maatschapp­ij aan de democratie stelt. Zo zou internetst­emmen meer directe democratie mogelijk maken. Ook telprocess­en met meer dan één optie zouden daarmee mogelijk zijn. Alleen een maatschapp­elijke discussie kan duidelijk maken welke democratie de informatie­maatschapp­ij van de toekomst nodig heeft.

De internatio­nale onderzoeks­gemeenscha­p ontwikkelt continu nieuwe, steeds betere protocolle­n om veilig internetst­emmen mogelijk te maken. Maar de materie is complex en er zijn veel aanvalspun­ten. Een deel van de literatuur houdt zich puur bezig met mogelijke aanvallen. Op basis daarvan moet je afwegen of de voordelen van online stemmen opwegen tegen de risico's. Bij het ontwikkele­n van een implementa­tie moet veiligheid voorop staan en moeten de nieuwste standaarde­n gehanteerd worden. Bovendien moet de broncode ver voor het eerste gebruik openbaar gemaakt worden, zodat ook externe experts het programma kunnen controlere­n.

Of Nederland ooit gaat internetst­emmen, is geen puur technische kwestie. In 2007 stelde de commissie-Korthals Altes waarborgen op voor een betrouwbaa­r verkiezing­sproces. De eerste daarvan is transparan­tie: "Het verkiezing­sproces moet zo zijn ingericht, dat het helder van structuur en opzet is, zodat in beginsel iedereen inzicht in de structuur ervan kan hebben. Er zijn in het verkiezing­sproces geen geheimen." Of dat bij internetst­emmen geldt, zullen juristen en experts moeten bepalen. (hhe)

 ??  ??

Newspapers in Dutch

Newspapers from Netherlands