Een algoritmische fout onder het geheime stembiljet
Het geheime stembiljet is een van de steunpilaren van de democratie. In Georgia, zoals in de meeste staten, betekent dit dat je wel kunt weten óf je buurman heeft gestemd, maar nooit op wie. Deze eenvoudige garantie maakt transparante verkiezingen mogelijk, terwijl kiezersintimidatie wordt ontmoedigd. Toch is die garantie in meerdere staten, waaronder Georgia, actief in gevaar. Om het gepubliceerde register anoniem te houden, husselen stembiljetscanners de elektronische verslagen willekeurig voordat ze worden vrijgegeven. Een beveiligingslek dat in 2022 werd onthuld, laat echter zien dat deze husselactie kan worden teruggedraaid. Sommige staten hebben de software-update die dit oplost nog niet toegepast. Wanneer men de willekeur ongedaan maakt en dit koppelt aan een register van wanneer iemand heeft gestemd, worden anonieme stembiljetten opeens herleidbaar.
Ik ben geen beveiligingsonderzoeker en ik ben nooit in Georgia geweest. Toch was ik in staat om binnen enkele uren, met behulp van AI-tools en uitsluitend openbare registers, de volgorde te reconstrueren waarin 1,5 miljoen stembiljetten zijn uitgebracht tijdens de primaire verkiezingen van mei 2026 in Georgia—dat is 98,9% van de stembiljetten die in persoon zijn ingeleverd. Op basis van deze volgorde en de openbare logboeken van de staat kan ik specifieke districten targeten en de AI vragen om exact te identificeren hoe een willekeurig persoon heeft gestemd. In sommige districten van Georgia kan ik het exacte stembiljet van elke kiezer in de stemcentra bepalen; het stemgeheim is daar volledig verloren gegaan.
Het lek
In oktober 2022 publiceerde een team van onderzoekers een rapport waaruit bleek dat bepaalde stembiljetscanners die in de VS worden gebruikt, een kritieke privacyfout vertoonden in de manier waarop ze stembiljetten anonimiseren. Concreet kennen de machines elk elektronisch stembiljetrecord op het moment van scannen een schijnbaar willekeurig nummer toe, zodat elk biljet later kan worden gecontroleerd (auditing). Het algoritme waarmee de machines dit willekeurige nummer genereren is echter deterministisch en kan exact worden teruggedraaid om de volgorde te identificeren waarin de stembiljetten zijn uitgebracht.
Ter illustratie: stel dat ik een kaartspel zou schudden door herhaaldelijk de bovenste kaart te pakken en deze in het midden te plaatsen, en ik zou vervolgens hardop verklaren dat dit mijn manier van schudden is. Je zou dan waarschijnlijk een gemakkelijk spel blackjack tegen me spelen. De husselactie die bedoeld was om anonimiteit te bieden, heeft precies het tegenovergestelde effect.
Natuurlijk is het kennen van de volgorde waarin de stemmen zijn uitgebracht slechts één deel van de puzzel. Maar wanneer dit wordt gecombineerd met publiek beschikbare gegevens over de volgorde waarin kiezers hun stem hebben uitgebracht (zoals logboeken of waarnemers bij de stembussen), bestaat er een eenvoudige procedure om de koppeling van stembiljetten naar kiezers te reconstrueren.
AI-tools
In de geschiedenis van computerbeveiliging is er meestal een kloof van expertise geweest die een kwetsbaarheid scheidde van de daadwerkelijke exploitatie. Het proces van het lezen van een onderzoekspaper over een kwetsbaarheid en dit omzetten in werkende code op de juiste dataset zou een getrainde programmeur weken tot maanden kosten. Die kloof fungeerde in de praktijk als een vorm van bescherming.
Large Language Models (LLM's), de systemen achter chatbots zoals ChatGPT, slaan nu bruggen over die kloof. Dankzij het vermogen om code te schrijven, deze uit te voeren, te zien wat er fout gaat en het opnieuw te proberen, zijn modellen nu in staat om te programmeren tot een doel is bereikt. Men kan dit doel in gewone taal beschrijven, waarna de LLM het werk uitvoert dat voorheen een specialist vereiste. Een LLM die op deze manier wordt ingezet voor een programmeertaak, noem ik een "coderingsagent" (of simpelweg "agent").
Voor slechts 20 dollar kreeg ik toegang tot de krachtigste coderingsagenten en richtte ik ze eenvoudig op deze specifieke, reële en ongepatchte fout in Amerikaanse verkiezingsapparatuur. Ik heb geen nieuwe aanval ontwikkeld of een nieuw lek ontdekt. Alles wat ik deed, was de agent wijzen op het paper over de kwetsbaarheid en vragen of het mogelijk was dit toe te passen in de staat Georgia. Binnen enkele uren had ik een pipeline om geheime stembiljetten in de hele staat Georgia te analyseren en te identificeren, en de agent vertelde me precies welke aanvullende informatie nodig was om de stembiljetten van echte kiezers te identificeren. Op geen enkel moment weigerde de agent mee te werken of uitte hij zorgen over het implementeren van de exploit.
De resultaten
Bijna vier jaar na de onthulling van de oorspronkelijke kwetsbaarheid was ik nog steeds in staat deze te gebruiken om het stemgedrag in Georgia (een van de 21 staten die de getroffen scanners gebruiken) te analyseren tijdens de primaire verkiezingen van mei 2026.
Opvallend is dat ik geen stemmachine heb aangeraakt, geen netwerk heb geëxploiteerd, geen broncode heb onderzocht of toegang heb gezocht tot niet-publieke informatie.
Na de coderingsagent naar het oorspronkelijke onderzoekspapier te hebben gewezen, voorzag ik hem van twee databronnen die in het paper werden benadrukt:
- De lijst van vroegtijdige stemmers per district.
- Het "CVR"-bestand (cast-vote record), dat elk stembiljet en de gemaakte keuzes bevat (maar niet de namen van de kiezers of andere identificerende informatie). Het CVR-bestand is op aanvraag beschikbaar, juist omdat een openbaar register op stembiljetniveau essentieel is om verkiezingsuitslagen onafhankelijk te kunnen verifiëren.
Afzonderlijk schenden deze openbare bestanden het stemgeheim niet. De AI-agent was echter in staat ze te combineren door de stembiljetten te "ont-husselen" met behulp van de gepubliceerde exploit, de datum te identificeren waarop elk biljet was uitgebracht, en vervolgens groepen (buckets) van stembiljetten en potentiële kiezers te creëren.
Bijvoorbeeld: in een primaire verkiezing, als er op een bepaalde ochtend drie Democraten kwamen stemmen in een bepaald stembureau, kon het model gemakkelijk wijzen naar de drie stembiljetten die bij die drie kiezers moeten horen, zelfs als het model nog niet kon zeggen welk biljet van wie was. Voor kleine landelijke districten in Georgia, waar bijvoorbeeld slechts één Democraat op een bepaalde dag van de vroegtijdige stemming kwam, had het model al voldoende informatie om het stembiljet van die persoon met volledige zekerheid te identificeren.
Met enkel deze twee openbare bestanden stelde ik vast dat in 114 van de 139 onderzochte districten de volgorde van de in-persoon uitgebrachte stemmen hersteld kan worden. Dit gaat om 1,52 miljoen stembiljetten, of 98,9% van de in-persoon stemmen in die districten.
Om dieper in te gaan op de resultaten, is het nuttig om onderscheid te maken tussen twee niveaus van zekerheid:
- Uniek geïdentificeerd: Dit is een gedwongen match. De persoon was de enige kiezer van zijn partij, in zijn stembureau, met een bepaald type stembiljet, op een bepaalde dag, waardoor er exact één stembiljet is om te matchen. Op basis van enkel de openbare bestanden gaat dit om ongeveer 1% van alle geanalyseerde vroegtijdige in-persoon stemmers.
- Gekoppeld aan een specifiek stembiljet: Dit is een sterkere claim en vereist één aanvullend openbaar register. In gevallen waarin we een groep mogelijke stembiljetten moeten ontwarren (bijvoorbeeld: welke van die drie Democraten heeft welk biljet ingeleverd), heb ik het openbare auditlogboek van de scanner en de check-in registers voor individuele stemlocaties verkregen. Deze geven precies de volgorde en tijdstempels van de kiezers die zich melden. In Heard County, een van de kleinste districten van Georgia, kon de agent de meerderheid van de 650 vroegtijdige in-persoon stemmers koppelen aan een specifiek stembiljet, en de rest tot op één wissel na. Hetzelfde resultaat deed zich voor in Ball Ground, een druk stemcentrum in Cherokee County, voor alle 1.860 vroegtijdige stemmers.
Implicaties
De bovengenoemde twee districten zijn niet uitzonderlijk; ik zou dit proces van het koppelen van kiezers aan stembiljetten in elk getroffen district kunnen herhalen. Gegeven zelfs een grove registratie van de volgorde waarin kiezers hun biljetten scanden, kan het AI-systeem hun stemmen matchen. En zo'n registratie is vaak triviaal te verkrijgen. In de kleine steden van Georgia, waar veel kiezers elkaar kennen, kunnen eenvoudige CCTV-beelden of zelfs gestationeerde waarnemers direct monitoren wanneer individuen hun stem uitbrengen. Voed dat aan een coderingsagent, en het systeem geeft hun stembiljetten terug.
Sterker nog, de meeste scanners in stembureaus tonen een openbare lopende telling van hoeveel stembiljetten er op een bepaalde locatie zijn ingediend. Als ik mijn eigen nummer noteer en weet dat mijn echtgenote direct achter mij staat, is haar bescherming van het geheime stembiljet onmiddellijk verloren.
Om het te herhalen: het geheime stembiljet is geen hoffelijkheid, maar de bescherming die kiezersdwang zinloos maakt. Een stem die niet bewezen kan worden, kan niet worden verkocht of afgedwongen. Als we toestaan dat dit wordt weggenomen, zijn deze risico's reëel. Je werkgever, je buurman of zelfs je echtgenoot kan je gevoelige informatie achterhalen.
Wat wordt er gedaan om dit op te lossen?
Minder dan je zou hopen. Een gecorrigeerde versie van de software werd ontwikkeld en gecertificeerd in maart 2023, maar de gegevens die ik hier analyseerde, stammen uit mei 2026. De onthulling, en zelfs een directe oplossing, hebben het probleem niet opgelost vanwege de trage adoptie van de oplossing door verkiezingsfunctionarissen. Hoewel ik voorheen wellicht zou hebben toegegeven dat deze exploit onwaarschijnlijk was om op grote schaal te worden gebruikt, heeft de opkomst van AI-coderingsinstrumenten de inzet fundamenteel veranderd. Voor deze kwetsbaarheid, en vele anderen die voorheen als te technisch complex werden beschouwd om direct te repareren, zijn we in de laatste fase beland.
Aanbevelingen
AI-coderingsinstrumenten hebben de technische drempel zo ver verlaagd dat functionarissen systemen met veel meer urgentie moeten patchen, en dat wij, als onderzoekers, moeten heroverwegen hoe we omgaan met de verantwoorde openbaarmaking van beveiligingslekken. De tijdlijn voor herstel verloopt nu in een heel ander tempo en iedereen kan een kwetsbaarheid targeten met weinig tot geen technische kennis.
Concreet voor deze kwetsbaarheid:
- Jurisdicties die Dominion-scanners gebruiken, moeten softwareversie 5.17 (of nieuwer) installeren.
- Getroffen scanners moeten worden gecorrigeerd vóór de volgende verkiezingen, niet pas na de volgende krantenkop.
Het behouden van openbaar beschikbare verkiezingsgegevens is essentieel voor een gezonde, controleerbare democratie, en geen van de resultaten die door deze machines zijn geproduceerd, is in twijfel te trekken. Echter, dergelijke gegevens kunnen niet worden beheouden als we privacy-algoritmen onjuist implementeren en kiezers in gevaar brengen door het simpele feit dat ze stemmen. Het is precies deze burgerplicht die we hebben verzuimd te beschermen, en het is hoog tijd dat we dat doen.
***
Over de auteur: Max Springer is een postdoctoraal onderzoeker bij Princeton's Center for Information Technology Policy en heeft een PhD in Toegepaste Wiskunde van de University of Maryland. Zijn werk onderzoekt hoe algoritmen en AI-systemen betrouwbaardiger en vertrouwder kunnen worden gemaakt, zowel in theorie als in de praktijk. Daarnaast werkt hij als freelance wetenschapscommunicator en collaboreert hij met beleidsmakers om ervoor te zorgen dat technische systemen worden begrepen en verantwoord worden ingezet.
***
Discussie en technische aanvullingen
Onder het artikel volgde een discussie waarin technische details en alternatieve oplossingen werden besproken.
Implementatie van de decryptie
Een van de reageerders, Phillip Davis, deelde C#-broncode die wordt gebruikt om de ID-nummers van stembiljetten te oncijferen. De code maakt gebruik van een deterministisch proces waarbij een substitutiecipher wordt toegepast op de cijfers $[0,1,2,3,4,5,6,7,8,9]$, die worden vervangen door $[5,0,8,3,2,6,1,9,4,7]$.
public class DvsOrderService : IDvsOrderService
{
public Dictionary<string, int> DvsNumbers { get; set; }
public DvsOrderService()
{
DvsNumbers = [];
var value = 0;
for (var index = 0; index < 1_000_000; index++)
{
var text = Cypher(value.ToString("D6"));
DvsNumbers.Add(text, index);
value = (value + 864_803) % 1_000_000;
}
}
public int GetICP(string obfuscatedIcp)
{
var unobfuscated = ReverseICP(obfuscatedIcp);
var dvsNumber = DvsNumbers[unobfuscated];
return dvsNumber;
}
public int GetICE(string obfuscatedIce)
{
var unobfuscated = ReverseICE(obfuscatedIce);
var dvsNumber = DvsNumbers[unobfuscated];
return dvsNumber;
}
public string ObfuscateICP(string text)
{
return $"{text[1]}{text[5]}{text[0]}{text[4]}{text[2]}{text[3]}";
}
public string ReverseICP(string text)
{
return $"{text[2]}{text[0]}{text[4]}{text[5]}{text[3]}{text[1]}";
}
public string ObfuscateICE(string text)
{
return $"{text[2]}{text[3]}{text[1]}{text[5]}{text[0]}{text[4]}";
}
public string ReverseICE(string text)
{
return $"{text[4]}{text[2]}{text[0]}{text[1]}{text[5]}{text[3]}";
}
static readonly int[] _cypher = [5, 0, 8, 3, 2, 6, 1, 9, 4, 7];
static string Cypher(string text)
{
return string.Concat(text.Select(digit => _cypher[digit - '0']));
}
}
Voorstel voor een structurele oplossing: Lexicografisch sorteren
David Jefferson stelde voor dat het opslaan van stembiljetten in een willekeurige volgorde eigenlijk niet nodig is. Een betere methode zou zijn om stembiljetten op te slaan in een canonieke, lexicografisch gesorteerde volgorde op basis van de stemmen zelf.
Hoe dit werkt:
- Er wordt een sorteersleutel gemaakt van de stemmen op het biljet. (Bijvoorbeeld: als een kiezer in race 1 voor kandidaat 2 stemt, in race 2 voor kandidaat 3, etc., wordt de sleutel
(2, 3, 10, 0, -1)). - Alle stembiljetten worden opgeslagen in deze alfabetische/numerieke volgorde.
- Omdat de volgorde nu bepaald wordt door de inhoud van de stem en niet door het moment van stemmen, is alle informatie over de volgorde van binnenkomst volledig vernietigd.
Kritiek op de haalbaarheid
Ray Lutz uitte kritiek op de claim dat het stemgeheim volledig verloren is. Hij voerde aan dat:
- De volgorde waarin mensen zich melden (sign-in) niet noodzakelijkerwijs dezelfde is als de volgorde waarin ze hun biljet scannen, omdat mensen verschillend snel stemmen.
- Als een kiezer zich meldt maar het stembureau verlaat zonder te stemmen, raakt de hele correlatie voor alle daaropvolgende stemmen verschoven en onbetrouwbaar.
Alternatieve fysieke oplossingen
Lutz stelde daarnaast twee werkbare oplossingen voor om de koppeling tussen kiezer en biljet te verbreken:
- Centrale scanning: Stembiljetten worden in een verzegelde bak verzameld (waardoor ze fysiek gehusseld worden) en pas later in een centraal kantoor gescand met hogesnelheidsscanners.
- Shuffle box: In stembureaus worden biljetten in beveiligde mappen in een kleine doos geplaatst en vervolgens in willekeurige volgorde eruit gehaald om gescand te worden.
Groetjes,