Aláírási eljárás
Az Ed25519 matematikai magyarázata
Az az aláírás, amely minden McGesund-értékeléshez hozzátartozik — a görbétől a kulcson át egészen addig az egyenletig, amelyet az olvasó böngészője újraszámol.
Állapot: 2026-09-07
1. Miről van szó
A McGesundnál egy értékelés nem pusztán egy szövegmező az adatbázisban, amelynek hinni kell. Beküldéskor digitálisan aláírjuk, és ezt az aláírást később bármelyik látogató újraszámolhatja a saját böngészőjében.
Ehhez az aláíráshoz az Ed25519 eljárást használjuk. A FALCON-nal és az ML-DSA-val ellentétben, amelyek további bélyegzőként helyezhetők mellé, az Ed25519 nem opció: minden aláírt értékelés hordozza, függetlenül a csomagtól és a beküldés módjától.
Fontos előrebocsátani:
Az Ed25519 nem titkosítás. Az értékelés szövegét éppen hogy el kell tudni olvasni. Az aláírás nem a titkosságot bizonyítja, hanem az eredetet és a sértetlenséget.
2. Mit írunk alá pontosan
Nem a folyószöveget írjuk alá, hanem egy tömör adatobjektumot, amely a szöveget és minden továbbit egyértelműen rögzít:
{
"v": 1,
"typ": "rev-comment",
"f": "<cégazonosító>",
"c": "<értékelésazonosító>",
"h": "<az értékelés szövegének SHA-256 hasítóértéke>",
"rh": "<a teljes beküldött adatrekord SHA-256 hasítóértéke>",
"rv": 1,
"qh": "<a QR-envelope SHA-256 hasítóértéke, csak QR-értékeléseknél>",
"kid": "<kulcsazonosító>",
"iat": 1757203200
}
Ezt az objektumot CBOR formátumba kódoljuk. Ez a bájtsorozat — nem a fenti szép megjelenítése — a mi üzenetünk. Az aláírás és az üzenet együtt kerül egy borítékba:
A a formátum verziószáma. Több nincs benne — különösen nincs benne poszt-kvantum aláírás: az, ha van ilyen, az adatrekord mellett található, nem a borítékban.
3. Mit kell teljesítenie az aláírásnak
Az olvasó, aki egy cégprofilra érkezik, két kérdés előtt áll:
- Valóban a McGesund rendszeréből származik ez az értékelés?
- Módosították-e utólag?
Ehhez egy kulcspár tartozik:
- egy titkos kulcs — az aláíró szolgáltatásban marad
- egy nyilvános kulcs — bárkinél lehet, a payloadban lévő kulcsazonosítón (
kid) keresztül címezhető
Az aláírás a titkos kulccsal készül. Az ellenőrzés a nyilvánossal — méghozzá az olvasó böngészőjében, nem a mi szerverünkön. Éppen ez a lényeg: az az ellenőrzés, amelyet mi magunk végzünk el, és amelynek eredményét közöljük, nem ellenőrzés volna, hanem állítás.
4. Miért elliptikus görbe?
Minden aláíráshoz olyan számítás kell, amely az egyik irányban könnyű, a másikban gyakorlatilag lehetetlen. Az Ed25519 esetében ez a skalárszorzás egy elliptikus görbén:
A titkos számból kiszámolni az nyilvános pontot mikromásodpercekbe kerül. Az -ból visszakövetkeztetni -ra a diszkrét logaritmus problémája — erre nem ismert olyan eljárás, amely ekkora méretnél emberi időtávon belül végezne.
Az RSA-hoz hasonló régebbi eljárásokkal szembeni gyakorlati nyereség a méret:
| nyilvános kulcs | aláírás | |
|---|---|---|
| RSA-3072 | 384 B | 384 B |
| Ed25519 | 32 B | 64 B |
Összehasonlítható biztonsági szint mellett. Az értékelésenkénti 64 bájt még milliónyi értékelés esetén sem olyan méret, amelyen gondolkodni kellene.
5. Az edwards25519 görbe
A számítás egy prímszám szerinti maradékokkal történik:
Innen a név. A görbe egy csavart Edwards-görbe:
Egy „pont" egy számpár a halmazból, amely kielégíti ezt az egyenletet. Nincs látható görbe — a következő szakasz rajza szemléltetés a valós számok fölött, nem a tényleges számítási tér képe.
Két mennyiség jön még hozzá:
- egy rögzített megállapodás szerinti bázispont, ,
- a által generált részcsoport rendje, :
Az prím. Ez azt jelenti: ha -t újra és újra önmagához adjuk, pontosan különböző ponton haladunk végig, majd ismét a kiindulóponton kötünk ki. Ezért a skalárokkal végzett minden számítás modulo , a koordinátákkal végzett minden számítás pedig modulo történik. E két szám összekeverése a klasszikus kezdő hiba.
6. Pontok összeadása
Két pontot egy rögzített képlet szerint számolunk össze egy harmadikká:
A semleges elem a — az a pont, ahol a számolás kezdődik.
Ennek a képletnek van egy olyan tulajdonsága, amely nem látszik rajta, és amely a biztonság szempontjából minden konstansnál fontosabb: teljes. Minden bemenetre működik, különleges esetek nélkül, tehát nincs külön ág arra, hogy „a két pont azonos" vagy „az eredmény a semleges elem". A régebbi Weierstrass-görbéknél léteznek ezek a különleges esetek, és mindegyikük egy-egy elágazás a programban — olyan elágazás, amelynek futásideje megmérhető. Aki megméri, mennyi ideig tart egy aláírás, ilyen eljárásoknál megtud valamit a titkos kulcsról.
A teljes képletek azt jelentik: mindig ugyanaz a számítási út, mindig ugyanannyi idő, nincs mit mérni.
7. Skalárszorzás — az egyirányú utca
Az azt jelenti: -t pontosan -szer önmagához adni. Egy 253 bites esetén ez értelmetlenül sok munka lenne — ezért duplázunk:
és ezekből a részeredményekből állítjuk össze a kívánt -t. Nagyjából 253 duplázás elegendő bármely -hez. Ez az előrefelé vezető út.
Visszafelé nincs ilyen rövidítés. Az pontból meghatározni az számot annyit tesz, mint megoldani a diszkrét logaritmus problémáját.
A valódi eljárásban modulo számolunk. Ott nincs „bal", nincs „jobb" és nincs közelség: a -ből és a -ből két olyan számpár lesz, amelyek között semmiféle felismerhető rokonság nincs.
8. Az aláíró szolgáltatás kulcspárja
Az elején 32 véletlen bájt áll, a seed. Minden továbbit ebből vezetünk le:
Az első félből keletkezik az titkos skalár, de nem változatlanul. Három bitet beállítunk, illetve törlünk — ez az úgynevezett clamping:
- a legalsó három bitet nullára állítjuk: ezáltal a 8 többszöröse lesz. Az ok a görbe 8-as kofaktora — a teljes pontcsoport nyolcszor akkora, mint az rendű részcsoport. A 8-cal osztható garantáltan a megfelelő részcsoportba kerül, és nem árul el semmit a kis rendű pontokról.
- a legfelső bitet töröljük, az alatta lévőt beállítjuk: ezzel bithossza mindig azonos. Egy rövidebb kevesebb duplázást igényelne — és megint le lehetne olvasni valamit a futásidőből.
A nyilvános kulcs ezután egyszerűen
32 bájton tárolva: az -koordináta, a legmagasabb bitben pedig az előjele. Az -et az ellenőrző maga számolja vissza a görbeegyenletből — a két megoldás csak előjelben tér el, és hogy melyikről van szó, azt ez az egyetlen bit mondja meg.
A hasítóérték második fele, a prefix, nem kell a kulcshoz. A következő szakaszban kerül sorra.
9. Miért nem véletlen itt a véletlen
Minden ilyen felépítésű aláíráshoz kell egy egyszer használatos érték, , amelyet gyakran nonce-nak neveznek. Soha nem ismétlődhet: akinek két aláírása van ugyanazzal az -rel, az középiskolás algebrával kiszámolhatja a titkos kulcsot.
Pontosan ezen buktak el valós rendszerek. A legismertebb eset egy játékkonzol aláírás-ellenőrzése, amelynek gyártója 2010-ben mindig ugyanazt a nonce-ot használta — a titkos kulcs ezzel nyilvánosan rekonstruálható volt.
Az Ed25519 úgy oldja meg ezt, hogy egyáltalán nem használ véletlent:
A nonce a titkos prefixtől és az üzenettől függ. Ebből kettő következik:
- Két különböző értékelés elsöprő valószínűséggel különböző -t ad — az ismétlődés esete nem áll elő.
- Ugyanaz az értékelés mindig ugyanazt az aláírást adja. Egy aláírási művelet így utólag reprodukálható, és egy rossz véletlenszám-generátor a szerveren nem tehet kárt, mert nincs is rá szükség.
Egy naponta sok aláírást előállító értékelőportál esetében ez nem elméleti előny. Ez a különbség aközött, hogy „a véletlenforrás hibája végzetes volna" és aközött, hogy „nincs olyan véletlenforrás, amely kieshetne".
10. Aláírás
Három sor, nem több:
Az aláírás a pár
32 bájt az pontnak, 32 bájt az számnak — együtt 64 bájt.
Figyelemre méltó a második sor: a -ba beleszámít , az nyilvános kulcs és az üzenet. Az, hogy -t is hasheljük, nem mellékes díszítés — megakadályozza azokat a támadásokat, amelyekben egy aláírást egy másik kulcsra értelmeznek át.
11. Ellenőrzés
Az olvasó böngészője ismeri: az értékelést, az aláírást és az nyilvános kulcsot. Újraszámolja a -t, és egyetlen egyenletet ellenőriz:
Ha teljesül, az aláírás érvényes. Az RFC 8032 megengedi ezenkívül a kofaktorral szorzott változatot is, , amely néhány határesetet nagyvonalúbban kezel.
Semmilyen szervert nem kérdezünk meg, semmilyen szolgáltatásnak nem kell elérhetőnek lennie. A nyilvános kulcs elegendő.
12. Miért jön ki az egyenlet
Elég behelyettesíteni:
Az egész trükk a középső átalakításban rejlik: a skalárszorzás összefér az összeadással. Aki ismeri -t, ki tud számolni olyan -t, amely kielégíti az egyenletet. Aki nem ismeri -t, annak egy maga választotta -hoz kellene megfelelő -t találnia — ez pedig azt jelenti, hogy meg kell oldania a diszkrét logaritmust.
13. Egy teljesen végigszámolt minipélda
A valódi számokkal nincs mit utánaszámolni — a 253 bites értékek fejben nem ellenőrizhetők. Ezért ugyanaz az eljárás egy parányi csoportban, ahol minden lépés zsebszámológéppel követhető.
1. lépés: A csoport
A szerinti maradékokkal számolunk, és -t választunk. Fennáll, hogy
tehát egy rendű részcsoportot generál. A hatványok a következők:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 4 | 8 | 16 | 9 | 18 | 13 | 3 | 6 | 12 | 1 |
A veszi át a bázispont szerepét, a szorzás pedig a pontösszeadásét. A skalárok modulo , az értékek modulo számolódnak.
2. lépés: A kulcspár
Legyen a titok . Ekkor
Az bárki tudhatja.
3. lépés: Nonce és commitment
A prefixből és az értékelésből adódjon . Ebből:
4. lépés: A challenge
Az -re, -ra és az értékelésre vett hasítóérték adjon
5. lépés: Az aláírás
Az aláírás a pár.
6. lépés: A böngésző ellenőriz
Mindkét oldalt kiszámolja. Bal oldal:
Jobb oldal, felhasználásával:
Mindkét oldal -t ad:
7. lépés: Valaki megváltoztatja az értékelés szövegét
A szöveg bekerül a hasításba, tehát megváltozik a challenge — mondjuk lesz. Az aláírás változatlanul marad, a jobb oldal viszont nem. A felhasználásával:
Egy értékelést törölni tudunk. Megváltoztatni viszont nem tudjuk anélkül, hogy az feltűnne.
Őszinte megjegyzés a példához
Itt a szerinti multiplikatív csoportban számoltunk, nem görbén: a áll az helyett, az szorzat pedig az pontösszeadás helyett. A struktúra ugyanaz, és éppen erről van szó. A nagyságrendek különböznek: szemben azzal, hogy , és ott a kulcs nem található meg tizenegy lehetőség végigpróbálásával.
14. Mi történik, ha valaki megváltoztatja az értékelést
Tegyük fel, hogy valaki adatbázis-hozzáféréssel — akár nálunk valaki — megváltoztatja az értékelés szövegét vagy az egyik szívet. Ekkor megváltozik az adatrekord, és ezzel a payloadban lévő h és rh hasítóértékek közül legalább az egyik. Ezzel megváltozik , ezzel a challenge, ezzel az ellenőrző egyenlet jobb oldala. A régi aláírás már nem illeszkedik.
A döntő mondat ehhez: egy értékelést törölni tudunk, de észrevétlenül megváltoztatni nem. A McGesundnál ugyanez az ellenőrzés éjszakánként a szerveroldalon is végigfut az állományon — az az értékelés, amely nem felel meg neki, többé nem számít bele a cég átlagába.
15. Miért bukik el a támadó
Ismeri az nyilvános kulcsot, a bázispontot, a görbét és minden eddig kiállított aláírást. Ami hiányzik neki, az az .
A diszkrét logaritmus problémája elleni legjobb ismert klasszikus támadás egy rendű csoportban körülbelül lépést igényel. esetén ez nagyjából
művelet. Összehasonlításképpen: még egy olyan gépnek is, amely másodpercenként milliárdszor milliárd () lépést hajt végre, az univerzum korának többszörösére volna szüksége hozzá.
Hamisítani a kulcs nélkül azt jelentené, hogy egy maga választotta -hoz kell megfelelő -t találni — ugyanaz a feladat más álruhában.
16. Miért az Ed25519 és nem az ECDSA
Mindkettő ugyanazon a problémán alapul. A különbség mindabban rejlik, ami körülötte történik:
| ECDSA (NIST-görbék) | Ed25519 | |
|---|---|---|
| Nonce | friss véletlen szükséges | determinisztikus a prefixből és az üzenetből |
| Képletek | különleges esetek, adatfüggő elágazások | teljes, egyetlen számítási út |
| Görbeparaméterek | a konstansok eredete sosem lett teljesen megmagyarázva | követhető kritériumok alapján választva |
| Aláírás mérete | 64–72 B, változó kódolás | fixen 64 B |
| Böngészőben | régóta elérhető | 2023/2024 óta natívan, egyébként JS-könyvtárként |
Számunkra a nonce volt a döntő érv. Egy értékelőportál gyakran és automatizáltan ír alá; az az eljárás, amelynél egyetlen gyenge véletlen érték kiadja a kulcsot, erre rossz választás.
17. Amit az Ed25519 nem nyújt
Az Ed25519 a diszkrét logaritmuson alapul — és pontosan ezt a problémát oldja meg hatékonyan egy kellően nagy kvantumszámítógép Shor algoritmusával. Hogy léteznek-e és mikor ilyen gépek, nyitott kérdés. Egy olyan értékelésnél viszont, amelynek tíz év múlva is ellenőrizhetőnek kell lennie, ez mégis olyan kérdés, amelyre ma kell választ adni.
Ezért az Ed25519-aláírás mellé kvantumrezisztens bélyegző kerülhet:
- FALCON (FN-DSA) — tömör aláírások NTRU-rácsokból
- ML-DSA-87 (FIPS 204) — a lezárt NIST-szabvány
Egyik sem váltja ki az Ed25519-et, hanem mellé kerül. Ha az egyik eljárás megtörik, a másik tovább visz.
18. A folyamat képben
19. Mit kezd ezzel konkrétan a McGesund
A boríték. Minden aláírt értékelés hordoz egy MCG1: borítékot a formátumverzióval, a payloaddal és az Ed25519-aláírással. A payloadban lévő kid megmondja, melyik kulcsról van szó; a hozzá tartozó nyilvános kulcsot a szerver kérésre kiadja — nyilvános, nincs rajta mit védeni.
Az ellenőrzés a böngészőben. A Chrome és a Firefox 2023/2024 óta natívan tudja az Ed25519-et a WebCrypto felületen keresztül. A Safari nem — ott a hívás ellenőrzés helyett kivételt dob. Ezért az ellenőrző kódunk visszaesik egy tiszta JavaScript-implementációra, amelyet csak ott töltünk be, ahol szükség van rá. Az aláírás-ellenőrzés így minden böngészőben lefut, méghozzá az olvasó eszközén.
Az időhorgony. Az aláírókulcs ujjlenyomatát az OpenTimestamps segítségével egy Bitcoin-blokkban rögzítjük. Ezzel nemcsak az igazolható, hogy az aláírás valódi, hanem az is, hogy a kulcs egy adott időpontban már létezett — anélkül, hogy bárkinek hinnie kellene a mi időbélyegünknek.
A tartalomhoz kötés. A payload hordozza az rh értéket, a teljes beküldött adatrekord hasítóértékét: szöveg, szívek, geostátusz, alkalomra vonatkozó adatok és eredet. Az Ed25519-aláírás így nemcsak a szöveget köti meg, hanem mindent, ami az értékelés mellett megjelenik.
20. Egy mondat, amit érdemes megjegyezni
Aki birtokolja a titkos skalárt, mikromásodpercek alatt ír alá. Aki nem birtokolja, annak diszkrét logaritmust kellene megoldania egy nagyjából elemű csoportban.
Egy értékelés olvasója számára ez egyszerűen azt jelenti: nem kell hinnie nekünk. Utánaszámolhat.