In We hebben stilgestaan bij het feit dat in het door ons onderzochte systeem voor afstandsverkiezingen de cryptografische algoritme "blinde elektronische handtekening" wordt gebruikt om de geheimhouding van de stem en de anonimiteit van de stemmer te waarborgen. In dit artikel zullen we dit nader bekijken.
Laten we eerst kijken naar de bekende en vertrouwde algoritme voor elektronische handtekeningen, dat breed wordt toegepast in verschillende informatiesystemen. De basis van de elektronische handtekening bestaat uit cryptografische algoritmen voor asymmetrische encryptie. Asymmetrische encryptie is encryptie met behulp van twee sleutels: de ene wordt gebruikt voor encryptie, de andere voor decryptie. Deze worden de open (publieke) en gesloten sleutel genoemd. De open sleutel is bekend bij anderen, terwijl de gesloten sleutel alleen bij de eigenaar van de elektronische handtekening ligt en op een ontoegankelijke plaats wordt opgeslagen.
Bij het ondertekenen gebeurt het volgende: eerst wordt het elektronische document, via wiskundige transformaties, omgezet in een reeks symbolen van een bepaalde grootte ā dit wordt een hashfunctie genoemd.
De verkregen symbolenreeks (hash van het document) wordt door de verzender van het document met de gesloten sleutel versleuteld en samen met de open sleutel naar de ontvanger gestuurd. De ontvanger decrypt de symbolenreeks met de open sleutel, past dezelfde hashfunctie op het document toe en vergelijkt het resultaat van de transformatie met het resultaat van de decryptie. Als alles overeenkomt, zijn er na het ondertekenen door de verzender geen wijzigingen aan het document aangebracht.
De beschreven handelingen maken het mogelijk om zich te vergewissen van de ongewijzigdheid van het document, maar garanderen niet dat de verzender werkelijk is wie hij beweert te zijn. Daarom hebben we een derde partij nodig, die zowel door de verzender als de ontvanger wordt vertrouwd. Om dit te doen, vraagt de verzender vóór het verzenden van het document de derde partij om zijn open sleutel met haar elektronische handtekening te ondertekenen. Nu stuurt de verzender het document, zijn open sleutel en de handtekening van de derde partij van zijn sleutel naar de ontvanger. De ontvanger controleert de handtekening van de derde partij op de open sleutel en vertrouwt de verkregen handtekening van het document.
Laten we nu kijken naar wat een "blinde handtekening" is en hoe deze ons kan helpen bij anonymisering.
Stel je voor dat in het bovenstaande voorbeeld de afzender een kiezer is, het document een stembiljet is, en de ontvanger de verkiezingscommissie, of zoals we zeiden, "de component voor het tellen en registreren van stemmen". In dit geval fungeert de component "Kiezerslijst" als derde partij (validator). Het proces kan als volgt verlopen.

