Podpisová schéma
Ed25519 vysvetlený matematicky
Podpis, ktorý visí na každom hodnotení McGesund — od krivky cez kľúč až po rovnicu, ktorú si prepočíta prehliadač čitateľa.
Stav: 2026-09-07
1. O čo tu ide
Hodnotenie na McGesund nie je textové pole v databáze, ktorému treba veriť. Pri odoslaní sa digitálne podpíše a každý návštevník si tento podpis môže neskôr prepočítať vo vlastnom prehliadači.
Na tento podpis používame Ed25519. Na rozdiel od FALCON a ML-DSA, ktoré sa môžu priložiť navyše ako pečiatka, Ed25519 nie je voliteľný: každé podpísané hodnotenie ho nesie, bez ohľadu na tarif a spôsob odovzdania.
Dôležité na úvod:
Ed25519 nie je šifrovanie. Text hodnotenia sa predsa má čítať. Podpis nedokazuje utajenie, ale pôvod a neporušenosť.
2. Čo presne sa podpisuje
Nepodpisuje sa súvislý text, ale kompaktný dátový objekt, ktorý text a všetko ostatné jednoznačne pribíja:
{
"v": 1,
"typ": "rev-comment",
"f": "<ID firmy>",
"c": "<ID hodnotenia>",
"h": "<SHA-256 textu hodnotenia>",
"rh": "<SHA-256 celého odovzdaného záznamu>",
"rv": 1,
"qh": "<SHA-256 QR obálky, len pri QR hodnoteniach>",
"kid": "<ID kľúča>",
"iat": 1757203200
}
Tento objekt sa zakóduje do CBOR. Táto postupnosť bajtov — nie jej pekné zobrazenie vyššie — je naša správa . Podpis a správa putujú spoločne do obálky:
Trojka je verzia formátu. Viac v nej nie je — predovšetkým žiadny postkvantový podpis: ten leží, ak existuje, vedľa záznamu a nie v obálke.
3. Čo má podpis dokázať
Čitateľ, ktorý príde na profil podniku, stojí pred dvoma otázkami:
- Pochádza toto hodnotenie naozaj zo systému McGesund?
- Bolo dodatočne zmenené?
Na to slúži pár kľúčov:
- súkromný kľúč — zostáva v podpisovej službe
- verejný kľúč — môže ho mať každý, adresuje sa cez ID kľúča (
kid) v payloade
Podpisuje sa súkromným kľúčom. Overuje sa verejným — a to v prehliadači čitateľa, nie na našom serveri. To je celá pointa: overenie, ktoré vykonáme sami a ktorého výsledok len oznámime, by nebolo overením, ale tvrdením.
4. Prečo eliptická krivka?
Každý podpis potrebuje výpočet, ktorý je jedným smerom ľahký a druhým prakticky nemožný. Pri Ed25519 je to skalárne násobenie na eliptickej krivke:
Vypočítať z tajného čísla verejný bod stojí mikrosekundy. Usúdiť z späť na znamená problém diskrétneho logaritmu — na ten nie je známy postup, ktorý by pri tejto veľkosti skončil v ľudských časových horizontoch.
Praktický zisk oproti starším postupom, ako je RSA, je veľkosť:
| verejný kľúč | podpis | |
|---|---|---|
| RSA-3072 | 384 B | 384 B |
| Ed25519 | 32 B | 64 B |
Pri porovnateľnej úrovni bezpečnosti. 64 bajtov na jedno hodnotenie nie je ani pri miliónoch hodnotení veličina, nad ktorou by bolo treba rozmýšľať.
5. Krivka edwards25519
Počíta sa modulo prvočíslo:
Odtiaľ ten názov. Krivka je skrútená Edwardsova krivka:
„Bod" je dvojica čísel z množiny , ktorá spĺňa túto rovnicu. Niet tu žiadnu krivku vidieť — nákres v nasledujúcej časti je názorná pomôcka nad reálnymi číslami, nie obrázok skutočného výpočtového priestoru.
Pribúdajú ešte dve veličiny:
- pevne dohodnutý základný bod ,
- rád podgrupy generovanej bodom :
je prvočíslo. To znamená: ak sa stále dokola pripočítava k sebe samému, prejde sa presne rôznych bodov a potom sa opäť skončí na začiatku. Všetky výpočty so skalármi preto bežia modulo , všetky výpočty so súradnicami modulo . Zameniť tieto dve čísla je klasická chyba začiatočníka.
6. Sčitovanie bodov
Dva body sa podľa pevného vzorca prepočítajú na tretí:
Neutrálnym prvkom je — bod, v ktorom sa počítanie začína.
Tento vzorec má vlastnosť, ktorá na ňom nie je vidieť a ktorá je pre bezpečnosť dôležitejšia než ktorákoľvek konštanta: je úplný. Funguje pre všetky vstupy, bez osobitných prípadov typu „oba body sú rovnaké" alebo „výsledok je neutrálny prvok". Pri starších Weierstrassových krivkách tieto osobitné prípady existujú a každý z nich je vetva v programe — vetva, ktorej čas behu sa dá odmerať. Kto meria, ako dlho trvá podpis, dozvie sa pri takýchto postupoch niečo o tajnom kľúči.
Úplné vzorce znamenajú: vždy tá istá cesta výpočtu, vždy ten istý čas, niet čo merať.
7. Skalárne násobenie — jednosmerka
znamená: pripočítať presne -krát k sebe samému. Pri s 253 bitmi by to bolo nezmyselne veľa práce — preto sa zdvojnásobuje:
a z týchto medzivýsledkov sa poskladá požadované . Približne 253 zdvojnásobení stačí na každé . To je cesta dopredu.
Naspäť takáto skratka neexistuje. Určiť z bodu číslo znamená vyriešiť problém diskrétneho logaritmu.
V skutočnom postupe sa počíta modulo . Tam neexistuje žiadne „vľavo", žiadne „vpravo" a žiadna blízkosť: z a sa stanú dve dvojice čísel bez akejkoľvek rozpoznateľnej príbuznosti.
8. Pár kľúčov podpisovej služby
Na začiatku je 32 náhodných bajtov, seed. Všetko ostatné sa z neho odvodí:
Z prvej polovice vzniká tajný skalár , avšak nie nezmenený. Tri bity sa nastavia, respektíve vynulujú — takzvaný clamping:
- najspodnejšie tri bity sa nastavia na nulu: sa tým stáva násobkom čísla 8. Dôvodom je kofaktor 8 krivky — plná grupa bodov je osemkrát väčšia než podgrupa rádu . Číslo deliteľné ôsmimi zaručene skončí v správnej podgrupe a o bodoch malého rádu nič neprezradí.
- najvyšší bit sa vynuluje, druhý najvyšší nastaví: má tým vždy rovnakú bitovú dĺžku. Kratšie by potrebovalo menej zdvojnásobení — a z času behu by sa opäť dalo niečo vyčítať.
Verejný kľúč je potom jednoducho
uložený ako 32 bajtov: súradnica a v najvyššom bite znamienko . Súradnicu si overovateľ dopočíta sám z rovnice krivky — obe riešenia sa líšia len znamienkom a ktoré je myslené, hovorí práve tento jeden bit.
Druhá polovica hašovej hodnoty, prefix, sa na kľúč nepotrebuje. Prichádza na rad v nasledujúcej časti.
9. Prečo náhoda tu nie je náhodou
Každý podpis tohto typu potrebuje jednorazovú hodnotu , často nazývanú nonce. Nikdy sa nesmie zopakovať: kto má dva podpisy s rovnakým , dokáže tajný kľúč vypočítať školskou algebrou.
Práve na tom stroskotali reálne systémy. Najznámejším prípadom je overovanie podpisov hernej konzoly, ktorej výrobca v roku 2010 používal stále rovnakú nonce — súkromný kľúč sa tým dal verejne zrekonštruovať.
Ed25519 to rieši tak, že nepoužíva náhodu vôbec:
Nonce visí na tajnom prefixe a na správe. Z toho vyplýva dvojaké:
- Dve rôzne hodnotenia dávajú s ohromujúcou pravdepodobnosťou rôzne — prípad opakovania nenastane.
- To isté hodnotenie dáva vždy ten istý podpis. Podpisový úkon sa tak dá zopakovať a overiť a zlý generátor náhodných čísel na serveri nemôže nič pokaziť, pretože žiadny nie je potrebný.
Pre hodnotiaci portál s mnohými podpismi denne to nie je akademická výhoda. Je to rozdiel medzi „chyba v zdroji náhody by bola osudná" a „neexistuje zdroj náhody, ktorý by mohol zlyhať".
10. Podpisovanie
Tri riadky, viac to nie je:
Podpisom je dvojica
32 bajtov pre bod , 32 bajtov pre číslo — spolu 64 bajtov.
Pozoruhodný je druhý riadok: do vstupuje , verejný kľúč aj správa. To, že sa spolu hašuje aj , nie je ozdoba — bráni to útokom, pri ktorých sa podpis prekladá na iný kľúč.
11. Overovanie
Prehliadač čitateľa pozná: hodnotenie , podpis a verejný kľúč . Nanovo si vypočíta a overí jedinú rovnicu:
Ak platí, podpis je platný. RFC 8032 dodatočne pripúšťa verziu vynásobenú kofaktorom , ktorá zaobchádza s niektorými okrajovými prípadmi veľkorysejšie.
Nikto sa nepýta servera, žiadna služba nemusí byť dostupná. Verejný kľúč postačuje.
12. Prečo rovnica vychádza
Stačí dosadiť:
Celý trik väzí v strednej úprave: skalárne násobenie sa znáša so sčitovaním. Kto pozná , dokáže vypočítať , ktoré rovnicu spĺňa. Kto nepozná, musel by k vlastnému zvolenému nájsť vyhovujúce — a to znamená vyriešiť diskrétny logaritmus.
13. Úplne prepočítaný miniatúrny príklad
So skutočnými číslami sa nedá nič prepočítať — 253-bitové hodnoty sa nedajú overiť z hlavy. Preto ten istý postup v maličkej grupe, v ktorej je každý krok overiteľný kalkulačkou.
Krok 1: Grupa
Počítame so zvyškami modulo a berieme . Platí
teda generuje podgrupu rádu . Mocniny sú:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 4 | 8 | 16 | 9 | 18 | 13 | 3 | 6 | 12 | 1 |
preberá úlohu základného bodu , násobenie úlohu sčitovania bodov. Skaláry sa počítajú modulo , hodnoty modulo .
Krok 2: Pár kľúčov
Nech je tajné . Potom je
smie vedieť každý.
Krok 3: Nonce a commitment
Z prefixu a hodnotenia nech vyjde . Z toho:
Krok 4: Výzva
Nech haš z , a hodnotenia dá
Krok 5: Podpis
Podpisom je dvojica .
Krok 6: Prehliadač overuje
Vypočíta obe strany. Vľavo:
Vpravo, s :
Obe strany dávajú :
Krok 7: Niekto zmení text hodnotenia
Text vstupuje do hašu, takže sa zmení výzva — povedzme na . Podpis zostáva nezmenený na , pravá strana však nie. S :
Hodnotenie môžeme zmazať. Zmeniť ho tak, aby si to nikto nevšimol, nedokážeme.
Poznámka o poctivosti príkladu
Počítalo sa tu v multiplikatívnej grupe modulo , nie na krivke: zastupuje , súčin zastupuje sčítanie bodov . Štruktúra je rovnaká a práve o ňu ide. Rôzne sú rádové veľkosti: oproti , a tam sa kľúč nedá nájsť vyskúšaním jedenástich možností.
14. Čo sa stane, keď niekto hodnotenie zmení
Predpokladajme, že niekto s prístupom do databázy — aj niekto u nás — zmení text hodnotenia alebo jedno zo sŕdc. Potom sa zmení záznam a tým aspoň jedna z dvoch hašových hodnôt h a rh v payloade. Tým sa zmení , tým výzva , tým pravá strana overovacej rovnice. Starý podpis už nesedí.
Rozhodujúca veta k tomu: hodnotenie môžeme zmazať, ale nemôžeme ho nepozorovane zmeniť. Na McGesund beží to isté overenie navyše každú noc serverovo nad celým fondom — hodnotenie, ktoré ním neprejde, už nevstupuje do priemeru podniku.
15. Prečo útočník neuspeje
Pozná verejný kľúč , základný bod , krivku a každý doteraz vydaný podpis. Chýba mu .
Najlepší známy klasický útok na problém diskrétneho logaritmu v grupe rádu potrebuje približne krokov. Pri je to zhruba
operácií. Pre porovnanie: aj stroj, ktorý zvládne miliardu miliárd () krokov za sekundu, by na to potreboval mnohonásobok veku vesmíru.
Falšovať bez kľúča by znamenalo nájsť k vlastnému zvolenému vyhovujúce — tá istá úloha v inom prestrojení.
16. Prečo Ed25519 a nie ECDSA
Obidve stoja na tom istom probléme. Rozdiel je vo všetkom, čo sa deje okolo:
| ECDSA (krivky NIST) | Ed25519 | |
|---|---|---|
| Nonce | potrebná čerstvá náhoda | deterministická z prefixu a správy |
| Vzorce | osobitné prípady, vetvy závislé od dát | úplné, jediná cesta výpočtu |
| Parametre krivky | pôvod konštánt nikdy úplne vysvetlený | zvolené podľa overiteľných kritérií |
| Veľkosť podpisu | 64 – 72 B, premenlivé kódovanie | pevných 64 B |
| V prehliadači | dostupné odjakživa | od rokov 2023/2024 natívne, inak ako JS knižnica |
Pre nás bola rozhodujúcim argumentom nonce. Hodnotiaci portál podpisuje často a automatizovane; postup, pri ktorom jediná slabá náhodná hodnota vyzradí kľúč, je na to nesprávnou voľbou.
17. Čo Ed25519 nedokáže
Ed25519 stojí na diskrétnom logaritme — a práve tento problém rieši dostatočne veľký kvantový počítač efektívne Shorovým algoritmom. Či a kedy takéto stroje budú, je otvorené. Pre hodnotenie, ktoré má byť overiteľné aj o desať rokov, je to napriek tomu otázka, na ktorú treba odpovedať dnes.
Preto môže vedľa podpisu Ed25519 pristúpiť kvantovo odolná pečiatka:
- FALCON (FN-DSA) — kompaktné podpisy z NTRU mriežok
- ML-DSA-87 (FIPS 204) — uzavretý štandard NIST
Ani jeden Ed25519 nenahrádza, kladú sa vedľa neho. Ak jeden z postupov padne, druhý nesie ďalej.
18. Priebeh v obraze
19. Čo s tým McGesund konkrétne robí
Obálka. Každé podpísané hodnotenie nesie obálku MCG1: s verziou formátu, payloadom a podpisom Ed25519. kid v payloade hovorí, ktorý kľúč je myslený; príslušný verejný kľúč vydá server na požiadanie — je verejný, nie je na ňom čo chrániť.
Overenie v prehliadači. Chrome a Firefox zvládajú Ed25519 od rokov 2023/2024 natívne cez rozhranie WebCrypto. Safari nie — tam volanie namiesto overenia vyhodí chybu. Preto sa náš overovací kód vracia k čisto javascriptovej implementácii, ktorá sa donačíta len tam, kde je potrebná. Overenie podpisu tak prebehne v každom prehliadači, a to na zariadení čitateľa.
Časová kotva. Odtlačok podpisového kľúča sa cez OpenTimestamps ukotví v bloku Bitcoinu. Tým sa dá doložiť nielen to, že podpis je pravý, ale aj to, že kľúč v určitom okamihu už existoval — bez toho, aby musel niekto veriť našej časovej pečiatke.
Väzba na obsah. Payload nesie rh, haš z celého odovzdaného záznamu: text, srdcia, geo-status, údaje o príležitosti a pôvod. Podpis Ed25519 tým viaže nielen text, ale všetko, čo sa vedľa hodnotenia zobrazuje.
20. Jedna veta na záver
Kto vlastní tajný skalár, podpisuje za mikrosekundy. Kto ho nevlastní, musel by vyriešiť diskrétny logaritmus v grupe s približne prvkami.
Pre čitateľa hodnotenia to znamená jednoducho: nemusí nám veriť. Môže si to prepočítať.