Online stemmen veiliger maken en manipulatie voorkomen

Marco den Teuling
0

Inhoudsopgave

online stemmen internetstemmen digitaal stemmen verkiezingenDe Amerikaanse verkiezingen leidden tot een grootschalig onderzoek en in Nederland gebruiken we weer het analoge rode potlood om te stemmen. Stemmen via internet zou de democratie sneller en handiger kunnen maken. Maar om manipulatie te voorkomen en het stemgeheim te bewaken heb je een hoop wiskundige trucs nodig. We bekijken hoe online stemmen veiliger gemaakt kan worden.

In het internettijdperk lijkt stemmen met potlood en papier een nogal ouderwetse aangelegenheid. Dat moet online makkelijker en sneller kunnen. Met het oog op verkiezingen die nog gaan komen, is het goed om nog weer eens op een rij te zetten wat online stemmen zo lastig maakt en hoe je de betreffende 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 verkiezingen. In Nederland zijn in 2004 en 2006 experimenten gedaan met online stemmen 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 (zie ook dit historische overzicht).

Aan verkiezingen zitten dan ook een aantal eisen waar je digitaal niet zo makkelijk aan kunt voldoen. Dat geldt bijvoorbeeld 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 manipuleert en iedereen moet de telling kunnen controleren. Om dat bij online stemmen voor elkaar te krijgen heb je cryptografie en wiskunde nodig. Hier geven we een voorbeeld van hoe zoiets eruit zou kunnen zien.

online stemmen internet Nederland wereldwijd Amerika

Alleen kiesgerechtigden!

Het internet is een decentrale infrastructuur die niet gecontroleerd kan worden. Niemand kan garanderen dat het netwerk veilig is. Elke internetgebruiker kan proberen in te breken op de verkiezingen, maar alleen kiesgerechtigde burgers mogen de mogelijkheid hebben om een geldige stem uit te brengen. Dat is de eerste uitdaging voor elk protocol voor online stemmen.

Je kunt dat makkelijk bereiken door elke kiezer samen met de stempas toegangsgegevens toe te sturen: kiezers-ID plus wachtwoord – verzegeld zoals bij pincodes van nieuwe bankpasjes. Daarmee log je dan in op de verkiezingssite en selecteer je de gewenste kandidaat uit een lijst. Ga er voor het gemak van uit dat er één kandidatenlijst 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 kwaadwillenden de toegangsgegevens uit de brievenbus kunnen stelen en daarmee in jouw naam kunnen stemmen. Daarom zou daarnaast je identiteit nog gecontroleerd moeten worden. In Nederland zou de DigiD daarvoor een logische optie zijn, liefst met tweestapsauthenticatie: met een code via sms of met de DigiD-app. Dan moet iedereen daar alleen wel over beschikken.

Afluisteren tegengaan

Dit primitieve stemprotocol is heel makkelijk in gebruik en goed te begrijpen. Maar het stemgeheim is er niet mee gewaarborgd. 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 stembusserver hoe jij gekozen hebt – en daarmee iedereen die toegang heeft tot deze computer. Deze problemen kunnen wel opgelost worden met asymmetrische versleuteling.

Daarvoor genereert de Kiesraad voor de verkiezingen een sleutelpaar. De publieke sleutel wordt aan de kiezers uitgedeeld. In het voorbeeld hoort die bij de verkiezingssite. De website gebruikt hem om de stem van de kiezer te versleutelen voordat die naar de server gaat. De versleutelde 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 versleutelen om van iedereen te kunnen achterhalen op wie hij of zij gestemd heeft. Maar als je voor het versleutelen steeds een willekeurig getal toevoegt, ziet de versleutelde inhoud er elke keer anders uit.

De privé-sleutel blijft veilig bewaard bij de Kiesraad en wordt pas bij de telling weer tevoorschijn gehaald om de verkiezingsuitslag te bepalen. Als je stem nu over het internet raast, kan een aanvaller hem nog steeds wel afluisteren, maar weet daarmee niet wat je gestemd hebt. Om ervoor te zorgen dat de aanvaller zelfs de versleutelde inhoud niet te zien krijgt, moet de verbinding naar de stembusserver bovendien HTTPS gebruiken.

Slechte voorzitter te slim af

Toch is je stem nog steeds niet helemaal geheim, omdat het verband tussen kiezer en bijbehorende versleutelde inhoud bekend is bij de stembusserver. Als die server gebruikt wordt voor de ontsleuteling, kan een kwaadwillende Kiesraadvoorzitter of systeembeheerder de relatie tussen kiezers en gekozen kandidaten achterhalen. Dat probleem bestaat bijvoorbeeld op het moment dat de slechte voorzitter stemmen ontsleutelt die hij aan afzonderlijke kiezers kan koppelen. Je kunt die mogelijkheid om losse stemmen te ontsleutelen vermijden door gebruik te maken van homomorfe versleuteling. Daarbij kun je eenvoudige wiskundige operaties op de versleutelde stemmen uitvoeren die overeenkomen met dezelfde operaties op de onversleutelde inhoud. Voor de verkiezingsuitslag volstaat het om de stemmen dan in versleutelde toestand op te tellen (homomorphic addition).

