Parakstu algoritms
Ed25519 matemātiski izskaidrots
Paraksts, kas piesaistīts katrai McGesund atsauksmei — no līknes un atslēgas līdz vienādojumam, ko pārrēķina lasītāja pārlūkprogramma.
Stāvoklis: 2026-09-07
1. Par ko šeit ir runa
Atsauksme McGesund vietnē nav vienkārši teksta lauks datubāzē, kuram jātic uz vārda. Nosūtīšanas brīdī tā tiek digitāli parakstīta, un vēlāk ikviens apmeklētājs var šo parakstu pārrēķināt savā pārlūkprogrammā.
Šim parakstam mēs izmantojam Ed25519. Atšķirībā no FALCON un ML-DSA, kurus papildus var novietot blakus kā zīmogu, Ed25519 nav izvēles iespēja: katra parakstītā atsauksme to nes neatkarīgi no tarifa un iesniegšanas veida.
Svarīgi jau iepriekš:
Ed25519 nav šifrēšana. Atsauksmes tekstam taču ir jābūt lasāmam. Paraksts pierāda nevis slepenību, bet gan izcelsmi un neskartību.
2. Kas tieši tiek parakstīts
Parakstīts tiek nevis pats teksts, bet kompakts datu objekts, kas viennozīmīgi nostiprina gan tekstu, gan visu pārējo:
{
"v": 1,
"typ": "rev-comment",
"f": "<uzņēmuma ID>",
"c": "<atsauksmes ID>",
"h": "<atsauksmes teksta SHA-256>",
"rh": "<visa iesniegtā datu ieraksta SHA-256>",
"rv": 1,
"qh": "<QR aploksnes SHA-256, tikai QR atsauksmēm>",
"kid": "<atslēgas ID>",
"iat": 1757203200
}
Šis objekts tiek kodēts CBOR formātā. Tieši šī baitu virkne — nevis tās glītais attēlojums iepriekš — ir mūsu ziņojums . Paraksts un ziņojums kopā nonāk aploksnē:
Skaitlis ir formāta versija. Vairāk tur nekā nav — jo īpaši nav pēckvantu paraksta: tas, ja tāds ir, atrodas blakus datu ierakstam, nevis aploksnē.
3. Ko parakstam ir jāpaveic
Lasītājs, kas nonāk uzņēmuma profilā, saskaras ar diviem jautājumiem:
- Vai šī atsauksme tiešām nāk no McGesund sistēmas?
- Vai tā vēlāk ir mainīta?
Tam kalpo atslēgu pāris:
- privātā atslēga — paliek parakstīšanas dienestā
- publiskā atslēga — to drīkst zināt ikviens, un tā tiek adresēta ar atslēgas ID (
kid) payload objektā
Parakstīts tiek ar privāto atslēgu. Pārbaudīts — ar publisko, turklāt lasītāja pārlūkprogrammā, nevis uz mūsu servera. Tas ir būtiskākais: pārbaude, ko veiktu mēs paši un kuras rezultātu pēc tam paziņotu, nebūtu pārbaude, bet apgalvojums.
4. Kāpēc eliptiskā līkne?
Katram parakstam ir vajadzīgs aprēķins, kas vienā virzienā ir viegls un otrā praktiski neiespējams. Ed25519 gadījumā tā ir skalārā reizināšana uz eliptiskās līknes:
Aprēķināt publisko punktu no slepenā skaitļa prasa mikrosekundes. Secināt no atpakaļ uz nozīmē risināt diskrētā logaritma problēmu — tai nav zināma neviena metode, kas šādā izmērā tiktu galā cilvēkam aptveramā laikā.
Praktiskais ieguvums salīdzinājumā ar vecākiem algoritmiem, piemēram, RSA, ir izmērs:
| publiskā atslēga | paraksts | |
|---|---|---|
| RSA-3072 | 384 B | 384 B |
| Ed25519 | 32 B | 64 B |
Un tas pie salīdzināma drošības līmeņa. 64 baiti uz vienu atsauksmi arī miljonu atsauksmju gadījumā nav lielums, par kuru būtu jādomā.
5. Līkne edwards25519
Rēķināts tiek pēc moduļa, kas ir pirmskaitlis:
No tā arī nosaukums. Līkne ir savērpta Edvardsa līkne:
„Punkts" ir skaitļu pāris no kopas , kas apmierina šo vienādojumu. Nekādas līknes tur nav ko redzēt — zīmējums nākamajā sadaļā ir uzskates palīglīdzeklis reālo skaitļu apgabalā, nevis faktiskās rēķinu telpas attēls.
Klāt nāk vēl divi lielumi:
- fiksēti norunāts bāzes punkts ,
- ģenerētās apakšgrupas kārta :
ir pirmskaitlis. Tas nozīmē: ja atkal un atkal saskaita pašu ar sevi, tiek izieti tieši dažādi punkti, un tad viss sākas no gala. Tāpēc visi aprēķini ar skalāriem notiek pēc moduļa , bet visi aprēķini ar koordinātām — pēc moduļa . Šo abu skaitļu sajaukšana ir klasiskā iesācēju kļūda.
6. Punktu saskaitīšana
Divi punkti pēc fiksētas formulas tiek pārrēķināti trešajā:
Neitrālais elements ir — punkts, kurā rēķināšana sākas.
Šai formulai ir īpašība, kas pēc izskata nav nolasāma un kas drošībai ir svarīgāka par jebkuru konstanti: tā ir pilnīga. Tā darbojas visām ievaddatu vērtībām, bez īpašiem gadījumiem „abi punkti sakrīt" vai „rezultāts ir neitrālais elements". Vecākajām Veierštrāsa līknēm šādi īpašie gadījumi pastāv, un katrs no tiem programmā ir atsevišķs zars — zars, kura izpildes laiku var izmērīt. Kas mēra, cik ilgi aizņem paraksta izveide, tāda veida algoritmos uzzina kaut ko par slepeno atslēgu.
Pilnīgas formulas nozīmē: vienmēr viens un tas pats rēķinu ceļš, vienmēr viens un tas pats laiks, nekā mērāma.
7. Skalārā reizināšana — vienvirziena iela
nozīmē: saskaitīt ar sevi tieši reižu. Ja ir 253 bitu garš, tas būtu bezjēdzīgi daudz darba — tāpēc tiek dubultots:
un no šiem starprezultātiem tiek salikts vajadzīgais . Aptuveni 253 dubultojumi pietiek jebkuram . Tas ir ceļš uz priekšu.
Atpakaļvirzienā šāda īsceļa nav. Noteikt skaitli no punkta nozīmē atrisināt diskrētā logaritma problēmu.
Īstajā algoritmā tiek rēķināts pēc moduļa . Tur nav ne „pa kreisi", ne „pa labi", nedz arī tuvuma: no un rodas divi skaitļu pāri bez jebkādas saskatāmas radniecības.
8. Parakstīšanas dienesta atslēgu pāris
Sākumā ir 32 nejauši baiti — sēkla. Viss pārējais tiek atvasināts no tās:
No pirmās puses rodas slepenais skalārs , tomēr ne nemainītā veidā. Trīs biti tiek iestatīti vai attiecīgi dzēsti — tā sauktais clamping:
- trīs zemākie biti tiek iestatīti uz nulli: līdz ar to kļūst par 8 daudzkārtni. Iemesls ir līknes kofaktors 8 — pilnā punktu grupa ir astoņreiz lielāka nekā apakšgrupa ar kārtu . Ar 8 dalāms garantēti nonāk pareizajā apakšgrupā un neko neizpauž par maza kārtas punktiem.
- augstākais bits tiek dzēsts, otrs augstākais iestatīts: tādējādi vienmēr ir vienāda bitu garuma. Īsākam vajadzētu mazāk dubultojumu — un atkal izpildes laiks kaut ko atklātu.
Publiskā atslēga tad ir vienkārši
saglabāta kā 32 baiti: koordināta un augstākajā bitā zīme. vērtību pārbaudītājs pats atrēķina no līknes vienādojuma — abi risinājumi atšķiras tikai ar zīmi, un tieši šis viens bits pasaka, kurš no tiem ir domāts.
Jaucējvērtības otrā puse, prefikss, atslēgai nav vajadzīga. Tā tiek izmantota nākamajā sadaļā.
9. Kāpēc nejaušība šeit nav nejauša
Katram šāda uzbūves parakstam ir vajadzīga vienreizēja vērtība , ko bieži sauc par nonce. Tā nekad nedrīkst atkārtoties: kam ir divi paraksti ar vienu un to pašu , tas var izrēķināt slepeno atslēgu ar skolas algebru.
Tieši uz tā ir cietušas reālas sistēmas. Zināmākais gadījums ir kādas spēļu konsoles parakstu pārbaude, kuras ražotājs 2010. gadā izmantoja vienmēr vienu un to pašu nonce vērtību — privātā atslēga tādējādi bija publiski rekonstruējama.
Ed25519 to atrisina, vispār neizmantojot nejaušību:
Nonce vērtība ir atkarīga no slepenā prefiksa un no ziņojuma. No tā izriet divas lietas:
- Divas dažādas atsauksmes ar pārliecinošu varbūtību dod dažādas vērtības — atkārtošanās gadījums neiestājas.
- Viena un tā pati atsauksme vienmēr dod vienu un to pašu parakstu. Parakstīšanas gaitu tādējādi var izsekot, un slikts nejaušības ģenerators uz servera neko nevar sabojāt, jo tāds nemaz nav vajadzīgs.
Atsauksmju portālam ar daudziem parakstiem dienā tā nav akadēmiska priekšrocība. Tā ir atšķirība starp „kļūda nejaušības avotā būtu liktenīga" un „nav nekāda nejaušības avota, kas varētu atteikt".
10. Parakstīšana
Trīs rindas, vairāk nav:
Paraksts ir pāris
32 baiti punktam , 32 baiti skaitlim — kopā 64 baiti.
Ievērības vērta ir otrā rinda: vērtībā ieiet , publiskā atslēga un ziņojums. Tas, ka tiek līdzi jaukts, nav papildinājums — tas novērš uzbrukumus, kuros parakstu mēģina attiecināt uz citu atslēgu.
11. Pārbaude
Lasītāja pārlūkprogramma zina: atsauksmi , parakstu un publisko atslēgu . Tā no jauna aprēķina un pārbauda vienu vienīgu vienādojumu:
Ja tas izpildās, paraksts ir derīgs. RFC 8032 papildus atļauj ar kofaktoru pareizināto versiju , kas dažus robežgadījumus apstrādā pieļāvīgāk.
Neviens serveris netiek jautāts, nevienam pakalpojumam nav jābūt pieejamam. Pietiek ar publisko atslēgu.
12. Kāpēc vienādojums izpildās
Pietiek ar ievietošanu:
Viss triks slēpjas vidējā pārveidojumā: skalārā reizināšana saskan ar saskaitīšanu. Kas zina , var izrēķināt tādu , kas apmierina vienādojumu. Kas nezina, tam pašam izvēlētai vērtībai būtu jāatrod atbilstošs — un tas nozīmē atrisināt diskrēto logaritmu.
13. Pilnībā izrēķināts mini piemērs
Ar īstajiem skaitļiem nekas nav pārrēķināms — 253 bitu vērtības prātā pārbaudīt nevar. Tāpēc tas pats algoritms sīkā grupā, kurā katrs solis ir izsekojams ar kalkulatoru.
1. solis: grupa
Mēs rēķinām ar atlikumiem pēc moduļa un ņemam . Ir spēkā
tātad ģenerē apakšgrupu ar kārtu . Pakāpes ir šādas:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 4 | 8 | 16 | 9 | 18 | 13 | 3 | 6 | 12 | 1 |
pārņem bāzes punkta lomu, reizināšana — punktu saskaitīšanas lomu. Skalāri tiek rēķināti pēc moduļa , vērtības — pēc moduļa .
2. solis: atslēgu pāris
Lai slepenais lielums ir . Tad
drīkst zināt ikviens.
3. solis: nonce vērtība un saistījums
Lai no prefiksa un atsauksmes rodas . No tā:
4. solis: izaicinājums
Lai jaucējvērtība pār , un atsauksmi dod
5. solis: paraksts
Paraksts ir pāris .
6. solis: pārlūkprogramma pārbauda
Tā aprēķina abas puses. Pa kreisi:
Pa labi, ņemot vērā :
Abas puses dod :
7. solis: kāds maina atsauksmes tekstu
Teksts nonāk jaucējvērtībā, tātad mainās izaicinājums — teiksim, uz . Paraksts paliek nemainīgs pie , bet labā puse ne. Ņemot vērā :
Mēs varam atsauksmi izdzēst. Mainīt tā, lai to nepamanītu, mēs to nevaram.
Godīga piezīme par piemēru
Šeit tika rēķināts multiplikatīvajā grupā pēc moduļa , nevis uz līknes: apzīmē , bet reizinājums — punktu saskaitīšanu . Struktūra ir tā pati, un tieši par to ir runa. Atšķiras lielumu kārtas: pret , un tur atslēgu nevar atrast, izmēģinot vienpadsmit iespējas.
14. Kas notiek, ja kāds atsauksmi maina
Pieņemsim, ka kāds ar piekļuvi datubāzei — arī kāds no mūsējiem — maina atsauksmes tekstu vai kādu no sirdīm. Tad mainās datu ieraksts un līdz ar to vismaz viena no abām jaucējvērtībām h un rh payload objektā. Tādējādi mainās , līdz ar to izaicinājums , līdz ar to pārbaudes vienādojuma labā puse. Vecais paraksts vairs neatbilst.
Izšķirošais teikums šeit: mēs varam atsauksmi izdzēst, bet nevaram to nemanāmi mainīt. McGesund vietnē tā pati pārbaude papildus katru nakti tiek veikta servera pusē pār visu kopumu — atsauksme, kas to neiztur, vairs neieplūst uzņēmuma vidējā vērtējumā.
15. Kāpēc uzbrucējs neizdodas
Viņš zina publisko atslēgu , bāzes punktu , līkni un katru līdz šim izsniegto parakstu. Viņam trūkst .
Labākajam zināmajam klasiskajam uzbrukumam diskrētā logaritma problēmai grupā ar kārtu ir vajadzīgi aptuveni soļi. Pie tie ir aptuveni
operāciju. Salīdzinājumam: pat mašīnai, kas paveic miljardu miljardu () soļu sekundē, tam būtu vajadzīgs vairākkārtējs Visuma vecums.
Viltot bez atslēgas nozīmētu pašam izvēlētai vērtībai atrast atbilstošu — tas pats uzdevums citā izskatā.
16. Kāpēc Ed25519, nevis ECDSA
Abi balstās uz vienu un to pašu problēmu. Atšķirība slēpjas visā, kas notiek apkārt:
| ECDSA (NIST līknes) | Ed25519 | |
|---|---|---|
| Nonce vērtība | vajadzīga svaiga nejaušība | deterministiska no prefiksa un ziņojuma |
| Formulas | īpašie gadījumi, no datiem atkarīgi zari | pilnīgas, viens rēķinu ceļš |
| Līknes parametri | konstanšu izcelsme nekad nav pilnībā izskaidrota | izvēlēti pēc izsekojamiem kritērijiem |
| Paraksta izmērs | 64–72 B, mainīgs kodējums | fiksēti 64 B |
| Pārlūkprogrammā | pieejams jau sen | kopš 2023./2024. gada natīvi, citādi kā JS bibliotēka |
Mums izšķirošais arguments bija nonce vērtība. Atsauksmju portāls paraksta bieži un automatizēti; algoritms, kurā viena vienīga vāja nejauša vērtība atklāj atslēgu, tam ir nepareizā izvēle.
17. Ko Ed25519 nespēj
Ed25519 balstās uz diskrēto logaritmu — un tieši šo problēmu pietiekami liels kvantu dators ar Šora algoritmu atrisina efektīvi. Vai un kad šādas mašīnas būs, ir atklāts jautājums. Atsauksmei, kurai pēc desmit gadiem joprojām jābūt pārbaudāmai, tas tomēr ir jautājums, uz kuru jāatbild šodien.
Tāpēc blakus Ed25519 parakstam var nostāties kvantu izturīgs zīmogs:
- FALCON (FN-DSA) — kompakti paraksti no NTRU režģiem
- ML-DSA-87 (FIPS 204) — pabeigtais NIST standarts
Neviens no tiem Ed25519 neaizstāj, tie nostājas tam blakus. Ja viens no algoritmiem tiek uzlauzts, otrs turpina nest.
18. Norise attēlā
19. Ko McGesund ar to konkrēti dara
Aploksne. Katra parakstītā atsauksme nes MCG1: aploksni ar formāta versiju, payload objektu un Ed25519 parakstu. kid payload objektā pasaka, kura atslēga ir domāta; attiecīgo publisko atslēgu serveris izsniedz pēc pieprasījuma — tā ir publiska, tur nav nekā aizsargājama.
Pārbaude pārlūkprogrammā. Chrome un Firefox Ed25519 kopš 2023./2024. gada atbalsta natīvi caur WebCrypto saskarni. Safari — nē; tur izsaukums pārbaudes vietā izmet kļūdu. Tāpēc mūsu pārbaudes kods atkāpjas uz tīru JavaScript implementāciju, kas tiek ielādēta tikai tur, kur tā ir vajadzīga. Paraksta pārbaude tādējādi izpildās katrā pārlūkprogrammā, turklāt lasītāja ierīcē.
Laika enkurs. Parakstīšanas atslēgas nospiedums caur OpenTimestamps tiek noenkurots Bitcoin blokā. Tādējādi var pierādīt ne tikai to, ka paraksts ir īsts, bet arī to, ka atslēga noteiktā brīdī jau eksistēja — un nevienam nav jātic mūsu laika zīmogam.
Satura piesaiste. Payload objekts nes rh, jaucējvērtību pār visu iesniegto datu ierakstu: tekstu, sirdis, ģeostatusu, ziņas par apmeklējuma iemeslu un izcelsmi. Ed25519 paraksts tādējādi piesaista ne tikai tekstu, bet visu, kas blakus atsauksmei tiek rādīts.
20. Viens teikums līdzņemšanai
Kam pieder slepenais skalārs, tas paraksta mikrosekundēs. Kam tā nav, tam būtu jāatrisina diskrētais logaritms grupā ar aptuveni elementiem.
Atsauksmes lasītājam tas vienkārši nozīmē: viņam mums nav jātic. Viņš var pārrēķināt.