Signaturmetoder
Ed25519 matematiskt förklarat
Signaturen som följer med varje omdöme på McGesund — från kurvan över nyckeln till ekvationen som läsarens webbläsare räknar efter.
Uppdaterat: 2026-09-07
1. Vad det handlar om
Ett omdöme på McGesund är inte ett textfält i en databas som man bara får tro på. Det signeras digitalt när det skickas in, och varje besökare kan senare räkna efter signaturen i sin egen webbläsare.
För denna signatur använder vi Ed25519. Till skillnad från FALCON och ML-DSA, som dessutom kan läggas bredvid som stämpel, är Ed25519 inget tillval: varje signerat omdöme bär den, oberoende av abonnemang och inlämningsväg.
Viktigt att slå fast först:
Ed25519 är ingen kryptering. Omdömestexten ska ju läsas. Signaturen bevisar inte sekretess, utan ursprung och oförändrat innehåll.
2. Vad som exakt signeras
Det som signeras är inte den löpande texten, utan ett kompakt dataobjekt som entydigt spikar fast texten och allt övrigt:
{
"v": 1,
"typ": "rev-comment",
"f": "<Företags-ID>",
"c": "<Omdömes-ID>",
"h": "<SHA-256 av omdömestexten>",
"rh": "<SHA-256 av hela den inskickade datamängden>",
"rv": 1,
"qh": "<SHA-256 av QR-envelopen, endast vid QR-omdömen>",
"kid": "<Nyckel-ID>",
"iat": 1757203200
}
Detta objekt kodas till CBOR. Den byteföljden — inte den prydliga framställningen ovan — är vårt meddelande . Signatur och meddelande vandrar tillsammans in i ett kuvert:
Trean är formatversionen. Mer står inte i den — i synnerhet ingen post-kvantsignatur: den ligger, om den finns, bredvid datamängden och inte i kuvertet.
3. Vad signaturen ska åstadkomma
En läsare som kommer till en företagsprofil står inför två frågor:
- Kommer detta omdöme verkligen från McGesund-systemet?
- Har det ändrats i efterhand?
För detta finns ett nyckelpar:
- en privat nyckel — stannar i signaturtjänsten
- en offentlig nyckel — får alla ha, adresseras via nyckel-ID:t (
kid) i nyttolasten
Signeringen sker med den privata nyckeln. Verifieringen sker med den offentliga — och det i läsarens webbläsare, inte på vår server. Det är just poängen: en kontroll som vi själva utför och vars resultat vi meddelar vore ingen kontroll, utan ett påstående.
4. Varför en elliptisk kurva?
Varje signatur behöver en beräkning som är lätt åt ena hållet och praktiskt taget omöjlig åt det andra. Hos Ed25519 är det skalärmultiplikationen på en elliptisk kurva:
Att beräkna den offentliga punkten ur det hemliga talet kostar mikrosekunder. Att sluta sig tillbaka från till är det diskreta logaritmproblemet — för det känner man inte till någon metod som blir klar inom mänskliga tidsrymder vid denna storlek.
Den praktiska vinsten jämfört med äldre metoder som RSA är storleken:
| offentlig nyckel | signatur | |
|---|---|---|
| RSA-3072 | 384 B | 384 B |
| Ed25519 | 32 B | 64 B |
Vid jämförbar säkerhetsnivå. 64 byte per omdöme är inte heller vid miljontals omdömen en storhet man behöver fundera över.
5. Kurvan edwards25519
Räkningen sker modulo ett primtal:
Därav namnet. Kurvan är en vriden Edwards-kurva:
En "punkt" är ett talpar ur som uppfyller denna ekvation. Det finns ingen kurva att se — teckningen i nästa avsnitt är ett åskådningsstöd över de reella talen, inte en bild av det faktiska räknerummet.
Två storheter tillkommer:
- en fast överenskommen baspunkt ,
- ordningen för den delgrupp som genererar:
är ett primtal. Det betyder: adderar man till sig själv om och om igen genomlöper man exakt olika punkter och hamnar sedan i utgångsläget igen. Alla beräkningar med skalärer sker därför modulo , alla beräkningar med koordinater modulo . Att förväxla dessa två tal är det klassiska nybörjarfelet.
6. Addera punkter
Två punkter räknas samman till en tredje enligt en fast formel:
Det neutrala elementet är — punkten där räknandet börjar.
Denna formel har en egenskap som inte syns på den och som är viktigare för säkerheten än någon konstant: den är fullständig. Den fungerar för alla indata, utan specialfall för "båda punkterna lika" eller "resultatet är det neutrala elementet". Hos de äldre Weierstrass-kurvorna finns dessa specialfall, och vart och ett av dem är en gren i programmet — en gren vars körtid går att mäta. Den som mäter hur lång tid en signatur tar får hos sådana metoder veta något om den hemliga nyckeln.
Fullständiga formler betyder: alltid samma räkneväg, alltid samma tid, ingenting att mäta.
7. Skalärmultiplikation — enkelriktade gatan
betyder: addera exakt gånger till sig själv. Vid ett med 253 bitar vore det orimligt mycket arbete — därför fördubblar man:
och sätter samman det önskade ur dessa mellanresultat. Runt 253 fördubblingar räcker för varje . Det är vägen framåt.
Bakåt finns ingen sådan genväg. Att bestämma talet ur punkten innebär att lösa det diskreta logaritmproblemet.
I den verkliga metoden räknas det modulo . Där finns inget "vänster", inget "höger" och ingen närhet: av och blir två talpar utan något igenkännbart släktskap.
8. Signaturtjänstens nyckelpar
I början står 32 slumpmässiga byte, seeden. Allt övrigt härleds ur den:
Ur den första halvan uppstår den hemliga skalären , dock inte oförändrad. Tre bitar sätts respektive nollställs — den så kallade clampingen:
- de understa tre bitarna nollställs: blir därigenom en multipel av 8. Skälet är kurvans kofaktor 8 — hela punktgruppen är åtta gånger så stor som delgruppen av ordning . Ett delbart med 8 hamnar garanterat i rätt delgrupp och avslöjar ingenting om punkter av liten ordning.
- den översta biten nollställs, den näst översta sätts: har därmed alltid samma bitlängd. Ett kortare skulle behöva färre fördubblingar — och åter vore något avläsbart ur körtiden.
Den offentliga nyckeln är sedan helt enkelt
lagrad som 32 byte: -koordinaten, och i den högsta biten tecknet för . Sitt räknar verifieraren själv tillbaka ur kurvekvationen — båda lösningarna skiljer sig endast i tecknet, och vilken som avses säger denna enda bit.
Hashvärdets andra halva, prefixet, behövs inte för nyckeln. Den kommer till användning i nästa avsnitt.
9. Varför slumpen här inte är någon slump
Varje signatur av detta slag behöver ett engångsvärde , ofta kallat nonce. Det får aldrig upprepas: den som har två signaturer med samma kan räkna fram den hemliga nyckeln med skolalgebra.
Just på detta har verkliga system gått bet. Det mest kända fallet är signaturkontrollen i en spelkonsol, vars tillverkare 2010 alltid använde samma nonce — den privata nyckeln gick därmed att rekonstruera offentligt.
Ed25519 löser det genom att inte använda någon slump alls:
Noncen hänger på det hemliga prefixet och på meddelandet. Av detta följer två saker:
- Två olika omdömen ger med överväldigande sannolikhet olika — upprepningsfallet inträffar inte.
- Samma omdöme ger alltid samma signatur. En signering går därmed att följa upp, och en dålig slumpgenerator på servern kan inte förstöra något, eftersom ingen behövs.
För en omdömesportal med många signaturer per dag är det ingen akademisk fördel. Det är skillnaden mellan "ett fel i slumpkällan vore ödesdigert" och "det finns ingen slumpkälla som kan fallera".
10. Signera
Tre rader, mer är det inte:
Signaturen är paret
32 byte för punkten , 32 byte för talet — tillsammans 64 byte.
Värd att notera är den andra raden: i ingår , den offentliga nyckeln och meddelandet. Att hashas med är ingen utsmyckning — det förhindrar angrepp där en signatur omtolkas till att gälla en annan nyckel.
11. Verifiera
Läsarens webbläsare känner till: omdömet , signaturen och den offentliga nyckeln . Den räknar fram på nytt och prövar en enda ekvation:
Stämmer den är signaturen giltig. RFC 8032 tillåter dessutom den med kofaktorn multiplicerade varianten , som behandlar vissa gränsfall mer generöst.
Ingen server tillfrågas, ingen tjänst måste vara tillgänglig. Den offentliga nyckeln räcker.
12. Varför ekvationen går ihop
Det räcker att sätta in:
Hela knepet ligger i omformningen i mitten: skalärmultiplikationen förlikar sig med additionen. Den som känner kan räkna fram ett som uppfyller ekvationen. Den som inte känner skulle behöva hitta ett passande till ett självvalt — och det innebär att lösa den diskreta logaritmen.
13. Ett fullständigt genomräknat miniexempel
Med de verkliga talen finns inget att räkna efter — 253-bitarsvärden går inte att pröva i huvudet. Därför samma metod i en pytteliten grupp, där varje steg går att följa med fickräknare.
Steg 1: Gruppen
Vi räknar med resterna modulo och tar . Det gäller att
genererar alltså en delgrupp av ordning . Potenserna är:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 4 | 8 | 16 | 9 | 18 | 13 | 3 | 6 | 12 | 1 |
övertar baspunkten :s roll, multiplikationen punktadditionens. Skalärer räknas modulo , värden modulo .
Steg 2: Nyckelparet
Låt vara hemligt. Då är
får alla veta.
Steg 3: Nonce och commitment
Låt prefix och omdöme ge . Därav:
Steg 4: Utmaningen
Låt hashen över , och omdömet ge
Steg 5: Signaturen
Signaturen är paret .
Steg 6: Webbläsaren verifierar
Den räknar ut båda sidorna. Vänster:
Höger, med :
Båda sidorna ger :
Steg 7: Någon ändrar omdömestexten
Texten vandrar in i hashen, alltså ändras utmaningen — säg till . Signaturen förblir oförändrad vid , men det gör inte högerledet. Med :
Vi kan radera ett omdöme. Ändra det kan vi inte utan att det märks.
Ärlighetsanmärkning om exemplet
Här räknades det i den multiplikativa gruppen modulo , inte på en kurva: står för , produkten för punktadditionen . Strukturen är densamma, och det är just den det handlar om. Olika är storleksordningarna: mot , och där går nyckeln inte att finna genom att pröva elva möjligheter.
14. Vad som händer om någon ändrar omdömet
Anta att någon med databasåtkomst — även någon hos oss — ändrar omdömestexten eller ett av hjärtana. Då ändras datamängden och därmed minst ett av de båda hashvärdena h och rh i nyttolasten. Därmed ändras , därmed utmaningen , därmed högerledet i verifieringsekvationen. Den gamla signaturen passar inte längre.
Den avgörande meningen om detta: vi kan radera ett omdöme, men vi kan inte ändra det obemärkt. Hos McGesund körs samma kontroll dessutom nattetid på serversidan över hela beståndet — ett omdöme som inte klarar den räknas inte längre in i företagets snittbetyg.
15. Varför en angripare misslyckas
Han känner till den offentliga nyckeln , baspunkten , kurvan och varje hittills utfärdad signatur. Vad han saknar är .
Det bästa kända klassiska angreppet på det diskreta logaritmproblemet i en grupp av ordning behöver ungefär steg. Vid är det runt
operationer. Som jämförelse: även en maskin som klarar en miljard miljarder () steg per sekund skulle behöva ett antal gånger universums ålder.
Att förfalska utan nyckeln vore detsamma som att hitta ett passande till ett självvalt — samma uppgift i annan förklädnad.
16. Varför Ed25519 och inte ECDSA
Båda vilar på samma problem. Skillnaden ligger i allt som händer runtomkring:
| ECDSA (NIST-kurvor) | Ed25519 | |
|---|---|---|
| Nonce | kräver färsk slump | deterministisk ur prefix och meddelande |
| Formler | specialfall, databeroende grenar | fullständiga, en räkneväg |
| Kurvparametrar | konstanternas ursprung aldrig fullt förklarat | valda efter spårbara kriterier |
| Signaturstorlek | 64–72 B, variabel kodning | fast 64 B |
| I webbläsaren | tillgängligt sedan länge | nativt sedan 2023/2024, annars som JS-bibliotek |
För oss var noncen det utslagsgivande argumentet. En omdömesportal signerar ofta och automatiserat; en metod där ett enda svagt slumpvärde röjer nyckeln är fel val för det.
17. Vad Ed25519 inte klarar
Ed25519 vilar på den diskreta logaritmen — och just detta problem löser en tillräckligt stor kvantdator effektivt med Shors algoritm. Om och när sådana maskiner finns är öppet. För ett omdöme som ska gå att kontrollera om tio år är det ändå en fråga som måste besvaras i dag.
Därför kan en kvantresistent stämpel läggas bredvid Ed25519-signaturen:
- FALCON (FN-DSA) — kompakta signaturer ur NTRU-gitter
- ML-DSA-87 (FIPS 204) — den avslutade NIST-standarden
Ingen av dem ersätter Ed25519, de lägger sig bredvid. Brister en av metoderna bär den andra vidare.
18. Förloppet i bild
19. Vad McGesund konkret gör med detta
Envelopen. Varje signerat omdöme bär ett MCG1:-kuvert med formatversion, nyttolast och Ed25519-signatur. kid i nyttolasten säger vilken nyckel som avses; den tillhörande offentliga nyckeln levererar servern på begäran — den är offentlig, det finns inget att skydda där.
Verifieringen i webbläsaren. Chrome och Firefox klarar Ed25519 nativt via WebCrypto-gränssnittet sedan 2023/2024. Safari gör det inte — där kastar anropet ett fel i stället för att verifiera. Därför faller vår verifieringskod tillbaka på en ren JavaScript-implementation som bara laddas där den behövs. Signaturkontrollen går därmed igenom i varje webbläsare, och det på läsarens enhet.
Tidsankaret. Signaturnyckelns fingeravtryck förankras via OpenTimestamps i ett Bitcoin-block. Därmed går det inte bara att belägga att signaturen är äkta, utan också att nyckeln redan fanns vid en bestämd tidpunkt — utan att någon behöver tro på vår tidsstämpel.
Innehållsbindningen. Nyttolasten bär rh, hashen över hela den inskickade datamängden: text, hjärtan, geostatus, uppgifter om anledning och ursprung. Ed25519-signaturen binder därmed inte bara texten, utan allt som visas bredvid omdömet.
20. En mening att ta med sig
Den som äger den hemliga skalären signerar på mikrosekunder. Den som inte äger den skulle behöva lösa en diskret logaritm i en grupp med runt element.
För läsaren av ett omdöme betyder det helt enkelt: han behöver inte tro oss. Han kan räkna efter.