Om dat te laten werken moet je alleen wel de digitale representatie van de stembiljetten aanpassen. De gebruiker ziet daar verder niks van terug. De stemsoftware transformeert de stembiljetten voor het versleutelen zo dat achter de gekozen kandidaat een 1 staat en bij de overige kandidaten een 0. Als alternatief zou je per kandidaat een versleuteld bericht kunnen genereren met daarin afhankelijk van de uitgebrachte stem een 1 of een 0. Met deze methode voeg je alle versleutelde stembiljetten samen voor het tellen.

online stemmen stembiljet versleuteld encryptie

Door het samenvoegen ontstaat er een versleuteld bericht met het totale resultaat van de verkiezingen. Daaruit blijkt op geen enkele manier meer hoe de afzonderlijke kiezers gestemd hebben. Toch voorkomt homomorfe versleuteling nog niet dat losse stemmen ontsleuteld worden. Iemand uit de Kiesraad zou de geheime sleutel van de verkiezingen kunnen gebruiken voordat de verkiezingen afgelopen zijn om een tussenstand te ontsleutelen. Je moet dus waarborgen dat de geheime sleutel niet ingezet wordt voor het einde van de verkiezingen. Daarvoor verdeel je je vertrouwen over meerdere partijen en vertrouw je erop dat die niet samenzweren. Je kunt de privé-sleutel ook in delen genereren, waarbij elke partij slechts één deel krijgt. Pas als de verschillende 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 verkiezingen 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 gegenereerd, maar zijn er slechts t delen nodig om een geldige sleutel te vormen (t < n). Je verdeelt dus bijvoorbeeld n = 7 sleuteldelen over de leden van de Kiesraad en vertrouwt erop dat minstens t = 5 eerlijk en betrouwbaar genoeg zijn om hun deel voor de dag te halen bij het ontsleutelen 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 manipuleert dat hij tien stemmen aan een kandidaat geeft in plaats van één? Daarvoor hoeft hij alleen eigen stemsoftware te programmeren die grotere aantallen in het stembiljet versleutelt. Aangezien alleen het resultaat ontsleuteld 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 stemsoftware) kan namelijk een bewijs genereren dat zijn versleutelde 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 controleert de stembusserver dit bewijs automatisch en informeert je als je stem geweigerd wordt. Helaas rekent homomorfe versleuteling ook met negatieve getallen. Iemand zou dus 20 online stemmen kunnen geven aan de ene kandidaat en dat compenseren 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 versleutelde 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.

online stemmen stemgeheim encryptie

Controlemogelijkheden voor kiezers

Het protocol maakt het nu mogelijk voor eerlijke kiezers om via internet in het geheim te stemmen. De gebruikte infrastructuur – dus het internet en de stemapparaten van de kiezers (hun eigen computers) – is alleen niet altijd betrouwbaar en kan door de Kiesraad niet gecontroleerd of afgeschermd worden. Je kunt er dus niet zeker van zijn dat je stem ook daadwerkelijk de stembusserver bereikt. Bovendien zou malware op je computer je stem voor het versleutelen kunnen manipuleren of simpelweg verwijderen. Daarom moet je kunnen controleren of je stem door de software (verkiezingswebsite, stembusserver en telcomponenten) correct verwerkt is en is opgenomen in de einduitslag. Of de stembusserver alle online stemmen correct heeft opgenomen in het eindresultaat kun je controleren door dat zelf na te rekenen. Dat kan als de server zowel de losse versleutelde stemmen als de versleutelde inhoud van de einduitslag bekendmaakt.

De volgende stap is om te laten zien dat het ontsleutelde eindresultaat ook bij de versleutelde versie hoort. Anders zou de Kiesraad een willekeurige uitslag kunnen overhandigen en beweren dat die bij het versleutelde resultaat hoort. De privésleutel van de verkiezingen kun je niet openbaar maken, want dan zou iedereen de versleutelde stemmen van alle kiezers kunnen ontsleutelen en achterhalen 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 versleutelde uitslag, de ontsleutelde uitslag, de publieke sleutel en de privé-sleutel. Iedereen die alle delen behalve de privé-sleutel kent, kan verifiëren dat de versleutelde uitslag en de gepubliceerde uitslag bij elkaar horen. Zo weet je zeker dat alle afzonderlijke online stemmen op de stembusserver correct zijn samengevoegd in de einduitslag en dat die correct ontsleuteld is. Dit heet ‘tallied-as-recorded verifiability’ (geteld-zoals-ontvangen controleerbaarheid).

