Allkirjastamismeetod
Ed25519 matemaatiliselt selgitatud
Allkiri, mis on iga McGesundi arvustuse küljes — kõverast üle võtme kuni võrrandini, mille lugeja brauser järele arvutab.
Seisuga: 2026-09-07
1. Millest siin jutt käib
McGesundi arvustus ei ole andmebaasi tekstiväli, mida tuleb lihtsalt uskuda. See allkirjastatakse digitaalselt juba saatmisel ja iga külastaja saab selle allkirja hiljem oma brauseris järele arvutada.
Selle allkirja jaoks kasutame Ed25519. Erinevalt FALCONist ja ML-DSA-st, mida saab lisatempliteks kõrvale panna, ei ole Ed25519 valikuvõimalus: iga allkirjastatud arvustus kannab seda, sõltumata paketist ja esitusviisist.
Kõigepealt oluline:
Ed25519 ei ole krüpteerimine. Arvustuse teksti ju peabki saama lugeda. Allkiri ei tõenda salastatust, vaid päritolu ja terviklikkust.
2. Mida täpselt allkirjastatakse
Allkirjastatakse mitte jooksvat teksti, vaid kompaktne andmeobjekt, mis naelutab teksti ja kõik ülejäänu üheselt kinni:
{
"v": 1,
"typ": "rev-comment",
"f": "<ettevõtte ID>",
"c": "<arvustuse ID>",
"h": "<arvustuse teksti SHA-256>",
"rh": "<kogu esitatud andmekirje SHA-256>",
"rv": 1,
"qh": "<QR-Envelope'i SHA-256, ainult QR-arvustuste puhul>",
"kid": "<võtme ID>",
"iat": 1757203200
}
See objekt kodeeritakse CBOR-vormingusse. Just see baidijada — mitte selle kena esitus ülal — on meie sõnum . Allkiri ja sõnum rändavad koos ümbrikusse:
Number on vorminguversioon. Rohkem seal ei ole — eelkõige mitte kvantijärgset allkirja: see asub, kui see on olemas, andmekirje juures kõrval, mitte ümbrikus.
3. Mida allkiri peab tagama
Lugeja, kes satub ettevõtte profiilile, seisab kahe küsimuse ees:
- Kas see arvustus pärineb tõesti McGesundi süsteemist?
- Kas seda on tagantjärele muudetud?
Selleks on olemas võtmepaar:
- privaatvõti — jääb allkirjastamisteenusesse
- avalik võti — tohib olla igaühel, seda adresseeritakse andmeosas oleva võtme-ID (
kid) kaudu
Allkirjastatakse privaatvõtmega. Kontrollitakse avalikuga — ja nimelt lugeja brauseris, mitte meie serveris. Selles ongi mõte: kontroll, mille viime läbi ise ja mille tulemuse me ise teatame, ei oleks kontroll, vaid väide.
4. Miks elliptiline kõver?
Iga allkiri vajab arvutust, mis on ühes suunas lihtne ja teises praktiliselt võimatu. Ed25519 puhul on selleks skalaarkorrutamine elliptilisel kõveral:
Salajasest arvust avaliku punkti arvutamine võtab mikrosekundeid. Punktist tagasi arvule jõudmine on diskreetse logaritmi ülesanne — selle jaoks ei ole teada ühtki meetodit, mis sellise suuruse juures inimlikus ajavahemikus valmis saaks.
Praktiline võit vanemate meetodite, näiteks RSA ees, on suurus:
| avalik võti | allkiri | |
|---|---|---|
| RSA-3072 | 384 B | 384 B |
| Ed25519 | 32 B | 64 B |
Ja seda võrreldava turvataseme juures. 64 baiti arvustuse kohta ei ole ka miljonite arvustuste puhul suurus, mille üle peaks mõtlema.
5. Kõver edwards25519
Arvutused käivad mooduli järgi, milleks on algarv:
Sellest ka nimi. Kõver on väänatud Edwardsi kõver:
„Punkt" on arvupaar hulgast , mis seda võrrandit rahuldab. Kõverat ei ole siin näha — järgmise jao joonis on näitlik abivahend reaalarvude kohal, mitte pilt tegelikust arvutusruumist.
Lisaks tuleb veel kaks suurust:
- kindlaks määratud baaspunkt ,
- punktist tekitatud alamrühma järk :
on algarv. See tähendab: kui liita ikka ja jälle iseendale, läbitakse täpselt erinevat punkti ja jõutakse siis taas algusse. Kõik skalaaridega tehtavad arvutused käivad seetõttu mooduli järgi, kõik koordinaatidega tehtavad mooduli järgi. Nende kahe arvu segiajamine on klassikaline algaja viga.
6. Punktide liitmine
Kaks punkti liidetakse kindla valemi järgi kolmandaks:
Neutraalne element on — punkt, kust arvutamine algab.
Sellel valemil on omadus, mida talle otsa vaadates ei märka ja mis on turvalisuse jaoks tähtsam kui ükskõik milline konstant: ta on täielik. Ta töötab kõigi sisendite korral, ilma erijuhtudeta „mõlemad punktid võrdsed" või „tulemus on neutraalne element". Vanematel Weierstrassi kõveratel need erijuhud on ja igaüks neist on programmis eraldi haru — haru, mille kestust saab mõõta. Kes mõõdab, kui kaua allkirjastamine kestab, saab selliste meetodite puhul salajase võtme kohta midagi teada.
Täielikud valemid tähendavad: alati sama arvutuskäik, alati sama aeg, midagi pole mõõta.
7. Skalaarkorrutamine — ühesuunaline tänav
tähendab: liita täpselt korda iseendale. 253-bitise puhul oleks see mõttetult palju tööd — seetõttu kahekordistatakse:
ja neist vahetulemustest pannakse soovitud kokku. Umbes 253 kahekordistamisest piisab iga jaoks. See on tee edasi.
Tagasisuunas sellist otseteed ei ole. Punktist arvu määramine tähendab diskreetse logaritmi ülesande lahendamist.
Tegelikus meetodis arvutatakse mooduli järgi. Seal ei ole „vasakut", „paremat" ega lähedust: -st ja -st saavad kaks arvupaari ilma igasuguse äratuntava suguluseta.
8. Allkirjastamisteenuse võtmepaar
Alguses on 32 juhuslikku baiti, seeme. Kõik ülejäänu tuletatakse sellest:
Esimesest poolest tekib salajane skalaar , kuid mitte muutmata kujul. Kolm bitti seatakse või kustutatakse — nn clamping:
- kolm kõige alumist bitti seatakse nulliks: muutub seeläbi 8 kordseks. Põhjuseks on kõvera kofaktor 8 — täielik punktirühm on kaheksa korda suurem kui järku alamrühm. 8-ga jaguv satub garanteeritult õigesse alamrühma ega reeda väikest järku punktide kohta midagi.
- kõige ülemine bitt kustutatakse, ülemuselt teine seatakse: -l on nii alati sama bitipikkus. Lühem vajaks vähem kahekordistamisi — ja jälle saaks kestusest midagi välja lugeda.
Avalik võti on siis lihtsalt
salvestatuna 32 baidina: -koordinaat ja kõige ülemises bitis -i märk. -i arvutab kontrollija ise kõvera võrrandist tagasi — mõlemad lahendid erinevad ainult märgi poolest ja seda, kumb on mõeldud, ütleb see üksainus bitt.
Räsiväärtuse teist poolt, prefiksit, võtme jaoks ei vajata. See tuleb kasutusele järgmises jaos.
9. Miks juhuslikkus siin juhuslik ei ole
Iga seda tüüpi allkiri vajab ühekordset väärtust , mida sageli nimetatakse nonsiks. See ei tohi kunagi korduda: kellel on kaks allkirja sama -iga, arvutab salajase võtme välja koolialgebraga.
Just selle peale on tegelikud süsteemid komistanud. Tuntuim juhtum on ühe mängukonsooli allkirjakontroll, mille tootja kasutas 2010. aastal alati sama nonssi — privaatvõti oli seega avalikult taastatav.
Ed25519 lahendab selle nii, et ei kasuta juhuslikkust üldse:
Nonss sõltub salajasest prefiksist ja sõnumist. Sellest järeldub kaks asja:
- Kaks erinevat arvustust annavad ülekaaluka tõenäosusega erinevad -id — kordumise juhtu ei teki.
- Sama arvustus annab alati sama allkirja. Allkirjastamist saab seega järele teha ja halb juhuarvugeneraator serveris ei saa midagi rikkuda, sest seda ei olegi vaja.
Arvustusportaali jaoks, kus tehakse päevas palju allkirju, ei ole see akadeemiline eelis. See on vahe „viga juhuslikkuse allikas oleks saatuslik" ja „ei olegi juhuslikkuse allikat, mis võiks tõrkuda" vahel.
10. Allkirjastamine
Kolm rida, rohkem seda ei ole:
Allkiri on paar
32 baiti punkti jaoks, 32 baiti arvu jaoks — kokku 64 baiti.
Tähelepanuväärne on teine rida: -sse lähevad , avalik võti ja sõnum. See, et kaasa räsitakse, ei ole kaunistus — see väldib rünnakuid, mille käigus allkiri tõlgendatakse ümber teisele võtmele.
11. Kontrollimine
Lugeja brauser teab: arvustust , allkirja ja avalikku võtit . Ta arvutab uuesti välja ja kontrollib üht ainsat võrrandit:
Kui see kehtib, on allkiri kehtiv. RFC 8032 lubab lisaks kofaktoriga läbi korrutatud kuju , mis käsitleb mõnda äärejuhtu leebemalt.
Ühtki serverit ei küsita, ükski teenus ei pea kättesaadav olema. Avalikust võtmest piisab.
12. Miks võrrand kehtib
Piisab asendamisest:
Kogu trikk peitub keskmises teisenduses: skalaarkorrutamine sobib kokku liitmisega. Kes teab -d, saab välja arvutada -i, mis võrrandit rahuldab. Kes -d ei tea, peaks ise valitud jaoks leidma sobiva -i — ja see tähendab diskreetse logaritmi lahendamist.
13. Täielikult läbi arvutatud minimaalne näide
Tegelike arvudega ei ole midagi järele arvutada — 253-bitiseid väärtusi peast kontrollida ei saa. Seepärast sama meetod tillukeses rühmas, kus iga sammu saab taskuarvutiga järele teha.
1. samm: rühm
Arvutame jääkidega mooduli järgi ja võtame . Kehtib
tekitab seega järku alamrühma. Astmed on:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 4 | 8 | 16 | 9 | 18 | 13 | 3 | 6 | 12 | 1 |
võtab üle baaspunkti rolli, korrutamine punktiliitmise oma. Skalaarid arvutatakse mooduli , väärtused mooduli järgi.
2. samm: võtmepaar
Olgu salajane . Siis on
tohib teada igaüks.
3. samm: nonss ja commitment
Olgu prefiksist ja arvustusest tulemuseks . Sellest:
4. samm: väljakutse
Räsi -i, ja arvustuse üle andku
5. samm: allkiri
Allkiri on paar .
6. samm: brauser kontrollib
Ta arvutab välja mõlemad pooled. Vasakul:
Paremal, kus :
Mõlemad pooled annavad :
7. samm: keegi muudab arvustuse teksti
Tekst läheb räsisse, seega muutub väljakutse — ütleme, et . Allkiri jääb muutumatuna -ks, parem pool aga mitte. Kuna :
Me võime arvustuse kustutada. Muuta me seda märkamatult ei saa.
Aus märkus näite kohta
Siin arvutati multiplikatiivses rühmas mooduli järgi, mitte kõveral: tähistab -d, korrutis punktiliitmist . Struktuur on sama ja just see ongi oluline. Erinevad on suurusjärgud: versus , ja seal ei leia võtit üheteistkümne võimaluse läbiproovimisega.
14. Mis juhtub, kui keegi arvustust muudab
Oletame, et keegi, kellel on ligipääs andmebaasile — ka keegi meie juurest — muudab arvustuse teksti või üht südametest. Siis muutub andmekirje ja sellega vähemalt üks kahest räsiväärtusest h ja rh andmeosas. Sellega muutub , sellega väljakutse , sellega kontrollvõrrandi parem pool. Vana allkiri enam ei sobi.
Otsustav lause selle kohta: me võime arvustuse kustutada, aga me ei saa seda märkamatult muuta. McGesundis käib sama kontroll lisaks igal ööl serveripoolselt üle kogu andmestiku — arvustus, mis seda ei läbi, ei lähe enam ettevõtte keskmisesse arvesse.
15. Miks ründaja läbi kukub
Ta teab avalikku võtit , baaspunkti , kõverat ja iga seni väljastatud allkirja. Puudu on tal .
Parim teadaolev klassikaline rünnak diskreetse logaritmi ülesandele järku rühmas vajab umbes sammu. korral on see ligikaudu
operatsiooni. Võrdluseks: isegi masin, mis suudab miljard miljardit () sammu sekundis, vajaks selleks mitmekordset universumi vanust.
Võltsimine ilma võtmeta tähendaks ise valitud jaoks sobiva -i leidmist — sama ülesanne teises kuues.
16. Miks Ed25519 ja mitte ECDSA
Mõlemad põhinevad samal ülesandel. Erinevus peitub kõiges, mis toimub selle ümber:
| ECDSA (NISTi kõverad) | Ed25519 | |
|---|---|---|
| Nonss | vajab värsket juhuslikkust | deterministlik prefiksist ja sõnumist |
| Valemid | erijuhud, andmesõltuvad harud | täielikud, üks arvutuskäik |
| Kõvera parameetrid | konstantide päritolu ei ole kunagi täielikult selgitatud | valitud jälgitavate kriteeriumide järgi |
| Allkirja suurus | 64–72 B, muutuv kodeering | püsivalt 64 B |
| Brauseris | ammu saadaval | alates 2023/2024 natiivselt, muidu JS-teegina |
Meie jaoks oli nonss otsustav argument. Arvustusportaal allkirjastab tihti ja automaatselt; meetod, mille puhul üksainus nõrk juhuväärtus võtme reedab, on selleks vale valik.
17. Mida Ed25519 ei suuda
Ed25519 põhineb diskreetsel logaritmil — ja just selle ülesande lahendab piisavalt suur kvantarvuti Shori algoritmiga tõhusalt. Kas ja millal selliseid masinaid on, on lahtine. Arvustuse jaoks, mis peab kümne aasta pärast veel kontrollitav olema, on see sellegipoolest küsimus, millele tuleb vastata täna.
Seepärast võib Ed25519 allkirja kõrvale astuda kvantiresistentne tempel:
- FALCON (FN-DSA) — kompaktsed allkirjad NTRU-võredest
- ML-DSA-87 (FIPS 204) — lõpetatud NISTi standard
Kumbki ei asenda Ed25519, vaid asub selle kõrvale. Kui üks meetoditest murtakse, kannab teine edasi.
18. Kulg pildis
19. Mida McGesund sellega konkreetselt teeb
Envelope. Iga allkirjastatud arvustus kannab MCG1:-ümbrikku, milles on vorminguversioon, andmeosa ja Ed25519 allkiri. Andmeosas olev kid ütleb, millist võtit mõeldakse; vastava avaliku võtme väljastab server päringu peale — see on avalik, seal ei ole midagi kaitsta.
Kontroll brauseris. Chrome ja Firefox oskavad Ed25519 alates 2023/2024 natiivselt WebCrypto liidese kaudu. Safari mitte — seal lõpeb vastav funktsioonikutse veaga, selle asemel et kontrollida. Seepärast langeb meie kontrollikood tagasi puhtale JavaScripti teostusele, mis laaditakse juurde ainult seal, kus seda vaja on. Allkirjakontroll läheb nii läbi igas brauseris, ja nimelt lugeja seadmes.
Ajaankur. Allkirjastamisvõtme sõrmejälg ankurdatakse OpenTimestampsi kaudu Bitcoini plokki. Sellega ei saa tõendada mitte üksnes seda, et allkiri on ehtne, vaid ka seda, et võti oli teataval ajahetkel juba olemas — ilma et keegi peaks uskuma meie ajatemplit.
Sisu sidumine. Andmeosa kannab välja rh, räsi kogu esitatud andmekirje üle: tekst, südamed, geostaatus, ajendi andmed ja päritolu. Ed25519 allkiri seob seega mitte ainult teksti, vaid kõik, mida arvustuse kõrval kuvatakse.
20. Üks lause kaasavõtmiseks
Kellel on salajane skalaar, allkirjastab mikrosekunditega. Kellel seda ei ole, peaks lahendama diskreetse logaritmi rühmas, kus on umbes elementi.
Arvustuse lugeja jaoks tähendab see lihtsalt: ta ei pea meid uskuma. Ta saab järele arvutada.