Znalostní základna: kvantově odolné šifrování

Technický whitepaper

Post-kvantová klíčová dohoda v Nymchatu

Distribuovat ML-KEM-768 veřejné klíče přes Nostr bez adresáře nebo registru a zasévat je z tajemství, které žádná veřejná hodnota neodhalí.

Verze 1.0 srpen 2026 Platí pro Nymchat 3.74+

Přidání post-kvantové výměny klíčů do poselství není většinou problémem kryptografie.Primitivy jsou standardizovány a knihovny existují.Těžká část je, že každý účastník nyní potřebuje Druhá Tento článek popisuje, jak Nymchat odpovídá na to - odkud druhý klíč pochází, jak se dostane k lidem, kteří ho potřebují, a co je rozhraní dovoleno požadovat o výsledku - a v poslední části, co tento výsledek nechrání.

1Problém je

Naše soukromé zprávy jsou šifrovány pomocí NIP-44, která má dvě oddělené poloviny. polovina, která překrývá obyčejný text – ChaCha20 s tagem HMAC-SHA256, klíčený přes HKDF (ČSSD 5869- není smysluplně ohrožen kvantovým počítačem; Groverův algoritmus stojí za zrychlení čtvercového kořene proti symetrickému klíči a 256 bitů to absorbuje. Souhlasí na klíči je eliptická krivka Diffie-Hellman nad ČSSD256K1Obnovení jednoho soukromého klíče od jeho veřejného protějšku zpětně odhaluje každé sdílené tajemství, které klíč kdy vytvořil.

Hrozba, kterou toto vytváří, není odložena, dokud takový stroj neexistuje. Nepřítel s úložištěm může dnes zaznamenat šifrovací text a dešifrovat jej, kdykoliv schopnost dorazí. Cokoliv, co je nyní odesláno, které ještě záleží, je již kompromitováno.

1.1 Otázky, na které tento článek odpovídá

Změna je dobře srozumitelná: spustit post-kvantový klíč encapsulace mechanismus vedle klasické výměny, takže útočník musí přerušit obě číst cokoliv.FIPS 203To okamžitě vyvolává distribuční problém:

Otázka

Přidejte post-kvantovou výměnu a potřebujete druhou – její ML-KEM veřejný klíč.

NPUB je samoobsahující. Můžete jej napsat na papír, nahlas si jej přečíst nebo skenovat z obrazovky, a to je vše, co vám někdo potřebuje zašifrovat. ML-KEM-768 veřejný klíč je 1,184 bajtů. Nelze jej nahlas číst, nezapadá do uživatelského jména a nepatří do QR kódu vedle identity, která je jen 32 bajtů.

Těžší částí je, že druhý klíč přináší tři odlišné problémy a zbytek tohoto článku je do značné míry odpovědí na ně:

2Designové omezení

Čtyři omezení utvářela odpověď, a oni vyloučit většinu zřejmých návrhů před psaním jakéhokoli kódu.

  1. Co nejméně tajemství. Každý další tajemství je jiný způsob, jak ztratit svou historii, a někdo, kdo ví, jak zálohovat nsec, nebude vědět, jak zálohovat nic jiného. oddíl 3.1 ukazuje, že tento nemůže být splněn přímo - post-kvantový klíč odvozený z nsec neposkytuje žádnou post-kvantovou ochranu vůbec - takže design tráví přesně jedno tajemství a nic víc: jediný kus klíčového materiálu, generovaný jednou za identitu, prezentovaný ve stejné podobě jako nsec a na stejném místě, takže každý, kdo ví, jak udržet jeden, ví, jak udržet druhý. oddíl 10.1 je upřímný o tom, co to stále stojí.
  2. Žádná autorita Neexistuje žádný server, který by mohl být důvěryhodný, aby řekl, který klíč patří komu.
  3. Mnoho zařízení, jedna identita Bez ohledu na to, jaký klíčový materiál existuje, musí skončit identický na všech, a cesty, které ho tam nesou, nemusí být samy čitelné nepřítelem, proti kterému se funkce brání.
  4. Žádné vyjednávání Jakákoli výměna v pásmu “které cifry podporujete?” je povrch, který útočník může vytáhnout, aby donutil slabší možnost.

3Nezávislé kořenové tajemství

Rozhodnutím, které nese zátěž, je, že klíč k dekapsulaci ML-KEM je zasazen z klíčového materiálu, který žádná veřejná hodnota nevystavuje.

pqRoot   = 32 bytes from a CSPRNG, generated ONCE per identity

seed     = HKDF-Expand(
               HKDF-Extract(salt = "nym-pq-root-v2", IKM = pqRoot),
               info = "mlkem768/epoch/" || epoch,
               64 bytes)

(ek, dk) = ML-KEM-768.KeyGen(seed)

Kořen je uživateli prezentován způsobem nsec: Beč32 s lidsky čitelným prefixem nympqProto se čte jako nympq1…, zobrazený vedle nsec na obrazovce identity za stejnou interakcí odhalení, kopírovaný se stejným ovládacím prvkem, nikdy přihlášený a nikdy odeslán nikam v jasném.Není to heslo a není to přihlášení.Je to klíčový materiál, který může uživatel uložit, přesně jako nsec.

Sůl je záměrně oddělená doménou, takže žádné jiné tajemství nemůže nikdy odvodit stejný klávesový pár. epoch Zpětná vazba na motory (§ 9 odst.

3.1 Proč klíč nemůže být odvozen od klíče totožnosti

Očividným designem je zasít klávesový pár z tajemství, které uživatel již má:

seed = HKDF(salt = "…", IKM = nsec)          // do not do this

Je to atraktivní ze čtyř důvodů, z nichž všechny jsou skutečné: nic nového k zálohování, protože nsec je již zálohou; každé zařízení, které souhlasí s konstrukcí, bez synchronizačního protokolu, aby šlo špatně; jedno nahraditelné oznámení na identitu je zjevně správné, protože zařízení nemohou nesouhlasit s klíčem; a klíč existující předtím, než je někdy zveřejněn, takže klient může něco zapečetit sám.

Všechny čtyři výhody jsou bezcenné, z jednoho důvodu. Shorův algoritmus běží proti publikovanému npub vydává nsec. Derivace semen je veřejný algoritmus nad nsec. Takže soupeř, který rozbije klasickou polovinu, rekonstruuje post-kvantovou polovinu spuštěním stejného HKDF, který běží každý jiný. Proti sklizni-nyní-dešifrovat-později - jediná hrozba, že funkce existuje, aby se zastavil - klíč odvozený tímto způsobem nepřidává nic.

Pravidlo vše vyplývá z

Dekapsulační klíč ML-KEM musí pocházet z entropie, která není ani odvozená z nsec, ani nikdy přenášená pod klasickým pouze šifrováním.

Nezávisle generované tajemství, které je pak synchronizováno mezi zařízeními uživatele uvnitř běžné zprávy NIP-44, je stejným selháním s dalšími kroky: soupeř zaznamená tuto zprávu dnes a později obnoví svůj klasický klíč a kořen vypadne.

3.2 Získání kořene do ostatních zařízení uživatele

Omezení 3 oddílu 2 – jedna identita, několik zařízení – nelze zde uspokojit aritmetikou, protože celým bodem je, že klíč není funkcí něčeho, co zařízení již sdílejí. nympq1… Samotný kód

Kořen je zobrazen jako nympq1… vedle nsec, a druhé zařízení přijímá vložené do stejného panelu. To je celý mechanismus. Zařízení, které nebylo dáno kód nemůže účastnit, což je popsáno v bodě 4.2.

Pravidlo v oddíle 3.1 říká, že kořen nemůže nikdy cestovat pod klasickým pouze šifrováním, a každý mechanismus, který by to automatizoval – synchronizace prostřednictvím relé, zabalení do identitního klíče – porušuje přesně to.

Formát ponechává prostor pro zabalenou cestu: záznam může nést seznam obalů, každý z nich AEAD blob pod klíčem, který uživatel může reprodukovat na jiném zařízení - například passkey PRF výstup. nympq1… Kód je jediný způsob, jak projít. Oddíl 10.1 uvádí, kolik to stojí.

Samotný záznam žije ve své kategorii nastavení, nymchat-pq-rootDokonce i bez obalu dělá nezbytnou práci: jeho přítomnost je způsob, jakým druhé zařízení zjistí, že tato identita již má kořen, což je to, co ji zastavuje od vytváření soupeře (oddíl 3.3).

Návrhová poznámka: jedna kategorie, která nemůže používat nový klíč

Tyto nymchat-pq-root Kategorie musí ne Tento řádek nese jedinou kopii kořene, takže zapečetění pod klíčem odvozeným od kořene je zámkem, jehož klíč je uvnitř krabice: žádné zařízení by ho nikdy nemohlo otevřít, včetně toho, který ho napsal. Je zapečetěn klasicky - NIP-44 sám o sobě - nebo vůbec ne.

Každá jiná kategorie nastavení může a měla by používat klíč odvozený od kořene.Toto je jediná výjimka a je to výjimka o kruhovosti spíše než o síle.

3.3 Generace a adopce

Na spuštění, držení trvalé identity, klient pracuje v tomto pořadí:

  1. Hledejte stávající nymchat-pq-root a rekordů.
  2. Nalezený záznam a toto zařízení ho může odemknout - přijmout ji a oznámit tuto identitu jako post-kvantovou schopnost.
  3. Nalezený záznam a toto zařízení ho nemůže odemknout - nevytvářejte nový kořen a nezveřejňujte žádné oznámení.Proste uživatele, aby toto zařízení propojil zadáním nympq1… Kód z zařízení, které ho již má.
  4. Žádný rekord — vytvořit kořen, zveřejnit záznam, oznámit a zobrazit nympq1… Používá se pouze jeden uživatel, aby si ho mohl uložit.

Krok 3 je krokem, který se snadno mýlí, a to je důvod, proč je pořadí zapsáno spíše než ponecháno na každou implementaci.Dva zařízení, která se každá rozhodne generovat kořen, produkují dva nezávislé kořeny pod jednou identitou, a to je selhání, které toto pořadí existuje, aby se zabránilo.

4Oznámení o schopnosti

Veřejná polovina derivátového klíčového páru je zveřejněna jako adresovatelná MŠ-01 událost — typ 30078, označený nym-pq:

{
  "kind": 30078,
  "tags": [
    ["d", "nym-pq"],
    ["t", "nym-pq"],
    ["expiration", "<unix seconds>"]
  ],
  "content": {
    "v":     2,
    "alg":   "mlkem768",
    "nym":   1,
    "epoch": 0,
    "pk2":   "<base64url ML-KEM-768 encapsulation key>",
    "exp":   <unix seconds>,
    "devices": [ ... ]
  }
}

Adresovatelné znamená, že relé drží jednu událost na (kind, pubkey, d-tag), takže republice nahrazuje předchozí oznámení na místě.Každá identita proto má přesně jeden aktuální záznam, což je to, co dělá Alice's key&rdquo; jediný jednoznačný úlovek spíše než seznam, který je třeba smířit.

Podpis je závazný. Událost je podepsána identitním klíčem, takže tvrzení &ldquo;tento klíč ML-KEM patří k tomuto npub&rdquo; je přesně tak silné jako npub sám.

Oznámení vyprší Sedmý den NIP-40 Vypršení platnosti, znovu zveřejněné každých 24 hodin, udržuje v záznamu prohlášení o klientovi, který stále běží, spíše než ten, který býval.

Zmeškané oznámení se čte přesně jako oznámení, které nikdy nemělo klíč: protějšky posílají obyčejný NIP-44, který může číst každé přihlášení, a klient pokračuje v post-kvantové výměně na svém dalším připojení, když se znovu zveřejní.Takže ticho po dobu delší než týdne stojí ochranu zpráv odeslaných během mezery - jsou klasicky šifrovány spíše než kvantově odolné - a nestojí nic jiného.Doručení není ovlivněno, nic, co již bylo obdrženo, se stává nečitelným a při návratu není zapotřebí žádné akce.

Bez jednoho záznam přežije klíč, který nazývá: zařízení, které je vymazáno, resetováno nebo má jeho kořen nahrazen, zanechává stálý pokyn, aby se zapojilo do klíče, který už nikdo nemá, a zprávy zaslané pod ním jsou ztraceny bez chyby na obou stranách.

Klíčové pole jmenuje svůj formát. Pole je pk2, a číslice je součástí smlouvy spíše než dekorace: jmenuje formát užitečného zatížení, se kterým může být klíč použit. Čtenář, který nerozpozná pole, uzavírá klient &ldquo;Nymchat, žádný post-kvantový klíč&rdquo; a odesílá obyčejný NIP-44, který může číst každé přihlášení. To je správný směr selhání a stojí za to uvést jako pravidlo, že formátové číslování existuje k prosazení: neuznané nároky na schopnosti musí stát ochranu, nikdy dodání. Klíč, který peer nemůže použít, je horší než žádný klíč vůbec, protože zpráva, kterou produkuje, je ztracena bez chyby na obou stranách

4.1 Absence je smysluplná a tříhodnotná

Subtilní, ale důležitý detail: oznámení je zveřejněno každým klientem Nymchat, nejen těmi, kteří jsou schopni post-kvantové, a klíčové pole je volitelné.

pozorovánProstředekPosílejte chování
Oznámení s klíčem Nymchat, post-kvantová schopnost Hybridní
Oznámení, bez klíče Nymchat, klasické pouze – post-kvantové vypnutí, nebo zařízení, které ještě není spojeno s kořenem identity Klasický NIP-17
Žádné oznámení Neznámý klient. Může to být jakýkoliv uživatel Nostr nebo Bitchat Klasický, plus kompatibilní obal

Oznámení bez klíče je podepsané prohlášení, že odesílatel spouští Nymchat, což umožňuje odesílací cestě vynechat spekulativní obal křížového protokolu, který by jinak musel zahrnovat pro každého, koho nemůže identifikovat.

4.2 Zařízení, které nemůže otevřít kořen, mlčí

Oznámení je nahraditelné: jedna událost na identitu, poslední písemné vítězství.To je to, co dělá design jednoho záznamu pracovat, a to je také to, co dělá nepřipojené zařízení nebezpečné, pokud publikuje.

Takže zařízení, které zná kořen existuje, ale nemůže ho otevřít, zveřejňuje žádné oznámení vůbec.Není rozbité a není zamčené z aplikace: stále čte každou zprávu, pro kterou má klíče a stále odesílá klasicky, zatímco vyzývá uživatele, aby ji propojil.Mlčení je správné chování pro zařízení, které nemůže mluvit o identitě.

5Objev a rozhodnutí o odeslání

Zákazníci se učí klíče vrstevníků dvěma způsoby. Stálé předplatné pokrývá lidi, se kterými uživatel skutečně odpovídá – otevřené konverzace a členové skupiny – takže jejich oznámení přicházejí jako běžné události. Pro vrstevníka, který se poprvé setkal, jednorázová dotaz běží v době odesílání, omezené na 2,5 sekundy; pokud to nevyřeší, zpráva se stává klasickou, což je chování, které existovalo před přidáním post-kvantového, spíše než nový režim selhání.

Uživatel, který připojí nové zařízení nebo přejde z přihlašovacího prohlížeče k místnímu klíči, se stává post-kvantově schopným uprostřed konverzace a trvale vyrovnaný &ldquo;no&rdquo; by je udržel na klasickém šifrování po celý život oznámení.

5.1 Proč neexistuje žádný downgrade útok

Rozhodnutí o směrování se omezuje na jednu otázku:

pq = (we hold a signed, unexpired ML-KEM key for this recipient)

Neexistuje žádná vyjednávání o schopnostech, žádný seznam podporovaných algoritmů a žádné pole, které by útočník nemohl vyčistit, aby vynutil slabší cestu. je Neúspěšný režim zbaveného nebo zdrženého oznámení je, že zpráva je klasická - status quo před touto funkcí - spíše než že hybridní zpráva je snížena na něco falešného.

Konverze také drží a je důležitější: zákazník posílá hybrid Pouze když drží klíč a držení klíče je důkazem, že příjemce může decapsulovat.Neexistuje žádný stav, ve kterém je zpráva posílána post-kvantově někomu, kdo ji nemůže číst.

6Hybridní konstrukce

Nezměněný NIP-44 šifrovací text je vnitřní vrstva a ML-KEM klíče vnější AEAD kolem ní:

inner = nip44_encrypt(plaintext, conversation_key(sender, recipient))

info  = "nymchat-pq2" || sender_secp_pk || recip_secp_pk || kem_ct || recip_kem_pk
prk   = HKDF-Extract(salt = "nymchat-pq2-v1", IKM = kem_ss)
key   = HKDF-Expand(prk, info || "key",   32)
nonce = HKDF-Expand(prk, info || "nonce", 12)

outer = ChaCha20-Poly1305(key, nonce, plaintext = inner, aad = info)

payload = "pq2." || base64url(kem_ct) || "." || base64url(outer)

Obě tajemství musí být stále obnovena k přečtení zprávy: vnější vrstva vydává pouze šifrovací text NIP-44, a otevření, které potřebuje klasický ECDH. Kvantový protivník, který rozbije secp256k1, dostane vnitřní klíč a stále čelí ML-KEM; přerušení ML-KEM roztrhne vnější vrstvu a zanechá NIP-44 stát.

Klíč ML-KEM příjemce je dlouhotrvající, ale každá zpráva nese nezávislý šifrovací text a tudíž nezávislý šifrovací text. kem_ssTo je to, co dělá odvození nonce spíše než randomizovat to zní: ChaCha20-Poly1305 Příslušenství je rozbitý opětovným použitím páru (klíč, nonce) a zde je klíč sám pro každou zprávu nový, takže žádný pár se nemůže opakovat.

6.1 Proč vrstvy zůstávají odděleny

Alternativou je smíchat obě tajemství do jediného klíče konverzace a předat to NIP-44:

ck = HKDF-Extract(salt = "…",
                  IKM  = ecdh_x || kem_ss || …)          // do not do this

Tato konstrukce zní jako kryptografie. Má jeden strukturální problém: potřebuje ecdh_x, surový x-koordinát výstupu ECDH, jako klíčový materiál - a rozšíření prohlížeče (NIP-07) nebo vzdálený podpis (NIP-46Vykonává NIP-44 jménem volajícího a vrací šifrovací text, což je celý bod držení klíče někde, kam aplikace nemůže dosáhnout.

Míchání tajemství proto vylučuje každé přihlášení, které drží identitní klíč v signatáři, což znamená nejpozornější uživatele, a žádné množství práce na klíčovém derivátu ho nemůže změnit. vrstvení odstraňuje závislost: NIP-44 zůstává celá a je produkována tím, co drží identitní klíč, signatář zahrnutý, zatímco polovinu KEM se počítá z obnovovacího kódu, který klient drží přímo.

Náklady jsou šířka pásma, a to není malé. šifrovací text ML-KEM je 1,088 bajtů a jezdí na každé zprávě, base64url-kódován na 1,451 znaků; vnější AEAD přidává 16-byte Poly1305 tag a rozšiřuje NIP-44 užitečné zatížení, které obaluje o třetinu. 50-charakterová zpráva roste z 176 bajtů na 1,712, a 2000-charakterový jeden z 2,820 na 5,238.

6.2 Self-deskriptivní payloads

Tyto pq2. Prefix dělá nasazení inkrementální: je to samoopisující, takže klient si vybere cestu dešifrování tím, že zkontroluje užitečné zatížení spíše než tím, že důvěřuje značce nebo si pamatuje, co peer podporuje. čtenář, který nepozná předponu, nedokáže otevřít toto užitečné zatížení spíše než ho špatně přečíst, a zprávy zapečetěné před oběma stranami by mohly post-kvantově zůstat čitelné jako obyčejný NIP-44 bez migrace.

Implicitní odmítnutí

Dekapsulace ML-KEM je navržena tak, aby nikdy neuspěla: vzhledem k malformovanému šifrovacímu textu, transformace Fujisaki-Okamoto vrací deterministické pseudo-náhodné tajemství spíše než omyl. Nesprávný klíč proto na vrstvě KEM vůbec nevzniká – objevuje se jako selhání HMAC uvnitř NIP-44, což je stejným způsobem jako špatné klasické klíčové povrchy. Volající zacházejí s oběma stejným způsobem, takže selhání nemá žádný rozlišovací signál. To je také to, co dělá kandidátský seznam v oddíle 9.1 funkční: klient zkouší každý klíč zase a nechá NIP-44 říct, který z nich byl správný.

6.3 Obě vrstvy dárkového obalu

A NIP-17 Soukromá zpráva A NIP-59 dárkový obal: nepodepsaný zvyk, zapečetěný pod identitním klíčem odesílatele (typ 13), poté zabalený pod klíčem vytvářeným na zprávu (typ 1059).Na přihlášení, které přímo drží identitní klíč, Nymchat hybridizuje obě vrstvy, z nichž každá má svou vlastní enkapsulaci.

A hybrid NIP-59 gift wrap: the rumor sealed under the sender's key, that seal wrapped under a per-message ephemeral key, both layers carrying a NIP-44 ciphertext inside a post-quantum AEAD. kind 1059 — wrap  ·  signed by a per-message ephemeral key content = pq2.<kem_ct>.<aead>   inner = NIP-44(eph, recip)   outer key = ML-KEM(recip) kind 13 — seal  ·  signed by the sender's identity key content = pq2.<kem_ct>.<aead>   inner = NIP-44(sender, recip)   outer key = ML-KEM(recip) rumor — unsigned the message: kind, content, tags, author pubkey unsigned on purpose — a signature would be portable proof
Obě šifrovací vrstvy jsou hybridní, každá s nezávislou ML-KEM encapsulací. Vnější vrstva je klíčována k hromadnému tajemství, takže obal neodhalí odesílatele.

Přihlášení signatáře dostane pouze vnější vrstvu. Pečeť je produkována signatářem jako obyčejný NIP-44 – aplikace nikdy nevidí klíč, který ji vytváří – takže nemůže být hybridizována na místě. To nestojí nic proti dotyčnému útoku: pečeť je dosažitelná pouze prostřednictvím obalu a pečeť je to, co záznamník ukládá.

7Skupinové zprávy a částečné pokrytí

Skupinová zpráva není jedním šifrovacím textem. Jedná se o stejný jednoduchý text vydaný každému členovi, každá kopie je vkapslována do vlastního klíče ML-KEM tohoto člena. Člen, který publikoval klíč, dostane hybridní obal; člen, který nemá klasický obal.

To vytváří účetní problém, který naivní implementace dostane špatně. Pokud osm z deseti členů obdrží hybridní kopii, zpráva je ne Protihráč potřebuje jednu klasickou kopii čistého textu, která je identická ve všech deseti, takže zpráva je chráněna pouze tehdy, pokud každý Je to kopie.

Nymchat proto sleduje pokrytí na zprávu během fan-outu - počet je známý pouze v době, kdy jsou obaly postaveny - a značka uvádí &ldquo;kvantovou odolnost vůči 8 z 10 členů&rdquo; namísto tvrzení, že zpráva je chráněna. přijaté skupinová zpráva (pouze odesílatel počítá fan-out), rozhraní hlásí částečnou spíše než úplnou ochranu.

7.1 Co štít hlásí

Štít říká pravdu o Poselstvía ne o softwaru, který ho poslal:

Rozsudek je zaznamenán, když je zpráva zapečetěna spíše než rekapitulována z toho, co peer inzeruje později.Cypertext, který již existuje, nemůže být lépe chráněn, než to bylo, a rozhraní, které přetvořilo staré zprávy o síle nového oznámení, by tvrdilo něco falešného o bajtech na přenosu.

Skupinová pravidla na vrcholu hromady spíše než nahrazují: skupinová zpráva je plně chráněna pouze tehdy, když byla kopie každého člena, a přijatá skupinová zpráva bez počtu pokrytí se zobrazí částečně.

8Kopie adresované sami sobě

Několik věcí, které klient ukládá, jsou zašifrovány na vlastní identitu uživatele: synchronizovaná nastavení, seznam konverzací, klíče skupiny a archiv zpráv. Tyto obsahují více informací o uživateli než většina jednotlivých zpráv, takže jejich ponechání v klasice by je učinilo nejslabším uloženým artefaktem bez ohledu na to, jak pečlivě byly samotné zprávy zapečetěny. nymchat-pq-root Samotná kategorie, která nemůže být zapečetěna pod klíčem, který může vytvořit pouze ona sama.

Nastavení blob nebo archivní řádek sedí na jednom místě po mnoho let, což je přesně tvar věci, kterou sběr-nyní-dešifrovaný-později soupeř shromažďuje - mnohem více než jakákoli jediná zpráva, která je alespoň ephemeral v vlastní mysli uživatele.

Jedno omezení zde upravuje formát spíše než klíč. Samostatně adresovaná kopie musí být čitelná každý zařízení na účtu, takže každé zařízení inzeruje to, co může otevřít v seznamu jeho oznámení nese, a účet píše pouze to, co všichni mohou číst.

Omezení, které stojí za zmínku

Zařízení, které drží identitu, ale ne kořen, nemůže otevřít nic zapečetěného na klíč odvozený od kořene, včetně jeho vlastních nastavení.To je úmyslný důsledek, nikoliv dohled, a to je důvod, proč má sekce 3.3 takové zařízení pro propojení namísto vytváření čerstvého kořene: druhý kořen by neudělal blob čitelný, rozdělil by pouze klíčový materiál identity na dvě části.

Zařízení, které provozuje rozšíření prohlížeče nebo vzdálený signatář (NIP-46), nemá nsec, ze kterého by mohlo být odvozeno, ale vlastně drží kód obnovy, a pod vrstvenou konstrukcí oddílu 6.1 to je vše, co post-kvantová polovina potřebuje: signatář produkuje vrstvu NIP-44 tak, jak má vždy, a klient klíče na vnější vrstvu sama.

9rotace

Tyto epoch Číslo v derivátu je to, co umožňuje rotaci bez nového klíčového materiálu. Zvýšením získává nový klíčový pár ze stejného kořene a znovu zveřejněné oznámení; protějšky vyzvednou nový klíč z nahraditelného záznamu. rotace proto nepožaduje, aby uživatel něco napsal podruhé: kořen je generován jednou za identitu a epocha dělá obrat.

9.1 Staré epochy jsou uchovávány a nic není znovu šifrováno

Klient vytváří kandidáty na dešifrování z aktuální epochy do epochy &minus; 3, takže zpráva zapečetěná krátce před otočením se stále otevírá proti klíčovému páru, který byl aktuální, když byl odeslán.

To je to, co dělá rotaci vůbec bezpečnou: bez ní by každá rotace zničila cokoliv, co bylo v letu. Vše, co již bylo zapečetěno, zůstává čitelné po celý život totožnosti, protože zpráva, kterou uživatel již nemůže otevřít, je pro ně přísně horší než ta, jejíž ochranu nelze zpětně zlepšit (oddíl 10.5).

10Co tím nechrání

Papír, který uvádí pouze to, co design dosahuje, nepopisuje systém a přehánění bezpečnostní vlastnosti v rozhraní je horší než vynechání.

10.1 Kořen je druhé tajemství a jeho ztráta je nenávratná

To je skutečná cena designu. Omezení v oddíle 2, že uživatel by měl mít přesně jednu věc k uchování, nemůže být splněno: nsec sám o sobě nerekonstruuje post-kvantový klíč, protože celým bodem je, že žádná veřejná hodnota a žádné jiné tajemství ji nevystavuje. Pokud žádné zařízení nemá kořen a žádné z obalů v oddíle 3.2 nelze otevřít, materiál zapečetěný na kořenový klíč není obnovitelný.

Při manuálním přenosu jedinou cestou, to je ostřejší, než to může nejprve číst. nympq1… kód kdekoliv má přesně jednu kopii, na jednom zařízení, a ztráta tohoto zařízení ztrácí každou post-kvantovou zprávu, nastavení blob a archivní řádek zapečetěný na něj. nsec Nepomáhá; to je vlastnost, na které spočívá celý design.

Útočník zaútočí na nejlevnější dostupnou cestu, takže schéma stojí za to, co stojí jeho nejslabší cesta obnovy - pamětná passphrase by například dala celou věc na to, co passphrase stojí, a zabalený řádek je přesně artefakt, který zbere a rozšifruje pozdější soupeř offline ve volném čase.

10.2 Ověřování, odlišné od důvěrnosti

Každý podpis v Nostr je Schnorr nad secp256k1, a to je zde nezměněno. Soupeř s kvantovým počítačem by mohl padělat podpisy a předstírat uživatele v reálném čase. Co hybridní výměna klíčů porazí je sklizeň-nyní-dekrypt-později: útočník zaznamenávající provoz dnes nemůže číst později. To nedělá zprávu neodpustitelnou proti soupeři, který již má stroj. Toto rozlišení je přenášeno do aplikací záměrně - ukazatel padlock hlásí autentizaci, štít hlásí důvěrnost a jsou to oddělené glyfy, protože zpráva může mít jednu bez druhé.

Vázání mezi npubem a klíčem ML-KEM je podpisem secp256k1, takže soupeř, který je může padělat, může nahradit svůj vlastní klíč.

10.3 Metadata

Dárkový obal skrývá odesílatele, příjemce nad rámec jediného p označení, typ a časový razítko vnitřní zprávy. Nezakrývá, že událost existuje, její velikost, nebo kdy ji relé obdržel.

10.4 Offline síť

Nymchat's Bluetooth mesh transport je samostatný protokol se svým vlastním rukojetí, a to není pokryta touto prací.

10.5 Už odeslané zprávy

Ciphertext zaznamenaný zatímco obě strany byly stále klasické zůstává klasické trvale. Již existuje a nemůže být znovu zapečetěn. Ochrana začíná na zprávě, kde obě strany držely post-kvantové klíče, ne v okamžiku, kdy byla funkce zapnuta.

11Zvažované alternativy

PřístupProč ne
Post-kvantový klíč odvozený od identitního klíče Derivace je veřejný algoritmus nad nsec, a kvantový soupeř získá nsec z publikovaného npub, takže rozbíjí klasickou polovinu rukou nad post-kvantovou polovinu s ním.
Odeslat kořen do ostatních zařízení uživatele přes NIP-44 Kořen přenášený pod klasickým šifrováním je obnovitelný každým, kdo zaznamenal tuto zprávu a rozbije její klíč později, což je nepřítel kořen existuje zastavit.
samostatně generovaný klávesový pár ML-KEM na každém zařízení Odmítnuté. Zařízení by držela různé decapsulační klíče, a jeden nahraditelný oznámení na identitu nemůže nést všechny. Peers by šifrovat na který klíč byl zveřejněn naposledy, a každé jiné zařízení by nebylo schopno číst výsledek.
Vložte kořen pod PIN Čtyřmístný PIN je přibližně 13 bitů proti offline útočníkovi, který drží zabalený řádek.
Rozšiřte npub tak, aby přenášel oba klíče 1,184 bajtů není sdílený identifikátor, a to by přerušilo každý stávající Nostr klient analyzovat adresu, která je definována jako 32 bajtů.
Klíčové adresářové služby Reintroduce autority síť existuje, aby se zabránilo.Kdo odpovídá na vyhledávání rozhodne, kdo může číst zprávu.
Připojte klíč ke každé zprávě Neřeší nic: vysílač potřebuje Příjemce klíč před první zprávou, což je přesně případ bez předchozí zprávy, která by ji nesla.
In-band vyjednávací schopnosti Útočník, který může odtrhnout vlajku schopnosti, vynutí klasickou cestu.
Pouze post-kvantová, žádná klasická noha Odmítá desetiletí analýzy secp256k1 výměnou za mnohem mladší primitiv. obě a failu.

12Parita provádění

Nymchat dodává dvě nezávislé implementace této konstrukce – jednu v jazyce JavaScript pro webovou aplikaci, jednu v jazyce Dart pro mobilní aplikace, včetně portu ML-KEM-768.

Implementace Dart ML-KEM je validována proti oficiálnímu NIST ACVP Zpětná vazba na e-mailové adresy a e-mailové adresy (ML-KEM-*-FIPS203) – 25 klíčových generací, 25 případů encapsulace a 10 případů decapsulace, běžících jako jejich vlastní sada. To jsou vektory, které NIST publikuje k ověření implementace, takže jejich předání je důkazem toho, že port je správný, a ne jen důkazem toho, že se dva klienti navzájem souhlasí. Kromě toho je společná fixture zkušebních vektorů – derivace semen, encapsulace, oba formáty užitečného zatížení a kompletní dárkové obaly – generována z reference JavaScript a kontrolována oběma testovacími sady. Kořenové tajemství rozšiřuje tuto fixture namísto jejího nahrazení: kořen na semeno, kořen na klíčový pár, veřejný otisk kořene a odvozený klí nympq1… Divergence v obou implementacích selže budování spíše než produkuje zprávu, kterou druhý klient nemůže otevřít.

To je to, co říká zařízení &ldquo;toto je kořen, který držím&rdquo; od &ldquo;toto je jiný jeden&rdquo;, a klient, který nemohl reprodukovat otisk prstu jiného klienta, by četl dokonale dobrý záznam jako žádný záznam vůbec - a pak, po oddíle 3.3, min druhý kořen a rozdělil identitu.

Nymchat je Otevřený zdroj podle AGPL-3.0. zde popsané kryptografické jádro je js/nym-crypto.js a js/modules/pq.js na webové stránce klienta a lib/core/crypto/ s lib/features/identity/pq_registry.dart v mobilních klientech.

Pro stručnější, ne-technické vysvětlení viz Stránka znalostní základny o kvantově odolném šifrování.