Daarbij is nog niet gegarandeerd dat de stem van de kiezer ook echt aangekomen is op de stembusserver. Maar de server publiceert alle versleutelde stemmen toch al voor het narekenen van het totaalresultaat. Dan kan hij ze ook wel direct na binnenkomst op een zogeheten ‘bulletin board’ weergeven. Dat is een website waar simpelweg alle afgegeven stemmen op een rij staan.

Aangezien in de versleuteling een willekeurig getal opgenomen wordt, zijn alle versleutelde stemmen verschillend en verraden ze zonder privé-sleutel helemaal niets. Je kunt de versleutelde versie van je stem – een heel lange tekenreeks – onthouden en daar op het bulletin board naar zoeken. Maar je kunt ook een kortere controlecode berekenen, bijvoorbeeld een cryptografische hash van de versleutelde stem. Deze controlecode kun je dan ook handmatig vergelijken. Dat heet ‘recorded-as-cast verifiability’ (ontvangen-zoals-verstuurd controleerbaarheid).

Controleerbaarheid van het stemapparaat

Nu weet je zeker dat je versleutelde stem bij de stembusserver is aangekomen en dat die opgenomen is in de einduitslag. Maar weet je ook of je keus – dus de kandidaat waarop je wilt stemmen – echt correct is vastgelegd? Op dit punt zorgt de versleuteling – die bijdraagt aan de beveiliging en garantie van het stemgeheim – voor extra complexiteit. Natuurlijk is het stemprotocol eerder ook al complexer geworden, maar dat bleef grotendeels onzichtbaar voor de kiezer. Je was niet gedwongen om actief de interactie aan te gaan met de versleuteling. De eerder beschreven tallied-as-recorded verifiability kan immers door verkiezingswaarnemers gecontroleerd worden; dat hoef je zelf niet te doen.

Vooralsnog hoefde je je alleen te identificeren, een kandidaat te kiezen en een tekenreeks te vergelijken. Maar controleren of een versleutelde stem de juiste kandidaat bevat, is niet makkelijk te automatiseren of te delegeren. Valse verkiezingssoftware 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 verifiability’ (verstuurd- zoals-gewenst-controleerbaarheid) is het dus vereist dat je als kiezer zelf je systeem controleert.

online stemmen code digitaalDat zou bijvoorbeeld kunnen met zogeheten ‘return codes’. Daarvoor krijg je tegelijk met je toegangsgegevens en stempas nog een papier met een tabel met kandidatennamen en random codes (een ‘code sheet’). In deze tabel vind je achter elke kandidaat een bijbehorende return code. Deze return codes zijn daarvoor van tevoren willekeurig gegenereerd: 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 stembusserver gestuurd hebt, vraagt deze met de versleutelde stem de bijbehorende return code aan bij een codeserver. Deze code krijg je dan terug met de bevestiging dat je stem ontvangen is. Je krijgt dus vrijwel direct na het versturen van je stem een code om te controleren wat je gestemd hebt.

Nu moet je de ontvangen code vergelijken met return code die volgens je code sheet overeenkomt 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 versleuteld is aangekomen op de server. Nu weet alleen de stembusserver nog niet dat alles goed gegaan is. Als de software namelijk automatisch zou stemmen zonder de kiezer überhaupt te vragen, merkt de stembusserver daar niks van. Daarom vind je op de code sheet ook nog een individuele bevestigingscode. Als de return code klopt, kun je dat met je bevestigingscode aangeven bij de server. De stembusserver neemt alleen stemmen met een correcte bevestigingscode mee.

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

Bij een correcte bevestigingscode stuurt de server nog een acknowledgement code om te bevestigen dat de bevestigingscode klopte en dat je stem meegenomen wordt in de telling. Deze acknowledgement 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 achterhalen wat je gestemd hebt (code voting).

Nu is het protocol end-to-end verifieerbaar. Kiezers kunnen controleren dat hun wil correct is opgeslagen, dat hun stem zonder manipulatie bij de stembusserver is aangekomen en dat die hun stem correct heeft meegenomen in de einduitslag.

Daarbij voorkomt of ontdekt het protocol manipulaties door gebrekkige of gemanipuleerde stemsoftware en een oneerlijke verkiezingsmedewerker als genoeg kiezers 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 aanvalsscenario’s afgedekt zijn.

Met een pistool tegen je hoofd

Een ander gevaar voor verkiezingen 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 verkiezingen willen manipuleren door omkoping, bangmakerij 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 bedreigingen bijvoorbeeld reële problemen. Manipulatie van verkiezingen via social media is verder iets waar aandacht naar uitgaat. 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 waarschijnlijk JCJ/ Civitas, maar vooral qua bruikbaarheid moet daar nog wel het een en ander aan veranderen voor zo’n protocol geschikt is voor echte verkiezingen.

