Signaturmetoder
FALCON forklaret matematisk
Sådan bliver en McGesund-anmeldelse underskrevet med FN-DSA (FALCON) — og derfor bryder et ændret tegn underskriften.
Opdateret: 2026-09-07
1. Hvad det handler om
En anmeldelse hos McGesund er ikke et tekstfelt i en database, som man bare må tro på. Den bliver digitalt signeret, når den sendes af sted, og enhver besøgende kan senere regne signaturen efter i sin egen browser.
Til en del af disse signaturer bruger vi FALCON — nærmere bestemt FN-DSA-512 og FN-DSA-1024. Dette indlæg forklarer, hvad der matematisk sker undervejs.
Vigtigt at slå fast først:
FALCON er ikke kryptering. Anmeldelsesteksten skal jo kunne læses. FALCON beviser ikke hemmeligholdelse, men oprindelse og uforanderlighed.
2. Hvad der præcist bliver underskrevet
Det er ikke den løbende tekst, der signeres, men et kompakt dataobjekt, som utvetydigt fastnagler teksten:
{
"v": 1,
"typ": "rev-comment",
"f": "<virksomheds-id>",
"c": "<anmeldelses-id>",
"h": "<SHA-256 af anmeldelsesteksten>",
"rh": "<SHA-256 af hele det indsendte datasæt>",
"rv": 1,
"qh": "<SHA-256 af QR-konvolutten, kun ved QR-anmeldelser>",
"iat": 1757203200
}
Det er vores besked . Den binder følgende sammen:
- hvilken virksomhed anmeldelsen hører til (
f), - hvilken anmeldelse det drejer sig om (
c), - hvilken tekst der stod bag — som hashværdi (
h), - hvilket datasæt der samlet blev indsendt (
rh): tekst, hjerter, geostatus og anledningsoplysninger, kanonisk serialiseret og hashet, i skemaversionenrv, - hvilken QR-kode anmeldelsen stammer fra (
qh) — ved en anmeldelse uden QR udgår feltet, - hvornår der blev signeret (
iat).
Et ændret tegn i anmeldelsesteksten bryder denne kæde. Netop det er formålet — og siden rh gælder det samme for et efterfølgende flyttet hjerte eller en ændret geostatus.
3. Grundproblemet
En læser, der lander på en virksomhedsprofil, står med to spørgsmål:
- Stammer denne anmeldelse virkelig fra McGesund-systemet?
- Er den blevet ændret bagefter?
Til det findes der et nøglepar:
- en privat nøgle — bliver i signaturtjenesten
- en offentlig nøgle — må alle have
Der signeres med den private og verificeres med den offentlige nøgle. Og det sker på læserens eget udstyr, ikke på vores server.
4. Hvorfor FALCON?
Mange af nutidens signaturmetoder bygger på problemer, der er svære for klassiske computere, men som kunne blive betydeligt lettere for tilstrækkelig store kvantecomputere.
Ved en anmeldelse er det mere relevant end ved en flygtig besked: En anmeldelse skal stadig kunne verificeres om fem eller ti år. Den, der underskriver i dag, underskriver for hele opslagets levetid.
FALCON bygger derfor på gitterkryptografi:
Man bygger et gitter, der er matematisk enkelt at beskrive, og hvor en bestemt søgeopgave er ekstremt svær.
5. Hvad er et matematisk gitter?
To vektorer:
Alle heltallige kombinationer
giver et gitter af punkter. For eksempel:
Det afgørende er:
Selve gitteret er let at beskrive. At finde bestemte egenskaber i det er meget svært.
6. Hemmeligheden er korte vektorer
Den klassiske svære opgave lyder:
Det er Shortest Vector Problem. I to dimensioner kan man prøve sig frem. FALCON arbejder i dimension 512 eller 1024 — dér er det håbløst.
FALCON har dog ikke brug for den korteste vektor som sådan, men for noget beslægtet: at finde et gitterpunkt tæt på et givet målpunkt. Også det er svært uden den rette ekstra viden.
7. Polynomier i stedet for tal
FALCON bruger et NTRU-gitter og regner med polynomier. Altså med koefficientlister i stedet for enkelttal:
Der regnes i ringen
Det betyder:
- : regning modulo . Ved er for eksempel , for .
- : holder polynomierne på fast længde.
FALCON bruger konkret:
8. Det centrale kneb
Den private nøgle består af fire små polynomier
med NTRU-ligningen
Disse fire udgør tilsammen en hemmelig, velformet gitterbasis — en beskrivelse af gitteret ud fra korte vektorer.
Den offentlige nøgle er i det væsentlige et enkelt polynomium:
Ud af fremgår det samme gitter, men i en uhåndterlig basis af lange vektorer:
Det er hele kernen i FALCON. Begge baser beskriver det samme gitter. Kun er den ene brugbar at regne med, og den anden ikke.
Man kan forestille sig det som et bykort: Offentligt er hele kortet. Hemmelig er kendskabet til genvejene.
9. Anmeldelsen bliver til et punkt
Før der signeres, går payload-objektet gennem en hashfunktion. FALCON bruger dertil Hash-to-Point: Ud af beskeden kommer ikke en talværdi, men direkte et punkt i ringen.
Desuden trækker signaturtjenesten et tilfældigt salt (320 bit) og hasher det med:
Saltet er ikke pynt. Uden det ville den samme anmeldelse altid give den samme signatur, og ud af mange signaturer kunne den hemmelige basis rekonstrueres. Det rejser derfor med ind i signaturen.
10. Hvad en gyldig signatur er
Der søges et par
med to egenskaber:
Den første betingelse alene er triviel at opfylde — man sætter og . Den anden betingelse gør opgaven svær.
11. Et fuldt gennemregnet minieksempel
Vi skrumper alt til legetøjsstørrelse: polynomier med kun én koefficient, altså almindelige tal, og
Den hemmelige nøgle. To små tal:
Den offentlige nøgle. Der gælder , for . Altså:
Gitteret. .
Den offentlige basis følger direkte af :
Begge ligger i — og begge er lange.
Den hemmelige basis kender kun signaturtjenesten:
for og . Determinanten er
NTRU-ligningen går altså op. Begge vektorer er korte.
Trin 1: Hash anmeldelsen
Lad os antage, at anmeldelsens payload-objekt giver
Trin 2: En første, dårlig løsning
opfylder . Men længden er — alt for lang.
Trin 3: Forkort med den hemmelige basis
Signaturtjenesten udtrykker målpunktet i sin korte basis:
Det fører til og . Afrundet til , fås gitterpunktet
Kontrol: , altså faktisk i . Træk fra:
Længde:
Det er signaturen.
Trin 4: Samme metode med den offentlige basis
Den, der kun kender , har basen . Den samme afrundingsberegning giver dér gitterpunktet og dermed
Også en gyldig løsning på ligningen — men syv gange længere. Sættes acceptgrænsen under 26, er den værdiløs.
Det er FALCONs faldlem på én linje.
Trin 5: Browseren verificerer
Browseren får anmeldelsen, saltet og . Den beregner hashen på ny, får , rekonstruerer
og efterprøver længden:
Trin 6: Nogen ændrer anmeldelsesteksten
Ændres teksten bagefter, ændrer indholdshashen sig og dermed punktet, lad os sige
Den gamle signatur er stadig , men
Vi kan slette en anmeldelse. Ændre den kan vi ikke, uden at det bliver opdaget.
Ærlighedsbemærkning til eksemplet
I to dimensioner kan en angriber uden videre prøve sig frem til korte løsninger — for for eksempel . Eksemplet er ikke sikkert; det viser kun mekanismen. Ved FALCON-1024 har vektoren 2048 koefficienter, og dér fører det ingen steder hen at prøve sig frem.
12. Hvorfor afrunder man ikke bare?
Metoden fra trin 3 hedder Babai-afrunding. Til et lærebogseksempel rækker den — til en rigtig signaturmetode ikke.
Grunden: De afrundede signaturer ligger ikke jævnt fordelt. Deres form afhænger af den hemmelige basis' geometri. Ud af tilstrækkeligt mange signaturer kunne denne geometri rekonstrueres — og dermed den private nøgle. Netop det er tidligere gitterbaserede signaturmetoder strandet på.
FALCON trækker derfor de korte vektorer fra en diskret gaussisk fordeling over gitteret:
Værdier tæt på målpunktet er mere sandsynlige, men hvilken der præcis vælges, er tilfældigt. Resultatet er en fordeling, der intet røber om den anvendte basis — matematisk: Den kan ikke skelnes fra en fordeling, der kun afhænger af gitteret selv.
Denne sampler er den mest krævende del af FALCON. Den kører rekursivt over en træstruktur og arbejder med flydende-komma-tal — hvilket gør implementeringen vanskelig og er hovedgrunden til, at FALCON er sværere at få korrekt end ML-DSA.
13. Hvad der faktisk bliver overført
Signaturen består af
Kun — ikke parret. beregner den, der verificerer, selv:
Da koefficienterne i er små og spreder sig omkring nul, kan de komprimeres kraftigt. Det er grunden til FALCONs påfaldende kompakte signaturer:
| offentlig nøgle | signatur | |
|---|---|---|
| FALCON-512 | 897 B | ~666 B |
| FALCON-1024 | 1.793 B | ~1.280 B |
Til sammenligning: ML-DSA-87 kræver 4.627 byte. Hos McGesund sidder ingen af disse signaturer dog i selve QR-koden — klistermærket bærer kun Ed25519-konvolutten; PQ-stemplerne ligger ved datasættet og hentes ind ved verifikationen. Størrelsen afgør altså ikke her, om det kan trykkes, men lagring og overførsel: Et FALCON-stempel er godt en fjerdedel så stort som et ML-DSA-stempel.
14. Hvorfor FALCON verificerer hurtigt
Naiv polynomiemultiplikation koster
Med den hurtige fouriertransformation falder det til omtrent
Ved er det forskellen mellem en million og omkring ti tusind operationer. Derfor kører verifikationen i en besøgendes browser på millisekunder — og derfor sidder F'et i navnet:
FAst Fourier Lattice-based COmpact signatures over NTRU.
15. Forløbet i billeder
16. Hvorfor en angriber ikke kommer igennem
Han kender og dermed hele gitteret. Han kender også målpunktet , så snart anmeldelsen er offentlig. Det, han mangler, er den korte basis.
For at forfalske en anmeldelse skulle han finde en kort vektor til et selvvalgt — alene ud fra den offentlige beskrivelse. Det er den opgave, som trin 4 i eksemplet illustrerede: Uden de gode vektorer ender den samme beregning ved en alt for lang løsning.
I dimension 1024 er de bedste kendte metoder — klassiske såvel som kvantebaserede — langt fra det.
17. Hvad McGesund konkret bruger det til
Konvolutten. Hver signeret anmeldelse bærer en Ed25519-signatur. Det er den obligatoriske variant — klassisk, meget lille, nativt verificerbar i enhver browser.
Post-kvantestemplerne. Ved siden af ligger en eller to kvanteresistente signaturer. Hvilke, afhænger af abonnementet:
| Abonnement | tilgængelige signaturniveauer |
|---|---|
| Basis | Ed25519, FN-DSA-512 |
| Klassik | Ed25519, FN-DSA-512, FN-DSA-1024 |
| Pro | Ed25519, FN-DSA-1024, ML-DSA-87 |
| Premium | Ed25519, FN-DSA-1024, ML-DSA-87, begge parallelt |
Den parallelle variant er bevidst redundant. FALCON står på NTRU-gitre, ML-DSA på module-gitre. Skulle en af de to familier være svagere end antaget i dag, bærer den anden videre.
Tidsankeret. Signaturnøglens fingeraftryk forankres via OpenTimestamps i en Bitcoin-blok. Dermed er det ikke kun påvist, at signaturen er ægte, men også at den allerede eksisterede på et bestemt tidspunkt — uden at nogen behøver tro på vores tidsstempel.
Alt dette bliver beregnet i læserens browser via et WASM-modul. Vi leverer data; verifikationen kører på den besøgendes eget udstyr. Gik vi af nettet i morgen, ville en allerede indlæst anmeldelse stadig kunne verificeres.
Om navnene: FALCON standardiseres i øjeblikket som FN-DSA; udkastet er tiltænkt som FIPS 206, men er endnu ikke færdiggjort. Derfor hedder niveauerne i McGesund-koden FN-DSA-512 og FN-DSA-1024, selv om man i daglig tale fortsat taler om FALCON.
18. Den vigtigste intuition
Den offentlige nøgle er den fuldstændige beskrivelse af en labyrint. Alle må gerne se den.
Signaturen er beviset: „Jeg har fundet en meget kort vej for præcis denne anmeldelse."
Den private nøgle er kendskabet til genvejene.
Læseren behøver ikke kende genvejene. Han måler kun efter, om den fremlagte vej faktisk er kort og faktisk hører til denne anmeldelse. Begge dele kan han uden os.
Den, der ændrer teksten, flytter punktet — og den gamle vej fører ud i ingenting.