De kiezer genereert op zijn apparaat een sleutelpaar - een privƩ- en een openbare sleutel. Aangezien deze sleutels op zijn persoonlijke apparaat in de browser worden aangemaakt, zijn ze alleen aan hem bekend.
Met deze sleutels zal hij het stembiljet ondertekenen om de integriteit ervan te waarborgen. Het ondertekende stembiljet en de openbare sleutel worden naar de verkiezingscommissie gestuurd. Om het stembiljet te accepteren, moet de component "Gedecentraliseerde opslag en telling van stemmen" controleren of de openbare sleutel is ondertekend door de validator.
De validator (component "Kiezerslijst") zal de openbare sleutel pas ondertekenen nadat hij heeft geverifieerd dat de kiezer in de kiezerslijst staat.
Om de geheimhouding van de stemming te waarborgen, mag de openbare sleutel van de kiezer, die op zijn apparaat is aangemaakt, aan niemand bekend zijn. Dit betekent dat de validator moet onderteken wat hij niet kent. De taak lijkt onuitvoerbaar, maar cryptografische algoritmes - in dit geval het "blinde handtekening" algoritme - komen hier te hulp.
Eerst moet de openbare sleutel op het apparaat van de kiezer worden gemaskeerd. Maskering houdt in dat bepaalde wiskundige bewerkingen op het apparaat van de gebruiker worden uitgevoerd. Stel je voor dat je een willekeurig getal van 1 tot 100 hebt gekozen, vervolgens een tweede willekeurig getal van 1 tot 10 en een derde van 10 tot 50, waarbij je het oorspronkelijk gekozen getal tot de macht van het tweede getal verheft en zonder rest deelt door het derde. Het resultaat communiceer je naar de buitenwereld. Je zult zonder enige moeite het oorspronkelijke getal kunnen herstellen, omdat je de volgorde van de handelingen en de door jou genoemde getallen kent. Maar anderen zullen dat niet kunnen.
Maskering (blindering) van de openbare sleutel gebeurt volgens een speciaal cryptografisch algoritme. Als resultaat ondertekent de validator de gemaskeerde openbare sleutel, waarbij de oorspronkelijke sleutel hem onbekend is. Maar een kenmerk van het algoritme is dat de gebruiker (stemmer), na het ontvangen van de handtekening op de gemaskeerde sleutel, omgekeerde transformaties kan uitvoeren en een geldige handtekening kan verkrijgen voor de oorspronkelijke, ongemaskeerde sleutel.
Het beschreven algoritme wordt op grote schaal gebruikt in protocollen voor geheime stemprocedures. In het systeem voor afstandsbediening en elektronisch stemmen wordt momenteel het RSA-algoritme met een sleutelgrootte van 4096 bits gebruikt voor blinde handtekeningen.
In algemene termen ziet de anonimiseringsprocedure er als volgt uit.
- Bij het creƫren van een stemming wordt een afzonderlijk sleutelpaar voor de "validator" aangemaakt; de openbare sleutel wordt in de blockchain geregistreerd. Voor elke stemming wordt een uniek sleutelpaar aangemaakt.
- De gebruiker wordt geĆÆdentificeerd in het identificatiesysteem (in dit geval, in ESIA) en verleent toestemming voor de overdracht van zijn identificatiegegevens van het identificatiesysteem naar het PTK DEG.
- De component "Kiezerslijst" van PTK DEG controleert of de gebruiker in de kiezerslijst staat.
- Op het apparaat van de gebruiker worden zijn persoonlijke sleutels aangemaakt ā een gesloten sleutel en een openbare sleutel, die alleen aan hem bekend zijn.
- Op het apparaat van de gebruiker wordt de openbare sleutel gemaskeerd.
- Samen met de identificatiegegevens en de gemaskeerde openbare sleutel wendt de gebruiker zich tot de component "Kiezerslijst".
- De component controleert opnieuw of de gebruiker in de lijst staat en of hij eerder geen handtekening heeft ontvangen.
- Als alle controles succesvol zijn, wordt de sleutel ondertekend.
- Het feit van de ondertekening van de sleutel wordt in de blockchain geregistreerd.
- De gebruiker verwijdert de maskering van de openbare sleutel op zijn apparaat en ontvangt de gesloten sleutel, de openbare sleutel en de handtekening op de openbare sleutel, waarbij alle sleutels alleen aan hem bekend zijn.
- Daarna wordt de gebruiker overgebracht naar een anonieme zone ā naar een aparte website edg2020.gov.ru, waar hij niet kan worden geĆÆdentificeerd (bijvoorbeeld vóór de overstap kan hij zijn internetprovider veranderen, waardoor hij zijn IP-adres volledig verandert). VPN of veranderen van internetprovider en volledig zijn IP-adres wijzigen.
- De acceptatie van het stembiljet hangt alleen af van de vraag of de handtekening van de "validator" de controle doorstaat en of een dergelijke sleutel niet eerder is gebruikt.
Hier is een beschrijving van het algoritme vanuit cryptografisch perspectief.
Parameters voor ondertekening en aanduidingen:


M ā in het padding FDN-formaat voor ondertekening.
Bron: habr.com
