Parašo algoritmas
Ed25519 paaiškintas matematiškai
Parašas, kuris lydi kiekvieną McGesund atsiliepimą — nuo kreivės ir rakto iki lygybės, kurią perskaičiuoja skaitytojo naršyklė.
Būklė: 2026-09-07
1. Apie ką čia kalbama
Atsiliepimas McGesund sistemoje nėra tiesiog teksto laukas duomenų bazėje, kuriuo tenka patikėti. Išsiunčiamas jis pasirašomas skaitmeniniu būdu, ir kiekvienas lankytojas gali šį parašą vėliau perskaičiuoti savo paties naršyklėje.
Šiam parašui naudojame Ed25519. Kitaip nei FALCON ir ML-DSA, kuriuos galima papildomai pridėti kaip antspaudą, Ed25519 nėra pasirinkimas: jį turi kiekvienas pasirašytas atsiliepimas, nepriklausomai nuo tarifo ir pateikimo būdo.
Svarbu iš karto:
Ed25519 nėra šifravimas. Atsiliepimo tekstas juk skirtas skaityti. Parašas įrodo ne slaptumą, o kilmę ir vientisumą.
2. Kas tiksliai pasirašoma
Pasirašomas ne ištisinis tekstas, o kompaktiškas duomenų objektas, kuris vienareikšmiškai užfiksuoja tekstą ir visa kita:
{
"v": 1,
"typ": "rev-comment",
"f": "<įmonės ID>",
"c": "<atsiliepimo ID>",
"h": "<atsiliepimo teksto SHA-256>",
"rh": "<viso pateikimo duomenų rinkinio SHA-256>",
"rv": 1,
"qh": "<QR voko SHA-256, tik QR atsiliepimuose>",
"kid": "<rakto ID>",
"iat": 1757203200
}
Šis objektas užkoduojamas CBOR formatu. Ši baitų seka — o ne jos graži išklotinė viršuje — yra mūsų pranešimas . Parašas ir pranešimas kartu keliauja į voką:
Skaičius yra formato versija. Daugiau nieko jame nėra — ypač jokio postkvantinio parašo: jis, jei egzistuoja, guli šalia duomenų rinkinio, o ne voke.
3. Ką parašas turi užtikrinti
Skaitytojas, atsidūręs įmonės profilyje, turi du klausimus:
- Ar šis atsiliepimas tikrai kilęs iš McGesund sistemos?
- Ar jis buvo pakeistas vėliau?
Tam naudojama raktų pora:
- privatusis raktas — lieka parašų tarnyboje
- viešasis raktas — jį gali turėti bet kas, jis adresuojamas per rakto ID (
kid) naudingojoje apkrovoje
Pasirašoma privačiuoju raktu. Tikrinama viešuoju — ir būtent skaitytojo naršyklėje, o ne mūsų serveryje. Čia ir esmė: patikra, kurią atliekame patys ir kurios rezultatą paskelbiame, būtų ne patikra, o tvirtinimas.
4. Kodėl elipsinė kreivė?
Kiekvienam parašui reikia skaičiavimo, kuris viena kryptimi yra lengvas, o kita — praktiškai neįmanomas. Ed25519 atveju tai skaliarinė daugyba elipsinėje kreivėje:
Iš slapto skaičiaus apskaičiuoti viešąjį tašką trunka mikrosekundes. Iš atgal nustatyti reiškia spręsti diskretinio logaritmo uždavinį — tokio dydžio atveju nėra žinomo metodo, kuris susidorotų su juo per žmogui suvokiamą laiką.
Praktinė nauda, palyginti su senesniais metodais, tokiais kaip RSA, yra dydis:
| viešasis raktas | parašas | |
|---|---|---|
| RSA-3072 | 384 B | 384 B |
| Ed25519 | 32 B | 64 B |
Ir tai esant panašiam saugumo lygiui. 64 baitai vienam atsiliepimui net ir prie milijonų atsiliepimų nėra dydis, apie kurį reikėtų galvoti.
5. Kreivė edwards25519
Skaičiuojama moduliu, kuris yra pirminis skaičius:
Iš čia ir pavadinimas. Kreivė yra pasukta Edwardso kreivė:
„Taškas" yra skaičių pora iš aibės , tenkinanti šią lygtį. Jokios kreivės čia nepamatysi — piešinys kitame skyriuje yra tik vaizdinė pagalba realiųjų skaičių srityje, o ne tikrosios skaičiavimo erdvės atvaizdas.
Prisideda dar du dydžiai:
- iš anksto sutartas bazinis taškas ,
- taško generuojamo pogrupio eilė :
yra pirminis. Tai reiškia: nuolat pridedant prie savęs, pereinama lygiai skirtingų taškų, o paskui vėl atsiduriama pradžioje. Todėl visi skaičiavimai su skaliarais vyksta moduliu , o visi skaičiavimai su koordinatėmis — moduliu . Šių dviejų skaičių supainiojimas yra klasikinė pradedančiojo klaida.
6. Taškų sudėtis
Du taškai pagal fiksuotą formulę suskaičiuojami į trečią:
Neutralusis elementas yra — taškas, nuo kurio skaičiavimas prasideda.
Ši formulė turi savybę, kurios iš jos nematyti ir kuri saugumui svarbesnė už bet kurią konstantą: ji yra pilnoji. Ji veikia su visomis įvestimis, be atskirų atvejų „abu taškai sutampa" ar „rezultatas yra neutralusis elementas". Senesnėse Weierstrasso kreivėse tokie atskiri atvejai yra, ir kiekvienas iš jų — atskira programos šaka, kurios vykdymo trukmę galima išmatuoti. Kas matuoja, kiek trunka parašas, tokiuose metoduose sužino šį tą apie slaptąjį raktą.
Pilnosios formulės reiškia: visada tas pats skaičiavimo kelias, visada ta pati trukmė, nėra ko matuoti.
7. Skaliarinė daugyba — vienpusis eismas
reiškia: pridėti prie savęs lygiai kartų. Kai turi 253 bitus, tai būtų beprasmiškai daug darbo — todėl dvigubinama:
ir iš šių tarpinių rezultatų sudėliojamas norimas . Maždaug 253 dvigubinimų pakanka bet kuriam . Toks yra kelias pirmyn.
Atgal tokio trumpinio nėra. Iš taško nustatyti skaičių reiškia išspręsti diskretinio logaritmo uždavinį.
Tikrajame metode skaičiuojama moduliu . Ten nėra nei „kairės", nei „dešinės", nei artumo: iš ir gaunamos dvi skaičių poros be jokios atpažįstamos giminystės.
8. Parašų tarnybos raktų pora
Pradžioje yra 32 atsitiktiniai baitai — sėkla (seed). Visa kita išvedama iš jos:
Iš pirmosios pusės gaunamas slaptasis skaliaras , tačiau ne nepakeistas. Trys bitai nustatomi arba nunulinami — tai vadinamasis clamping:
- trys žemiausi bitai nustatomi į nulį: taip tampa aštuonių kartotiniu. Priežastis — kreivės kofaktorius 8: visa taškų grupė yra aštuonis kartus didesnė už eilės pogrupį. Iš 8 dalus garantuotai patenka į teisingą pogrupį ir nieko neatskleidžia apie mažos eilės taškus.
- aukščiausias bitas nunulinamas, antrasis iš viršaus nustatomas: taip visada turi tą patį bitų ilgį. Trumpesniam reikėtų mažiau dvigubinimų — ir vėl iš vykdymo trukmės būtų galima šį tą nuskaityti.
Viešasis raktas tada yra tiesiog
saugomas kaip 32 baitai: koordinatė, o aukščiausiame bite — ženklas. tikrintojas pats atgal apskaičiuoja iš kreivės lygties — abu sprendiniai skiriasi tik ženklu, o kuris turimas omenyje, pasako šis vienas bitas.
Antroji maišos reikšmės pusė — priešdėlis — raktui nereikalinga. Ji panaudojama kitame skyriuje.
9. Kodėl atsitiktinumas čia nėra atsitiktinis
Kiekvienam tokios sandaros parašui reikia vienkartinės reikšmės , dažnai vadinamos nonce. Ji niekada negali pasikartoti: kas turi du parašus su tuo pačiu , gali slaptąjį raktą išvesti mokyklinės algebros priemonėmis.
Būtent dėl to sudužo realios sistemos. Žinomiausias atvejis — vienos žaidimų konsolės parašų patikra, kurios gamintojas 2010 m. visada naudojo tą patį nonce; privatusis raktas tapo viešai atkuriamas.
Ed25519 tai išsprendžia visai nenaudodamas atsitiktinumo:
Nonce priklauso nuo slaptojo priešdėlio ir nuo pranešimo. Iš to plaukia du dalykai:
- Du skirtingi atsiliepimai su didžiule tikimybe duoda skirtingus — pasikartojimo atvejis neįvyksta.
- Tas pats atsiliepimas visada duoda tą patį parašą. Taip pasirašymo veiksmą galima atkartoti, o prastas atsitiktinių skaičių generatorius serveryje nieko sugadinti negali, nes jo tiesiog nereikia.
Atsiliepimų portalui, kuriame per dieną atliekama daug parašų, tai nėra akademinis pranašumas. Tai skirtumas tarp „klaida atsitiktinumo šaltinyje būtų lemtinga" ir „nėra jokio atsitiktinumo šaltinio, kuris galėtų sugesti".
10. Pasirašymas
Trys eilutės, ir viskas:
Parašas yra pora
32 baitai taškui , 32 baitai skaičiui — iš viso 64 baitai.
Verta atkreipti dėmesį į antrąją eilutę: į įeina , viešasis raktas ir pranešimas. Tai, kad taip pat maišomas, nėra priedas — tai užkerta kelią atakoms, kai parašas pertraktuojamas kaip skirtas kitam raktui.
11. Tikrinimas
Skaitytojo naršyklė žino: atsiliepimą , parašą ir viešąjį raktą . Ji iš naujo apskaičiuoja ir patikrina vienintelę lygybę:
Jei ji galioja, parašas yra teisingas. RFC 8032 papildomai leidžia kofaktoriumi padaugintą pavidalą , kuris kai kuriuos kraštinius atvejus traktuoja dosniau.
Jokio serverio klausti nereikia, joks servisas neturi būti pasiekiamas. Pakanka viešojo rakto.
12. Kodėl lygybė galioja
Pakanka įstatyti:
Visa gudrybė slypi viduriniame pertvarkyme: skaliarinė daugyba dera su sudėtimi. Kas žino , gali apskaičiuoti tokį , kuris tenkina lygybę. Kas nežino, turėtų prie savo pasirinkto rasti tinkamą — o tai reiškia išspręsti diskretinį logaritmą.
13. Iki galo perskaičiuotas mažas pavyzdys
Su tikrais skaičiais nieko perskaičiuoti nepavyks — 253 bitų reikšmių mintinai nepatikrinsi. Todėl tas pats metodas mažytėje grupėje, kurioje kiekvieną žingsnį galima atsekti skaičiuotuvu.
1 žingsnis: grupė
Skaičiuojame su liekanomis moduliu ir imame . Galioja
taigi generuoja eilės pogrupį. Laipsniai yra tokie:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 4 | 8 | 16 | 9 | 18 | 13 | 3 | 6 | 12 | 1 |
perima bazinio taško vaidmenį, o daugyba — taškų sudėties. Skaliarai skaičiuojami moduliu , reikšmės — moduliu .
2 žingsnis: raktų pora
Tegul slaptas skaičius yra . Tada
gali žinoti bet kas.
3 žingsnis: nonce ir įsipareigojimas
Tegul iš priešdėlio ir atsiliepimo gaunasi . Iš to:
4 žingsnis: iššūkis
Tegul maiša per , ir atsiliepimą duoda
5 žingsnis: parašas
Parašas yra pora .
6 žingsnis: naršyklė tikrina
Ji apskaičiuoja abi puses. Kairė:
Dešinė, kai :
Abi pusės duoda :
7 žingsnis: kas nors pakeičia atsiliepimo tekstą
Tekstas patenka į maišą, taigi pasikeičia iššūkis — tarkime, į . Parašas lieka nepakitęs, , o dešinė pusė — ne. Kai :
Atsiliepimą galime ištrinti. Pakeisti jo nepastebimai negalime.
Sąžininga pastaba apie pavyzdį
Čia skaičiuota daugybinėje grupėje moduliu , o ne kreivėje: atitinka , o sandauga — taškų sudėtį . Struktūra yra ta pati, ir būtent apie ją čia kalbama. Skiriasi eilės: prieš , ir ten rakto nerasi perrinkdamas vienuolika galimybių.
14. Kas nutinka, kai kas nors pakeičia atsiliepimą
Tarkime, kažkas, turintis prieigą prie duomenų bazės — taip pat ir kažkas iš mūsų — pakeičia atsiliepimo tekstą arba vieną iš širdelių. Tada pasikeičia duomenų rinkinys, o kartu bent viena iš dviejų maišos reikšmių h ir rh naudingojoje apkrovoje. Kartu pasikeičia , kartu iššūkis , kartu ir dešinioji patikros lygybės pusė. Senasis parašas nebetinka.
Lemiamas sakinys toks: atsiliepimą galime ištrinti, bet pakeisti jo nepastebimai negalime. McGesund sistemoje ta pati patikra papildomai kas naktį atliekama serveryje visam duomenų kiekiui — atsiliepimas, kuris jos neišlaiko, į įmonės vidurkį nebeįskaitomas.
15. Kodėl užpuolikui nepavyksta
Jis žino viešąjį raktą , bazinį tašką , kreivę ir kiekvieną iki šiol išduotą parašą. Jam trūksta .
Geriausiai žinomai klasikinei atakai prieš diskretinio logaritmo uždavinį eilės grupėje reikia maždaug žingsnių. Kai , tai maždaug
operacijų. Palyginimui: net mašinai, atliekančiai milijardą milijardų () žingsnių per sekundę, prireiktų daugybės Visatos amžių.
Klastoti be rakto reikštų prie savo pasirinkto rasti tinkamą — ta pati užduotis kitu pavidalu.
16. Kodėl Ed25519, o ne ECDSA
Abu remiasi ta pačia problema. Skirtumas slypi visame, kas vyksta aplinkui:
| ECDSA (NIST kreivės) | Ed25519 | |
|---|---|---|
| Nonce | reikalingas šviežias atsitiktinumas | deterministinis, iš priešdėlio ir pranešimo |
| Formulės | atskiri atvejai, nuo duomenų priklausančios šakos | pilnosios, vienas skaičiavimo kelias |
| Kreivės parametrai | konstantų kilmė niekada iki galo nepaaiškinta | parinktos pagal atsekamus kriterijus |
| Parašo dydis | 64–72 B, kintamas kodavimas | fiksuoti 64 B |
| Naršyklėje | prieinama jau seniai | nuo 2023–2024 m. natyviai, kitaip kaip JS biblioteka |
Mums lemiamas argumentas buvo nonce. Atsiliepimų portalas pasirašo dažnai ir automatiškai; metodas, kuriame viena silpna atsitiktinė reikšmė atskleidžia raktą, tam yra netinkamas pasirinkimas.
17. Ko Ed25519 neužtikrina
Ed25519 remiasi diskretiniu logaritmu — o būtent šį uždavinį pakankamai didelis kvantinis kompiuteris efektyviai išsprendžia Šoro algoritmu. Ar ir kada tokios mašinos atsiras, neaišku. Tačiau atsiliepimui, kuris turi likti patikrinamas ir po dešimties metų, tai vis tiek klausimas, į kurį reikia atsakyti šiandien.
Todėl greta Ed25519 parašo gali atsirasti kvantams atsparus antspaudas:
- FALCON (FN-DSA) — kompaktiški parašai iš NTRU gardelių
- ML-DSA-87 (FIPS 204) — užbaigtas NIST standartas
Nė vienas iš jų Ed25519 nepakeičia, jie guli šalia. Jei vienas metodas bus palaužtas, kitas laikys toliau.
18. Eiga paveiksle
19. Ką konkrečiai su tuo daro McGesund
Vokas. Kiekvienas pasirašytas atsiliepimas turi MCG1: voką su formato versija, naudingąja apkrova ir Ed25519 parašu. kid naudingojoje apkrovoje nurodo, kuris raktas turimas omenyje; atitinkamą viešąjį raktą serveris pateikia paprašius — jis yra viešas, jame nėra ko saugoti.
Patikra naršyklėje. Chrome ir Firefox nuo 2023–2024 m. moka Ed25519 natyviai per WebCrypto sąsają. Safari — ne; ten kvietimas vietoj patikros meta klaidą. Todėl mūsų tikrinimo kodas atsitraukia į gryną JavaScript realizaciją, kuri įkeliama tik ten, kur jos reikia. Taip parašo patikra pavyksta kiekvienoje naršyklėje, ir būtent skaitytojo įrenginyje.
Laiko inkaras. Parašo rakto kontrolinis atspaudas per OpenTimestamps įtvirtinamas Bitcoin bloke. Taip galima įrodyti ne tik tai, kad parašas tikras, bet ir tai, kad raktas tam tikru momentu jau egzistavo — nereikalaujant iš nieko tikėti mūsų laiko žyma.
Turinio susiejimas. Naudingojoje apkrovoje yra rh — viso pateikimo duomenų rinkinio maiša: teksto, širdelių, geo statuso, aplinkybių duomenų ir kilmės. Taip Ed25519 parašas susieja ne tik tekstą, bet ir viską, kas rodoma šalia atsiliepimo.
20. Vienas sakinys įsidėmėti
Kas turi slaptąjį skaliarą, pasirašo per mikrosekundes. Kas jo neturi, turėtų išspręsti diskretinį logaritmą grupėje, turinčioje maždaug elementų.
Atsiliepimo skaitytojui tai reiškia paprastą dalyką: jam nereikia mumis tikėti. Jis gali perskaičiuoti.