Gaan we snel online stemmen?

Het beschreven protocol laat zien dat het mogelijk is om via internet end-to-end verifieerbaar te stemmen. Zo kun je makkelijk thuis of op vakantie via internet stemmen en controleren of je stem correct wordt meegenomen in de einduitslag. In vergelijking 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 online stemmen wel overwogen wordt voor Nederlanders 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 persoonlijk controleren en ook niet of het stembureau je stem niet simpelweg laat verdwijnen.

Maar door de complexiteit heeft online stemmen ook nadelen. Het internet blijft een onveilige infrastructuur en zelfs als alle bekende aanvallen – denk bijvoorbeeld ook aan ddos – in de planning en ontwikkeling meegenomen zijn, zullen er altijd ‘zero-day attacks’ zijn, waar nog niemand aan gedacht had. Cryptografie en zero-knowledge-proofs vragen diepgaande voorkennis die veel kiezers niet hebben. Het grootste deel van de kiezers moet daarom vertrouwen op onafhankelijke experts die verkiezingen waarnemen en de software controleren. Maar bij cast-as-intended verifiability (controleren of de software de juiste optie versleuteld heeft) kunnen die niks meer centraal controleren. Enorm belangrijk is ook dat de stemsoftware zo ontworpen moet worden dat alle wezenlijke stappen heel goed uitvoerbaar en voor alle kiezers begrijpelijk zijn.

online stemmen e-voting stemcomputerMogelijk ben je nu verward doordat je tot nu toe in combinatie met e-voting vooral gehoord hebt over veiligheidslekken. Dat komt doordat onder e-voting ook stemmachines vallen die in het stemlokaal staan en het tellen moeten versnellen. Bij veel van deze machines zijn veiligheidslekken ontdekt die het stemgeheim in gevaar brachten of manipulatie mogelijk maakten.

Het debacle met de Ondersteunende Software Verkiezingen in aanloop naar de Tweede Kamerverkiezingen van 2017 laat bijvoorbeeld ook zien hoe weinig aandacht de producenten hebben besteed aan beveiliging – en dan gaat het alleen nog maar over het telproces. Ook de beslissing voor security by obscurity (beveiligen door de werking ondoorzichtig te maken) en daarmee tegen inzichtelijke broncode en controle van de code door experts is verkeerd gebleken. Maar met de juiste implementatie zou elektronisch stemmen de veiligheid zelfs kunnen verbeteren en bovendien bepaalde groepen kiezers überhaupt de mogelijkheid geven om aan de verkiezingen mee te doen. De problemen met stemcomputers laten echter ook zien dat je nooit te snel de concrete implementatie van stemsoftware moet vertrouwen. Daar kunnen altijd fouten in zitten.

Of en in welke vorm verkiezingen gedigitaliseerd moeten worden, hangt niet alleen van de technische uitdagingen af, maar ook van de eisen die onze maatschappij aan de democratie stelt. Zo zou online stemmen meer directe democratie mogelijk maken. Ook telprocessen met meer dan één optie zouden daarmee mogelijk zijn. Alleen een maatschappelijke discussie kan duidelijk maken welke democratie de informatiemaatschappij van de toekomst nodig heeft.

De internationale onderzoeksgemeenschap ontwikkelt continu nieuwe, steeds betere protocollen om veilig online stemmen mogelijk te maken. Maar de materie is complex en er zijn veel aanvalspunten. 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 ontwikkelen van een implementatie moet veiligheid voorop staan en moeten de nieuwste standaarden gehanteerd worden. Bovendien moet de broncode ver voor het eerste gebruik openbaar gemaakt worden, zodat ook externe experts het programma kunnen controleren.

Of Nederland ooit overgaat op online stemmen, is geen puur technische kwestie. In 2007 stelde de commissie-Korthals Altes waarborgen op voor een betrouwbaar verkiezingsproces. De eerste daarvan is transparantie: “Het verkiezingsproces 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 verkiezingsproces geen geheimen.” Of dat bij online stemmen geldt, zullen juristen en experts moeten bepalen.

(Karola Marky en Roberts Kolosovs / Herman Heringa , c’t magazine 5/2018)

Deel dit artikel

Lees ook

Processor snelheid opvoeren: trucs van moederbord-fabrikanten

Moederbordfabrikanten gebruiken trucs voor de processor snelheid opvoeren op hun moederborden. Daardoor kan het verbruik onverwacht hoger zijn en het ...

Antivirus programma voor Windows: Defender vs. betaalde software

Heb je een antivirus programma voor Windows nodig in plaats van de standaard geïnstalleerde Windows Defender? We zijn op zoek gegaan naar een antwoord...

0 Praat mee

avatar
  Abonneer  
Laat het mij weten wanneer er