Podpisové schéma
Ed25519 vysvětlený matematicky
Podpis, který visí u každého hodnocení na McGesund — od křivky přes klíč až po rovnici, kterou si přepočítá prohlížeč čtenáře.
Stav: 2026-09-07
1. O co tu jde
Hodnocení na McGesund není textové pole v databázi, kterému se musí věřit. Při odeslání je digitálně podepsáno a každý návštěvník si tento podpis může později přepočítat ve vlastním prohlížeči.
Pro tento podpis používáme Ed25519. Na rozdíl od FALCON a ML-DSA, které lze přiložit navíc jako razítko, není Ed25519 volitelný: každé podepsané hodnocení ho nese, nezávisle na tarifu a způsobu odeslání.
Důležité na úvod:
Ed25519 není šifrování. Text hodnocení se přece má číst. Podpis nedokazuje utajení, nýbrž původ a neporušenost.
2. Co přesně se podepisuje
Nepodepisuje se souvislý text, nýbrž kompaktní datový objekt, který text a vše ostatní jednoznačně přibíjí:
{
"v": 1,
"typ": "rev-comment",
"f": "<ID firmy>",
"c": "<ID hodnocení>",
"h": "<SHA-256 textu hodnocení>",
"rh": "<SHA-256 celého odeslaného datového záznamu>",
"rv": 1,
"qh": "<SHA-256 QR obálky, jen u QR hodnocení>",
"kid": "<ID klíče>",
"iat": 1757203200
}
Tento objekt se zakóduje do CBOR. Tato posloupnost bajtů — nikoli její úhledné zobrazení výše — je naše zpráva . Podpis a zpráva putují společně do obálky:
Trojka je verze formátu. Víc v ní není — zejména žádný postkvantový podpis: ten leží, pokud existuje, vedle datového záznamu, a ne v obálce.
3. Co má podpis dokázat
Čtenář, který přijde na profil podniku, stojí před dvěma otázkami:
- Pochází toto hodnocení opravdu ze systému McGesund?
- Bylo dodatečně změněno?
K tomu slouží pár klíčů:
- soukromý klíč — zůstává v podpisové službě
- veřejný klíč — může mít každý, adresuje se přes ID klíče (
kid) v payloadu
Podepisuje se soukromým klíčem. Ověřuje se veřejným — a to v prohlížeči čtenáře, ne na našem serveru. O to jde: ověření, které bychom prováděli sami a jehož výsledek bychom pak sdělovali, by nebylo ověření, nýbrž tvrzení.
4. Proč eliptická křivka?
Každý podpis potřebuje výpočet, který je jedním směrem snadný a druhým prakticky nemožný. U Ed25519 je to skalární násobení na eliptické křivce:
Spočítat z tajného čísla veřejný bod trvá mikrosekundy. Usoudit z zpět na znamená problém diskrétního logaritmu — pro něj není znám žádný postup, který by při této velikosti skončil v lidsky představitelných časech.
Praktickým ziskem oproti starším schématům, jako je RSA, je velikost:
| veřejný klíč | podpis | |
|---|---|---|
| RSA-3072 | 384 B | 384 B |
| Ed25519 | 32 B | 64 B |
Při srovnatelné úrovni bezpečnosti. 64 bajtů na jedno hodnocení není ani při milionech hodnocení velikost, nad kterou by bylo třeba přemýšlet.
5. Křivka edwards25519
Počítá se modulo prvočíslo:
Odtud ten název. Křivka je zkroucená Edwardsova křivka:
„Bod" je dvojice čísel z , která tuto rovnici splňuje. Žádná křivka tu k vidění není — kresba v následující kapitole je názorná pomůcka nad reálnými čísly, nikoli obraz skutečného výpočetního prostoru.
Přibývají ještě dvě veličiny:
- pevně dohodnutý bázový bod ,
- řád podgrupy generované bodem :
je prvočíslo. To znamená: přičítáme-li stále znovu k sobě samému, projdeme přesně různých bodů a pak se vrátíme na začátek. Všechny výpočty se skaláry proto probíhají modulo , všechny výpočty se souřadnicemi modulo . Zaměnit tato dvě čísla je klasická začátečnická chyba.
6. Sčítání bodů
Dva body se podle pevného vzorce spojí do třetího:
Neutrálním prvkem je — bod, ve kterém výpočet začíná.
Tento vzorec má vlastnost, která na něm není vidět a která je pro bezpečnost důležitější než jakákoli konstanta: je úplný. Funguje pro všechny vstupy, bez zvláštních případů typu „oba body jsou stejné" nebo „výsledkem je neutrální prvek". U starších Weierstrassových křivek tyto zvláštní případy existují a každý z nich je větev v programu — větev, jejíž dobu běhu lze změřit. Kdo měří, jak dlouho podpis trvá, dozví se u takových schémat něco o tajném klíči.
Úplné vzorce znamenají: vždy stejná cesta výpočtu, vždy stejný čas, není co měřit.
7. Skalární násobení — jednosměrka
znamená: přičíst přesně -krát k sobě samému. U o délce 253 bitů by to bylo nesmyslně mnoho práce — proto se zdvojnásobuje:
a z těchto mezivýsledků se požadované složí. Zhruba 253 zdvojnásobení stačí pro každé . To je cesta vpřed.
Zpátky tato zkratka neexistuje. Určit z bodu číslo znamená vyřešit problém diskrétního logaritmu.
Ve skutečném schématu se počítá modulo . Tam neexistuje žádné „vlevo", žádné „vpravo" a žádná blízkost: z a se stanou dvě dvojice čísel bez jakékoli rozpoznatelné příbuznosti.
8. Pár klíčů podpisové služby
Na začátku stojí 32 náhodných bajtů, seed. Vše ostatní se z něj odvozuje:
Z první poloviny vzniká tajný skalár , ovšem ne beze změny. Tři bity se nastaví, respektive vynulují — takzvaný clamping:
- nejnižší tři bity se nastaví na nulu: se tím stane násobkem osmi. Důvodem je kofaktor 8 křivky — celá grupa bodů je osmkrát větší než podgrupa řádu . Skalár dělitelný osmi zaručeně skončí ve správné podgrupě a neprozradí nic o bodech malého řádu.
- nejvyšší bit se vynuluje, druhý nejvyšší se nastaví: má tím vždy stejnou bitovou délku. Kratší by potřebovalo méně zdvojnásobení — a z doby běhu by opět šlo něco vyčíst.
Veřejný klíč je pak prostě
uložený jako 32 bajtů: souřadnice a v nejvyšším bitu znaménko . Souřadnici si ověřovatel dopočítá sám zpětně z rovnice křivky — obě řešení se liší jen znaménkem a které z nich je míněno, říká právě tento jeden bit.
Druhá polovina hashe, prefix, se pro klíč nepoužije. Přijde na řadu v následující kapitole.
9. Proč zde náhoda není náhodná
Každý podpis této konstrukce potřebuje jednorázovou hodnotu , často nazývanou nonce. Nikdy se nesmí opakovat: kdo má dva podpisy se stejným , dopočítá tajný klíč středoškolskou algebrou.
Právě na tom reálné systémy ztroskotaly. Nejznámějším případem je ověřování podpisů herní konzole, jejíž výrobce v roce 2010 používal stále stejnou nonce — soukromý klíč tím byl veřejně rekonstruovatelný.
Ed25519 to řeší tak, že nepoužívá vůbec žádnou náhodu:
Nonce závisí na tajném prefixu a na zprávě. Z toho plyne dvojí:
- Dvě různá hodnocení dají s drtivou pravděpodobností různá — případ opakování nenastane.
- Totéž hodnocení dá vždy tentýž podpis. Podepisování je tak zpětně sledovatelné a špatný generátor náhody na serveru nemůže nic pokazit, protože žádný není potřeba.
Pro hodnoticí portál s mnoha podpisy denně to není akademická výhoda. Je to rozdíl mezi „chyba ve zdroji náhody by byla fatální" a „žádný zdroj náhody, který by mohl selhat, tu není".
10. Podepisování
Tři řádky, víc to není:
Podpisem je dvojice
32 bajtů pro bod , 32 bajtů pro číslo — dohromady 64 bajtů.
Pozoruhodný je druhý řádek: do vstupuje , veřejný klíč a zpráva. To, že se hashuje s sebou, není ozdoba — brání to útokům, při nichž je podpis vyložen jako podpis pod jiným klíčem.
11. Ověřování
Prohlížeč čtenáře zná: hodnocení , podpis a veřejný klíč . Znovu si spočítá a ověří jedinou rovnici:
Platí-li, je podpis platný. RFC 8032 navíc připouští verzi vynásobenou kofaktorem , která některé okrajové případy řeší velkoryseji.
Žádný server se neptá, žádná služba nemusí být dostupná. Veřejný klíč stačí.
12. Proč rovnice vychází
Stačí dosadit:
Celý trik vězí v prostřední úpravě: skalární násobení se snáší se sčítáním. Kdo zná , umí spočítat , které rovnici splňuje. Kdo nezná, musel by k sebou zvolenému najít vyhovující — a to znamená vyřešit diskrétní logaritmus.
13. Kompletně propočítaný miniaturní příklad
Se skutečnými čísly není co počítat — 253bitové hodnoty se v hlavě ověřit nedají. Proto totéž schéma v nepatrné grupě, kde je každý krok kontrolovatelný kalkulačkou.
Krok 1: Grupa
Počítáme se zbytky modulo a bereme . Platí
tedy generuje podgrupu řádu . Mocniny jsou:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 4 | 8 | 16 | 9 | 18 | 13 | 3 | 6 | 12 | 1 |
přebírá roli bázového bodu , násobení roli sčítání bodů. Skaláry se počítají modulo , hodnoty modulo .
Krok 2: Pár klíčů
Nechť tajné je . Pak je
smí vědět každý.
Krok 3: Nonce a commitment
Z prefixu a hodnocení nechť vyjde . Odtud:
Krok 4: Výzva
Hash přes , a hodnocení nechť dá
Krok 5: Podpis
Podpisem je dvojice .
Krok 6: Prohlížeč ověřuje
Spočítá obě strany. Vlevo:
Vpravo, s :
Obě strany dávají :
Krok 7: Někdo změní text hodnocení
Text vstupuje do hashe, takže se změní výzva — řekněme na . Podpis zůstává nezměněn na , pravá strana ale ne. S :
Hodnocení můžeme smazat. Změnit ho tak, aby si toho nikdo nevšiml, nemůžeme.
Poznámka na rovinu k příkladu
Počítalo se zde v multiplikativní grupě modulo , ne na křivce: zastupuje , součin zastupuje sčítání bodů . Struktura je táž, a přesně o to jde. Liší se řády velikosti: oproti , a tam klíč vyzkoušením jedenácti možností najít nelze.
14. Co se stane, když někdo hodnocení změní
Dejme tomu, že někdo s přístupem k databázi — i někdo u nás — změní text hodnocení nebo jedno ze srdíček. Pak se změní datový záznam a s ním alespoň jeden z obou hashů h a rh v payloadu. Tím se změní , tím výzva , tím pravá strana ověřovací rovnice. Starý podpis už nesedí.
Rozhodující věta k tomu: hodnocení můžeme smazat, ale nemůžeme ho nepozorovaně změnit. Na McGesund běží totéž ověření navíc každou noc serverově nad celým fondem — hodnocení, které jím neprojde, už do průměru podniku nevstupuje.
15. Proč útočník neuspěje
Zná veřejný klíč , bázový bod , křivku i každý dosud vystavený podpis. Co mu chybí, je .
Nejlepší známý klasický útok na problém diskrétního logaritmu v grupě řádu potřebuje zhruba kroků. Při je to přibližně
operací. Pro srovnání: i stroj, který zvládne miliardu miliard () kroků za sekundu, by na to potřeboval mnohonásobek stáří vesmíru.
Padělat bez klíče by znamenalo najít k sebou zvolenému vyhovující — táž úloha v jiném přestrojení.
16. Proč Ed25519 a ne ECDSA
Obojí stojí na témže problému. Rozdíl je ve všem, co se děje okolo:
| ECDSA (křivky NIST) | Ed25519 | |
|---|---|---|
| Nonce | nutná čerstvá náhoda | deterministická z prefixu a zprávy |
| Vzorce | zvláštní případy, větve závislé na datech | úplné, jediná cesta výpočtu |
| Parametry křivky | původ konstant nikdy plně vysvětlen | zvoleny podle doložitelných kritérií |
| Velikost podpisu | 64–72 B, proměnlivé kódování | pevných 64 B |
| V prohlížeči | dostupné odedávna | od roku 2023/2024 nativně, jinak jako knihovna v JS |
Pro nás byla rozhodujícím argumentem nonce. Hodnoticí portál podepisuje často a automatizovaně; schéma, u něhož jediná slabá náhodná hodnota vyzradí klíč, je pro to špatná volba.
17. Co Ed25519 neumí
Ed25519 stojí na diskrétním logaritmu — a právě tento problém řeší dostatečně velký kvantový počítač efektivně Shorovým algoritmem. Zda a kdy takové stroje budou, je otevřené. Pro hodnocení, které má být ověřitelné ještě za deset let, je to přesto otázka, kterou je nutné zodpovědět dnes.
Proto může vedle podpisu Ed25519 stanout kvantově odolné razítko:
- FALCON (FN-DSA) — kompaktní podpisy z NTRU mřížek
- ML-DSA-87 (FIPS 204) — dokončený standard NIST
Ani jedno Ed25519 nenahrazuje, obě si k němu lehnou. Zlomí-li se jedno ze schémat, druhé nese dál.
18. Průběh v obrázku
19. Co s tím McGesund konkrétně dělá
Obálka. Každé podepsané hodnocení nese obálku MCG1: s verzí formátu, payloadem a podpisem Ed25519. Hodnota kid v payloadu říká, o který klíč jde; příslušný veřejný klíč vydá server na vyžádání — je veřejný, není na něm co chránit.
Ověření v prohlížeči. Chrome a Firefox umějí Ed25519 od roku 2023/2024 nativně přes rozhraní WebCrypto. Safari ne — tam volání místo ověření vyhodí chybu. Náš ověřovací kód proto přejde na čistě javascriptovou implementaci, která se donačte jen tam, kde je potřeba. Ověření podpisu tak proběhne v každém prohlížeči, a to na zařízení čtenáře.
Časová kotva. Otisk podpisového klíče je přes OpenTimestamps zakotven v bloku Bitcoinu. Tím lze doložit nejen to, že je podpis pravý, ale i to, že klíč v určitém okamžiku již existoval — aniž by někdo musel věřit našemu časovému razítku.
Vazba na obsah. Payload nese rh, hash přes celý odeslaný datový záznam: text, srdíčka, geostatus, údaje o důvodu a původ. Podpis Ed25519 tak neváže jen text, nýbrž vše, co se vedle hodnocení zobrazuje.
20. Jedna věta na závěr
Kdo tajný skalár vlastní, podepisuje v mikrosekundách. Kdo ho nevlastní, musel by vyřešit diskrétní logaritmus v grupě s asi prvky.
Pro čtenáře hodnocení to znamená prostě tohle: nemusí nám věřit. Může si to přepočítat.