Handtekeningmethode
Ed25519 wiskundig uitgelegd
De handtekening die aan elke McGesund-beoordeling hangt — van de kromme via de sleutel tot de vergelijking die de browser van de lezer narekent.
Stand: 2026-09-07
1. Waar het hier over gaat
Een beoordeling bij McGesund is geen tekstveld in een database dat u maar moet geloven. Zij wordt bij het verzenden digitaal ondertekend, en elke bezoeker kan die handtekening later in de eigen browser narekenen.
Voor deze handtekening gebruiken wij Ed25519. Anders dan FALCON en ML-DSA, die er als extra stempel naast kunnen worden gelegd, is Ed25519 geen optie: elke ondertekende beoordeling draagt haar, ongeacht tarief en manier van indienen.
Vooraf van belang:
Ed25519 is geen versleuteling. De beoordelingstekst is immers bedoeld om gelezen te worden. De handtekening bewijst geen geheimhouding, maar herkomst en integriteit.
2. Wat er precies wordt ondertekend
Ondertekend wordt niet de lopende tekst, maar een compact gegevensobject dat de tekst en al het overige eenduidig vastlegt:
{
"v": 1,
"typ": "rev-comment",
"f": "<bedrijfs-ID>",
"c": "<beoordelings-ID>",
"h": "<SHA-256 van de beoordelingstekst>",
"rh": "<SHA-256 van het volledige ingediende record>",
"rv": 1,
"qh": "<SHA-256 van de QR-envelop, alleen bij QR-beoordelingen>",
"kid": "<sleutel-ID>",
"iat": 1757203200
}
Dit object wordt naar CBOR gecodeerd. Die bytereeks — niet de nette weergave hierboven — is ons bericht . Handtekening en bericht gaan samen in een envelop:
De is de formaatversie. Meer staat er niet in — met name geen post-quantumhandtekening: die ligt, als zij bestaat, naast het record en niet in de envelop.
3. Wat de handtekening moet leveren
Een lezer die op een ondernemingsprofiel terechtkomt, staat voor twee vragen:
- Komt deze beoordeling werkelijk uit het McGesund-systeem?
- Is zij achteraf gewijzigd?
Daarvoor bestaat een sleutelpaar:
- een private sleutel — blijft in de ondertekeningsdienst
- een openbare sleutel — mag iedereen hebben, wordt via de sleutel-ID (
kid) in de payload aangesproken
Ondertekend wordt met de private sleutel. Gecontroleerd wordt met de openbare — en wel in de browser van de lezer, niet op onze server. Dat is het punt: een controle die wij zelf uitvoeren en waarvan wij het resultaat meedelen, zou geen controle zijn, maar een bewering.
4. Waarom een elliptische kromme?
Elke handtekening heeft een berekening nodig die in de ene richting eenvoudig en in de andere praktisch onmogelijk is. Bij Ed25519 is dat de scalaire vermenigvuldiging op een elliptische kromme:
Uit het geheime getal het openbare punt berekenen kost microseconden. Uit terugrekenen naar is het discretelogaritmeprobleem — daarvoor is geen methode bekend die bij deze omvang binnen menselijke tijdschalen klaar is.
De praktische winst ten opzichte van oudere methoden zoals RSA is de omvang:
| openbare sleutel | handtekening | |
|---|---|---|
| RSA-3072 | 384 B | 384 B |
| Ed25519 | 32 B | 64 B |
Bij een vergelijkbaar beveiligingsniveau. 64 byte per beoordeling is ook bij miljoenen beoordelingen geen omvang om over na te denken.
5. De kromme edwards25519
Er wordt gerekend modulo een priemgetal:
Vandaar de naam. De kromme is een getwiste Edwards-kromme:
Een „punt" is een getallenpaar uit dat aan deze vergelijking voldoet. Er valt geen kromme te zien — de tekening in het volgende hoofdstuk is een aanschouwelijk hulpmiddel over de reële getallen, geen afbeelding van de werkelijke rekenruimte.
Twee grootheden komen er nog bij:
- een vast afgesproken basispunt ,
- de orde van de door voortgebrachte ondergroep:
is priem. Dat betekent: telt u steeds opnieuw bij zichzelf op, dan doorloopt u precies verschillende punten en belandt daarna weer bij het begin. Alle berekeningen met scalairen lopen daarom modulo , alle berekeningen met coördinaten modulo . Deze twee getallen verwisselen is de klassieke beginnersfout.
6. Punten optellen
Twee punten worden volgens een vaste formule tot een derde verrekend:
Het neutrale element is — het punt waar het rekenen begint.
Deze formule heeft een eigenschap die u er niet aan afziet en die voor de veiligheid belangrijker is dan welke constante ook: zij is volledig. Zij werkt voor alle invoeren, zonder bijzondere gevallen voor „beide punten gelijk" of „resultaat is het neutrale element". Bij de oudere Weierstrass-krommen bestaan die bijzondere gevallen wel, en elk daarvan is een vertakking in het programma — een vertakking waarvan de looptijd meetbaar is. Wie meet hoe lang een handtekening duurt, komt bij zulke methoden iets over de geheime sleutel te weten.
Volledige formules betekenen: altijd dezelfde rekenweg, altijd dezelfde tijd, niets te meten.
7. Scalaire vermenigvuldiging — de eenrichtingsweg
betekent: precies keer bij zichzelf optellen. Bij een van 253 bit zou dat zinloos veel werk zijn — daarom wordt er verdubbeld:
en uit deze tussenresultaten wordt de gewenste samengesteld. Ongeveer 253 verdubbelingen volstaan voor elke . Dat is de weg vooruit.
Achteruit bestaat die kortere weg niet. Uit het punt het getal bepalen betekent het discretelogaritmeprobleem oplossen.
In de echte methode wordt modulo gerekend. Daar bestaat geen „links", geen „rechts" en geen nabijheid: uit en worden twee getallenparen zonder enige herkenbare verwantschap.
8. Het sleutelpaar van de ondertekeningsdienst
Aan het begin staan 32 willekeurige bytes, de seed. Al het overige wordt daaruit afgeleid:
Uit de eerste helft ontstaat de geheime scalair , zij het niet ongewijzigd. Drie bits worden gezet respectievelijk gewist — het zogenoemde clamping:
- de onderste drie bits worden op nul gezet: wordt daardoor een veelvoud van 8. De reden is de cofactor 8 van de kromme — de volledige puntengroep is achtmaal zo groot als de ondergroep van orde . Een door 8 deelbare belandt gegarandeerd in de juiste ondergroep en verraadt niets over punten van kleine orde.
- het bovenste bit wordt gewist, het op één na bovenste gezet: heeft daarmee altijd dezelfde bitlengte. Een kortere zou minder verdubbelingen vergen — en opnieuw zou er aan de looptijd iets af te lezen zijn.
De openbare sleutel is dan eenvoudigweg
opgeslagen als 32 byte: de -coördinaat, en in het hoogste bit het teken van . De rekent de controleur zelf terug uit de krommevergelijking — beide oplossingen verschillen alleen in het teken, en welke bedoeld is, zegt dat ene bit.
De tweede helft van de hashwaarde, de prefix, is voor de sleutel niet nodig. Zij komt in het volgende hoofdstuk aan bod.
9. Waarom het toeval hier geen toeval is
Elke handtekening van deze bouwwijze heeft een eenmalige waarde nodig, vaak nonce genoemd. Die mag zich nooit herhalen: wie twee handtekeningen met dezelfde heeft, kan de geheime sleutel met schoolalgebra uitrekenen.
Precies daarop zijn reële systemen stukgelopen. Het bekendste geval is de handtekeningcontrole van een spelcomputer, waarvan de fabrikant in 2010 steeds dezelfde nonce gebruikte — de private sleutel was daarmee openbaar reconstrueerbaar.
Ed25519 lost dat op door helemaal geen toeval te gebruiken:
De nonce hangt aan de geheime prefix en aan het bericht. Daaruit volgt tweeërlei:
- Twee verschillende beoordelingen leveren met overweldigende waarschijnlijkheid verschillende op — het herhalingsgeval treedt niet op.
- Dezelfde beoordeling levert altijd dezelfde handtekening op. Een ondertekening laat zich daarmee reproduceren, en een slechte toevalsgenerator op de server kan niets kapotmaken, omdat er geen nodig is.
Voor een beoordelingsportaal met veel handtekeningen per dag is dat geen academisch voordeel. Het is het verschil tussen „een fout in de toevalsbron zou fataal zijn" en „er is geen toevalsbron die kan uitvallen".
10. Ondertekenen
Drie regels, meer is het niet:
De handtekening is het paar
32 byte voor het punt , 32 byte voor het getal — samen 64 byte.
De tweede regel is opmerkelijk: in gaan , de openbare sleutel en het bericht mee. Dat mee wordt gehasht, is geen bijzaak — het verhindert aanvallen waarbij een handtekening naar een andere sleutel wordt omgeduid.
11. Controleren
De browser van de lezer kent: de beoordeling , de handtekening en de openbare sleutel . Hij rekent opnieuw uit en controleert één enkele vergelijking:
Klopt zij, dan is de handtekening geldig. RFC 8032 staat daarnaast de met de cofactor vermenigvuldigde versie toe, die enkele randgevallen ruimhartiger behandelt.
Er wordt geen server gevraagd, geen dienst hoeft beschikbaar te zijn. De openbare sleutel volstaat.
12. Waarom de vergelijking klopt
Invullen volstaat:
De hele truc zit in de middelste omvorming: de scalaire vermenigvuldiging verdraagt zich met de optelling. Wie kent, kan een uitrekenen die aan de vergelijking voldoet. Wie niet kent, zou bij een zelfgekozen een passende moeten vinden — en dat betekent het discrete logaritme oplossen.
13. Een volledig doorgerekend minivoorbeeld
Met de echte getallen valt niets na te rekenen — 253-bitwaarden laten zich niet uit het hoofd controleren. Daarom dezelfde methode in een piepkleine groep, waarin elke stap met de rekenmachine te volgen is.
Stap 1: De groep
Wij rekenen met de resten modulo en nemen . Er geldt
brengt dus een ondergroep van orde voort. De machten zijn:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 4 | 8 | 16 | 9 | 18 | 13 | 3 | 6 | 12 | 1 |
neemt de rol van het basispunt over, de vermenigvuldiging die van de puntoptelling. Scalairen rekenen modulo , waarden modulo .
Stap 2: Het sleutelpaar
Geheim zij . Dan is
mag iedereen weten.
Stap 3: Nonce en commitment
Uit prefix en beoordeling volge . Daaruit:
Stap 4: De challenge
De hash over , en de beoordeling levere
Stap 5: De handtekening
De handtekening is het paar .
Stap 6: De browser controleert
Hij rekent beide zijden uit. Links:
Rechts, met :
Beide zijden leveren op:
Stap 7: Iemand wijzigt de beoordelingstekst
De tekst gaat mee in de hash, dus verandert de challenge — zeg naar . De handtekening blijft ongewijzigd , de rechterzijde echter niet. Met :
Wij kunnen een beoordeling verwijderen. Veranderen kunnen wij haar niet zonder dat het opvalt.
Eerlijkheidshalve over dit voorbeeld
Er is hier gerekend in de multiplicatieve groep modulo , niet op een kromme: staat voor , het product voor de puntoptelling . De structuur is dezelfde, en daar gaat het om. Verschillend zijn de ordes van grootte: tegenover , en daar is de sleutel niet door het uitproberen van elf mogelijkheden te vinden.
14. Wat er gebeurt wanneer iemand de beoordeling wijzigt
Stel dat iemand met databasetoegang — ook iemand bij ons — de beoordelingstekst of een van de hartjes wijzigt. Dan verandert het record en daarmee ten minste een van de twee hashwaarden h en rh in de payload. Daarmee verandert , daarmee de challenge , daarmee de rechterzijde van de controlevergelijking. De oude handtekening past niet meer.
De doorslaggevende zin daarbij: wij kunnen een beoordeling verwijderen, maar wij kunnen haar niet onopgemerkt veranderen. Bij McGesund loopt dezelfde controle daarnaast elke nacht aan serverzijde over het bestand — een beoordeling die haar niet doorstaat, telt niet meer mee in het gemiddelde van de onderneming.
15. Waarom een aanvaller strandt
Hij kent de openbare sleutel , het basispunt , de kromme en elke tot nu toe afgegeven handtekening. Wat hem ontbreekt, is .
De beste bekende klassieke aanval op het discretelogaritmeprobleem in een groep van orde vergt ongeveer stappen. Bij zijn dat ruwweg
bewerkingen. Ter vergelijking: zelfs een machine die een miljard miljard () stappen per seconde haalt, zou daarvoor een veelvoud van de leeftijd van het heelal nodig hebben.
Vervalsen zonder de sleutel zou betekenen: bij een zelfgekozen een passende vinden — dezelfde opgave in een andere vermomming.
16. Waarom Ed25519 en niet ECDSA
Beide berusten op hetzelfde probleem. Het verschil zit in alles wat eromheen gebeurt:
| ECDSA (NIST-krommen) | Ed25519 | |
|---|---|---|
| Nonce | vers toeval nodig | deterministisch uit prefix en bericht |
| Formules | bijzondere gevallen, gegevensafhankelijke vertakkingen | volledig, één rekenweg |
| Krommeparameters | herkomst van de constanten nooit volledig verklaard | uit navolgbare criteria gekozen |
| Handtekeninggrootte | 64–72 B, variabele codering | vast 64 B |
| In de browser | al lang beschikbaar | sinds 2023/2024 natief, anders als JS-bibliotheek |
Voor ons was de nonce het doorslaggevende argument. Een beoordelingsportaal ondertekent vaak en geautomatiseerd; een methode waarbij één enkele zwakke toevalswaarde de sleutel prijsgeeft, is daarvoor de verkeerde keuze.
17. Wat Ed25519 niet levert
Ed25519 berust op het discrete logaritme — en precies dat probleem lost een voldoende grote quantumcomputer met het algoritme van Shor efficiënt op. Of en wanneer zulke machines er zijn, is open. Voor een beoordeling die over tien jaar nog controleerbaar moet zijn, is dat desondanks een vraag die vandaag beantwoord moet worden.
Daarom kan naast de Ed25519-handtekening een quantumresistent stempel komen te staan:
- FALCON (FN-DSA) — compacte handtekeningen uit NTRU-roosters
- ML-DSA-87 (FIPS 204) — de afgeronde NIST-standaard
Beide vervangen Ed25519 niet, zij komen ernaast te liggen. Breekt een van de methoden, dan draagt de andere verder.
18. Het verloop in beeld
19. Wat McGesund er concreet mee doet
De envelop. Elke ondertekende beoordeling draagt een MCG1:-envelop met formaatversie, payload en Ed25519-handtekening. De kid in de payload zegt welke sleutel bedoeld is; de bijbehorende openbare sleutel levert de server op aanvraag uit — hij is openbaar, daaraan valt niets te beschermen.
De controle in de browser. Chrome en Firefox kunnen Ed25519 sinds 2023/2024 natief via de WebCrypto-interface. Safari niet — daar werpt de aanroep een fout in plaats van te controleren. Daarom valt onze controlecode terug op een zuivere JavaScript-implementatie, die alleen daar wordt nageladen waar zij nodig is. De handtekeningcontrole loopt daarmee in elke browser door, en wel op het apparaat van de lezer.
Het tijdanker. De vingerafdruk van de ondertekeningssleutel wordt via OpenTimestamps in een Bitcoin-blok verankerd. Daarmee valt niet alleen aan te tonen dat de handtekening echt is, maar ook dat de sleutel op een bepaald tijdstip al bestond — zonder dat iemand ons tijdstempel hoeft te geloven.
De inhoudsbinding. De payload draagt rh, de hash over het volledige ingediende record: tekst, hartjes, geostatus, gegevens over de aanleiding en herkomst. De Ed25519-handtekening bindt daarmee niet alleen de tekst, maar alles wat naast de beoordeling wordt getoond.
20. Eén zin om te onthouden
Wie de geheime scalair bezit, ondertekent in microseconden. Wie hem niet bezit, zou een discreet logaritme in een groep met ongeveer elementen moeten oplossen.
Voor de lezer van een beoordeling betekent dat eenvoudigweg: hij hoeft ons niet te geloven. Hij kan narekenen.