Znalostná základňa: kvantovo odolné šifrovanie

Technický whitepaper

Post-kvantová kľúčová dohoda v Nymchate

Distribúcia verejných kľúčov ML-KEM-768 cez Nostr bez adresára alebo registra a ich zasiatie z tajomstva, ktoré žiadna verejná hodnota neodhalí.

Verzia 1.0 augusta 2026 Vzťahuje sa na Nymchat 3.74+

Pridanie post-kvantovej výmeny kľúčov do messengera nie je väčšinou problémom kryptografie. Primitívy sú štandardizované a knižnice existujú. Ťažká časť je, že každý účastník teraz potrebuje Druhý Tento článok popisuje, ako Nymchat odpovedá na to - odkiaľ druhý kľúč pochádza, ako sa dostane k ľuďom, ktorí ho potrebujú, a čo je rozhranie dovolené tvrdiť o výsledku - a v poslednej časti, čo tento výsledok nechráni.

1Problémom

Naše súkromné správy sú šifrované pomocou NIP-44, ktorý má dve oddeliteľné polovice. polovina, ktorá skrúti jednoduchý text – ChaCha20 s tagom HMAC-SHA256, kľúčom cez HKDF (RFC 5889- nie je zmysluplne ohrozený kvantovým počítačom; Groverov algoritmus stojí za zrýchlenie štvorcového koreňa proti symetrickému kľúču a 256 bitov to absorbuje. Súhlasí na kľúč je eliptická krivka Diffie-Hellman nad Špecifikácia: Secp256k1Získanie jedného súkromného kľúča od jeho verejného náprotivku spätne odhaľuje každé zdieľané tajomstvo, ktoré kľúč kedy vytvoril.

Hrozba, ktorú toto vytvára, nie je odložená, kým takýto stroj neexistuje. Nepriateľ s úložiskom môže zaznamenať šifrovací text dnes a dešifrovať ho vždy, keď príde schopnosť. Všetko, čo je teraz odoslané, čo ešte záleží, je už ohrozené. Toto je konkrétny útok, ktorý post-kvantová výmena kľúčov porazí, a to je dôvod, prečo práca nemôže čakať na to, kým sa stroj postaví.

1.1 Odpoveď na túto otázku

Zmiernenie je dobre pochopené: spustite post-kvantový kľúčový kapsulovací mechanizmus vedľa klasickej výmeny, takže útočník musí prerušiť oboje, aby čítal čokoľvek.FIPS 203To okamžite vyvoláva problém distribúcie:

Otázka

Pridajte post-kvantovú výmenu a potrebujete druhú – jej ML-KEM verejný kľúč.

NPUB je samoobsahujúci. Môžete ho napísať na papier, prečítať ho nahlas alebo skenovať z obrazovky a je to všetko, čo vám niekto potrebuje zašifrovať. ML-KEM-768 verejný kľúč je 1,184 bajtov. Nemôže sa čítať nahlas, nezapadne do užívateľského mena a nepatrí do QR kódu okrem identity, ktorá je len 32 bajtov.

Ťažšia časť je, že druhý kľúč prináša tri odlišné problémy a zvyšok tohto článku je do značnej miery odpoveďou na ne:

2Obmedzenia dizajnu

Štyri obmedzenia formovali odpoveď a vylučujú väčšinu zrejmých návrhov predtým, ako sa napíše akýkoľvek kód.

  1. Čo najmenej tajomstiev. Každý ďalší tajomstvo je iný spôsob, ako stratiť svoju históriu, a niekto, kto vie, ako zálohovať nsec, nebude vedieť zálohovať nič iné. Oddiel 3.1 ukazuje, že tento nemôže byť splnený priamo - post-kvantový kľúč odvodený z nsec neposkytuje žiadnu post-kvantovú ochranu vôbec - takže dizajn strávi presne jedno tajomstvo a nič viac: jediný kúsok kľúčového materiálu, generovaný raz za identitu, prezentovaný v rovnakej forme ako nsec a na rovnakom mieste, takže ktokoľvek vie, ako udržať jeden vie, ako udržať druhý.
  2. Žiadna autorita Neexistuje žiadny server, ktorému možno dôverovať, aby povedal, ktorý kľúč patrí komu.
  3. Mnohé zariadenia, jedna identita Akýkoľvek kľúčový materiál, ktorý existuje, musí skončiť identický na všetkých z nich a cesty, ktoré ho tam nesú, nesmú byť čitateľné pre protivníka, proti ktorému sa funkcia bráni.
  4. Žiadne rokovanie Akákoľvek výmena v pásme “ktoré šifre podporujete?” je povrch, ktorý môže útočník odtrhnúť, aby vynútil slabšiu možnosť.

3Nezávislé koreňové tajomstvo

Rozhodujúcim rozhodnutím je, že decapsulačný kľúč ML-KEM je zasadený z kľúčového materiálu, ktorý žiadna verejná hodnota nevystavuje.Každá identita dostane jedno koreňové tajomstvo, generované raz:

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)

Koreň je používateľovi prezentovaný spôsobom nsec: Beč32 s ľudsky čitateľným predponou nympqPreto sa číta ako nympq1…, zobrazený vedľa nsec na obrazovke identity za rovnakou interakciou odhaliť, skopírovaný s rovnakým ovládacím prvkom, nikdy prihlásený a nikdy odoslaný kdekoľvek v jasnom.

Soľ je zámerne oddelená od domény, takže žiadne iné tajomstvo nikdy nemôže odvodzovať rovnaký kľúč. epoch Prevádzkovateľ prepravného zariadenia (oddiel 9).

3.1 Prečo kľúč nemôže byť odvodený od kľúča identity

Zrejmým dizajnom je zasiať klávesový pár z tajomstva, ktoré už používateľ má:

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

Je to atraktívne zo štyroch dôvodov, z ktorých všetky sú skutočné: nič nové na zálohovanie, pretože nsec je už zálohou; každé zariadenie, ktoré súhlasí s konštrukciou, bez synchronizačného protokolu, aby sa pokazilo; jedno nahraditeľné oznámenie na identitu je zjavne správne, pretože zariadenia nemôžu nesúhlasiť s kľúčom; a kľúč existujúci predtým, než je kedy zverejnený, takže klient môže na prvý pohľad zapečať niečo pre seba.

Všetky štyri výhody sú bezcenné, z jedného dôvodu. Shorov algoritmus beží proti publikovanému npub prináša nsec. Vývod semien je verejný algoritmus nad nsec. Takže protivník, ktorý rozbije klasickú polovicu, rekonštruuje post-kvantovú polovicu spustením rovnakého HKDF, ktorý beží každý iný.

Pravidlo všetko vyplýva z

Dekapsulačný kľúč ML-KEM musí pochádzať z entropie, ktorá nie je ani odvoditeľná z nsec, ani nikdy prenášaná pod klasickým iba šifrovaním.

Nezávisle generované tajomstvo, ktoré sa potom synchronizuje medzi zariadeniami používateľa v rámci bežnej správy NIP-44, je rovnakým zlyhaním s ďalšími krokmi: protivník zaznamenáva túto správu dnes a neskôr obnoví svoj klasický kľúč a koreň vypadne.

3.2 Získanie koreňa na ostatné zariadenia používateľa

Obmedzenie 3 oddielu 2 – jedna identita, niekoľko zariadení – tu nemôže byť uspokojené aritmetikou, pretože celá vec je, že kľúč nie je funkciou čohokoľvek, čo zariadenia už zdieľajú. nympq1… Samotný kód

koreň je zobrazený ako nympq1… vedľa nsec a druhé zariadenie ho prijme vložené do toho istého panelu. To je celý mechanizmus. Zariadenie, ktorému nebol daný kód, sa nemôže zúčastniť, čo je popísané v časti 4.2.

Pravidlo v oddiele 3.1 hovorí, že koreň nemusí nikdy cestovať pod klasickým iba šifrovaním, a každý mechanizmus, ktorý by to urobil automatickým – synchronizáciou prostredníctvom relé, zabalením do identitného kľúča – porušuje presne to.

Formát ponecháva priestor pre zabalenú cestu: záznam môže niesť zoznam obalov, každý AEAD blob pod kľúčom, ktorý používateľ môže reprodukovať na inom zariadení - napríklad výstup PRF passkey. nympq1… Kód je jedinou cestou cez. Oddiel 10.1 uvádza, koľko to stojí.

Samotný záznam žije vo svojej kategórii nastavení, nymchat-pq-rootDokonca aj bez obalov to robí potrebnú prácu: jeho prítomnosť je, ako druhé zariadenie sa dozvie, že táto identita už má koreň, čo je to, čo zastavuje to, že mení konkurenčnú jednu (oddiel 3.3).

Návrhová poznámka: jedna kategória, ktorá nemôže použiť nový kľúč

na nymchat-pq-root Kategória musí nie Tento riadok nesie jedinú kópiu koreňa, takže zapečatenie pod kľúčom odvodeným od koreňa je zámok, ktorého kľúč je vo vnútri krabice: žiadne zariadenie ho nikdy nemohlo otvoriť, vrátane toho, ktorý ho napísal. Je zapečatený klasicky - NIP-44 sám o sebe - alebo vôbec nie.

Každá iná kategória nastavení môže a mala by používať koreňový odvodený kľúč. Toto je jediná výnimka a je to výnimka týkajúca sa kruhovosti namiesto sily.

3.3 Generácia a adopcia

Na spustenie, držať trvalú identitu, klient pracuje v tomto poradí:

  1. Hľadajte existujúcu nymchat-pq-root a rekordov.
  2. Nájdený záznam a toto zariadenie ho môže odomknúť - prijať ju a vyhlásiť túto identitu ako post-kvantovú schopnosť.
  3. Nájdený záznam a toto zariadenie ho nemôže odomknúť - nevytvárajte nový koreň a vôbec nezverejňujte žiadne oznámenie.Pomôžte používateľovi prepojenie tohto zariadenia zadaním nympq1… Kód z zariadenia, ktoré ho už má.
  4. Žiadny rekord — vytvoriť koreň, publikovať záznam, oznámiť a zobraziť nympq1… kód pre používateľa raz, aby ho mohli uložiť.

Krok 3 je krok, ktorý je ľahké sa mýliť, a to je dôvod, prečo je poradie napísané, a nie ponechané na každú implementáciu.Dve zariadenia, ktoré sa každá rozhodne vytvoriť koreň, produkujú dva nezávislé korene pod jednou identitou, a to je zlyhanie, ktoré toto poradie existuje, aby sa zabránilo.

4Oznámenie o schopnostiach

Verejná polovica odvodeného klávesového páru je publikovaná ako adresovateľná Nízka-01 udalosť — 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": [ ... ]
  }
}

Adresovateľné znamená, že relé uchováva jednu udalosť na (kind, pubkey, d-tag), takže republika nahrádza predchádzajúce oznámenie na mieste.Každá identita preto má presne jeden aktuálny záznam, čo je to, čo robí Aliceho kľúč &rdquo; jediný jednoznačný úlovok namiesto zoznamu, ktorý sa má zmieriť.

Podpis je záväzný. Udalosť je podpísaná identitným kľúčom, takže tvrdenie &ldquo;tento ML-KEM kľúč patrí k tomuto npub&rdquo; je presne tak silný ako npub sám. Nahradenie iného encapsulácie kľúč vyžaduje vytváranie secp256k1 podpis. Útočník, ktorý to môže urobiť, sa nemusí trápiť s KEM.

Oznámenia sa končia. Sedemnásť dní NIP-40 Vypršanie platnosti, opätovne publikované každých 24 hodín, uchováva v zázname vyhlásenie o klientovi, ktorý stále beží, a nie o tom, ktorý bol predtým.

Zmeškané oznámenie sa číta presne ako oznámenie, ktoré nikdy nemalo kľúč: rovesníci posielajú obyčajný NIP-44, ktorý môže čítať každé prihlásenie, a klient obnoví post-kvantovú výmenu na svojom ďalšom pripojení, keď sa znovu zverejní. Takže ticho dlhšie ako týždeň stojí za ochranu správ odoslaných počas medzery - sú klasicky šifrované namiesto kvantovo odolných - a nestojí nič iné. dodanie nie je ovplyvnené, nič už prijaté sa stáva nečitateľným a pri návrate nie je potrebné žiadne opatrenie.

Bez jedného záznam prežíva nad kľúčom, ktorý nazýva: zariadenie, ktoré je vymazané, resetované, alebo má jeho koreň nahradený, zanecháva stály pokyn na zapínanie do kľúča, ktorý už nikto nemá, a správy odoslané pod ním sú stratené bez chyby na oboch stranách.

Kľúčové pole nazýva svoj formát. Pole je pk2, a číslica je súčasťou zmluvy namiesto dekorácie: nazýva formát užitočného zaťaženia, s ktorým môže byť kľúč použitý. Čitateľ, ktorý nerozpozná pole, uzavrie klient &ldquo;Nymchat, žiadny post-kvantový kľúč&rdquo; a odošle obyčajný NIP-44, ktorý môže čítať každý prihlasovateľ. To je správny smer zlyhania a stojí za to uviesť ako pravidlo, že formátové číslovanie existuje na presadzovanie: neuznané nároky na schopnosti musia stáť ochranu, nikdy doručenie. Kľúč, ktorý nemôže peer použiť, je horší ako žiadny kľúč vôbec, pretože správa, ktorú produkuje, je stratená bez chyby na oboch stranách.

4.1 Absencia je zmysluplná a trojnásobná

Subtilný, ale dôležitý detail: oznámenie uverejňuje každý klient Nymchat, nielen tí, ktorí sú schopní post-kvantovej, a kľúčové pole je voliteľné.

pozorovaťProstriedkyPoslať správanie
Oznámenie s kľúčom Nymchat, post-kvantová schopnosť Hybridný
Oznámenie, žiadny kľúč Nymchat, len klasické – post-kvantové vypnutie, alebo zariadenie, ktoré ešte nie je spojené s koreňom identity Klasický NIP-17
Žiadne oznámenie Neznámy klient. Môže to byť akýkoľvek používateľ Nostr alebo Bitchat Klasické, plus kompatibilný obal

Oznámenie bez kľúča je podpísané vyhlásenie, že odosielateľ prevádzkuje Nymchat, čo umožňuje odosielateľovi preskočiť cestu špekulatívneho krížového protokolu, ktorý by inak musel obsahovať pre každého, koho nemôže identifikovať.

4.2 Zariadenie, ktoré nemôže otvoriť koreň, mlčí

Oznámenie je nahraditeľné: jedna udalosť na identitu, posledné písanie vyhráva. To je to, čo robí dizajn jedného záznamu prácou, a to je tiež to, čo robí nespojené zariadenie nebezpečné, ak publikuje.

Takže zariadenie, ktoré pozná koreň existuje, ale nemôže ho otvoriť, nevydáva žiadne oznámenie vôbec.Nie je zlomené a nie je zamknuté z aplikácie: stále číta každú správu, pre ktorú má kľúče, a stále ju posiela klasicky, pričom vyzýva používateľa, aby ju prepojil.Ticho je správne správanie pre zariadenie, ktoré nemôže hovoriť o identite.

5Objavenie a rozhodnutie o odoslaní

Zákazníci sa učia kľúče rovesníkov dvoma spôsobmi. Stály predplatný pokrýva ľudí, s ktorými používateľ skutočne korešponduje – otvorené konverzácie a členovia skupiny – takže ich oznámenia prichádzajú ako bežné udalosti. Pre rovesníka, ktorý sa prvýkrát stretol, spustí sa jednorazový dotaz v čase odoslania, obmedzený na 2,5 sekundy; ak sa nevyrieši, správa sa stáva klasickou, čo je správanie, ktoré existovalo pred pridaním post-kvantového režimu namiesto nového režimu zlyhania.

Používateľ, ktorý prepojí nové zariadenie, alebo ktorý sa presunie z prihlásenia rozšírenia prehliadača na lokálny kľúč, sa stáva post-kvantovo schopným v polovici konverzácie a trvalo vyrovnaný &ldquo;no&rdquo; by ich udržal na klasickom šifrovaní po celý život oznámenia.

5.1 Prečo neexistuje žiadny downgrade útok

Rozhodnutie o smerovaní sa znižuje na jednu otázku:

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

Neexistuje žiadne vyjednávanie o schopnostiach, žiadny zoznam podporovaných algoritmov a žiadne pole, ktoré môže útočník odstrániť, aby vynútil slabšiu cestu. je Režim zlyhania odstráneného alebo zadržaného oznámenia je, že správa ide klasická - status quo pred touto funkciou - namiesto toho, aby sa hybridná správa znížila na niečo falošné.

Konverzia tiež drží a je dôležitejšia: klient posiela hybrid iba keď drží kľúč a držanie kľúča je dôkazom, že príjemca môže decapsulovať.Neexistuje žiadny stav, v ktorom sa správa posiela post-kvantovo niekomu, kto ju nemôže čítať.

6Hybridná konštrukcia

Nezmenený NIP-44 šifrovací text je vnútorná vrstva a ML-KEM kľúče vonkajšie AEAD okolo neho:

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)

Obidva tajomstvá musia byť stále obnovené na čítanie správy: vonkajšia vrstva produkuje iba šifrovací text NIP-44, a otvorenie, ktoré potrebuje klasický ECDH. Kvantový protivník, ktorý rozbije secp256k1, dostane vnútorný kľúč a stále čelí ML-KEM; prerušenie ML-KEM strihá vonkajšiu vrstvu a ponechá NIP-44 stáť.

Príjemcov ML-KEM kľúč je dlhotrvajúci, ale každá správa nesie nezávislý šifrovací text a preto nezávislý kód. kem_ssTo je to, čo robí odvodenie nonce namiesto randomizácie to znie: ChaCha20-Poly1305 Výrobca je prerušená opätovným použitím páru (kľúč, nonce) a tu je samotný kľúč pre každú správu nový, takže žiadny pár sa nemôže opakovať.

6.1 Prečo vrstvy zostávajú oddelené

Alternatívou je zmiešať obe tajomstvá do jedného konverzačného kľúča a odovzdať to NIP-44:

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

Táto konštrukcia znie ako kryptografia. Má jeden štrukturálny problém: potrebuje ecdh_x, surový x-koordinát výstupu ECDH, ako kľúčový materiál - a rozšírenie prehliadača (NIP-07) alebo vzdialený podpis (NIP-46Vykonáva NIP-44 v mene volajúceho a vráti šifrovací text, čo je celý bod držania kľúča niekde, kam aplikácia nemôže dosiahnuť.

Zmiešanie tajomstiev preto vylučuje každé prihlásenie, ktoré uchováva identitný kľúč v signatári, to znamená najpozornejších používateľov, a žiadne množstvo práce na derivácii kľúča ho nemôže zmeniť. vrstvenie odstraňuje závislosť: NIP-44 zostáva celá a je produkovaná tým, čo drží identitný kľúč, signatár zahrnutý, zatiaľ čo polovica KEM je vypočítaná z obnovovacieho kódu, ktorý klient drží priamo.

Náklady sú šírka pásma, a to nie je malé. šifrovací text ML-KEM je 1,088 bajtov a jazdí na každej správe, base64url-kódované na 1,451 znakov; vonkajší AEAD pridáva 16-byte Poly1305 tag a rozširuje NIP-44 užitočné zaťaženie, ktoré zahŕňa o tretinu. 50-charakterová správa rastie zo 176 bajtov na 1,712, a 2000-charakterová jedna z 2,820 na 5,238.

6.2 Self-popisujúce payloads

na pq2. Predvoľba robí nasadenie inkrementálnym: je to samoopisovanie, takže klient si vyberie cestu dešifrovania kontrolou užitočného zaťaženia namiesto dôveryhodnosti značky alebo zapamätania si toho, čo peer podporuje. čitateľ, ktorý nepozná predvoľbu, nedokáže otvoriť toto užitočné zaťaženie namiesto nesprávneho čítania a správy zapečatené pred oboma stranami by mohli post-kvantovo zostať čitateľné ako bežný NIP-44 bez migrácie.

Implicitné odmietnutie

Dekapsulácia ML-KEM je navrhnutá tak, aby nikdy nezlyhala: vzhľadom na deformovaný šifrovací text, transformácia Fujisaki-Okamoto vráti deterministické pseudo-náhodné tajomstvo namiesto chyby. Nesprávny kľúč preto na vrstve KEM vôbec nevzniká – objaví sa ako zlyhanie HMAC vo vnútri NIP-44, čo je rovnakým spôsobom ako nesprávne klasické kľúčové povrchy. Volajúci zaobchádzajú s oboma rovnakým spôsobom, takže zlyhanie neobsahuje žiadny rozlišovací signál. To je tiež to, čo robí kandidátsky zoznam sekcie 9.1 funkčným: klient skúša každý kľúč zase a nechá NIP-44 povedať, ktorý z nich bol správny.

6.3 Obe vrstvy darčekového obalu

A NIP-17 Osobná správa je a NIP-59 darčekový obal: nepodpísaná povesť, zapečatená pod identitným kľúčom odosielateľa (typ 13), potom zabalená pod hádzaný kľúč generovaný na správu (typ 1059). Na prihlásení, ktoré priamo drží identitný kľúč, Nymchat hybridizuje obe vrstvy, z ktorých každá má svoju vlastnú encapsuláciu.

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
Obe šifrovacie vrstvy sú hybridné, z ktorých každá má nezávislú encapsuláciu ML-KEM. Vonkajšia vrstva je zamknutá do tajomstva, takže obal neodhaľuje odosielateľa.

Prihlásenie signatára dostane iba vonkajšiu vrstvu. Pečať je produkovaná signatárom ako obyčajný NIP-44 - aplikácia nikdy nevidí kľúč, ktorý ho robí - takže nemôže byť hybridizovaný na mieste. To nestojí nič proti príslušnému útoku: pečať je dosiahnuteľná iba cez obal a obal je to, čo zaznamenávač ukladá.

7Skupinové správy a čiastočné pokrytie

Skupinová správa nie je jedným šifrovacím textom. Je to ten istý jednoduchý text, ktorý je vydaný každému členovi, každá kópia je zapustená do vlastného kľúča ML-KEM daného člena. Člen, ktorý publikoval kľúč, dostane hybridný obal; ten, ktorý nemá klasický obal.

To vytvára problém účtovníctva, že naivná implementácia sa mýli. Ak osem z desiatich členov dostane hybridnú kópiu, správa je nie Protivník potrebuje jednu klasickú kópiu jednoduchého textu, ktorá je identická vo všetkých desiatich, takže správa je chránená len vtedy, ak každý Kopírovanie je.

Nymchat preto sleduje pokrytie na správu počas fan-out - počet je známy len v čase, keď sa vytvárajú obaly - a značka hlásí &ldquo;kvantovo odolný na 8 z 10 členov&rdquo; namiesto toho, aby tvrdil, že správa je chránená. Prijaté skupinová správa (len odosielateľ počíta fan-out), rozhranie hlásí čiastočnú skôr než úplnú ochranu.

7.1 Čo štíty hlásia

Štít hovorí pravdu o Posolstvo, nie o softvéri, ktorý ho poslal:

Rozsudok je zaznamenaný, keď je správa zapečatená namiesto toho, aby bola recomputovaná z toho, čo peer inzeruje neskôr. šifrovaný text, ktorý už existuje, sa nemôže stať lepšie chránený, než bol, a rozhranie, ktoré prepracovalo staré správy na silu nového oznámenia, by tvrdilo niečo falošné o bajtoch na relé.

Pravidlá skupiny uvedené vyššie sú na vrchole tohto, namiesto toho, aby ho nahradili: skupinová správa je plne chránená iba vtedy, keď bola kópia každého člena, a prijatá skupinová správa bez počtu pokrytia sa zobrazí čiastočne.

8Kópie adresované sami sebe

Niekoľko vecí, ktoré klient ukladá, sú šifrované na vlastnú identitu používateľa: synchronizované nastavenia, zoznam konverzácií, skupinové kľúče a archív správ. Tieto prenášajú viac o používateľovi ako väčšina jednotlivých správ, takže ich ponechanie klasické by ich urobilo najslabším uloženým artefaktom bez ohľadu na to, ako starostlivo boli správy samotné zapečatené. Používajú rovnaký hybrid, vkapsaný do vlastného koreňového kľúča používateľa - s jednou výnimkou opísanou v oddiele 3.2, nymchat-pq-root Samotná kategória, ktorá nemôže byť zapečatená pod kľúčom, ktorý môže len vyrobiť.

Nastavenia blob alebo archívny riadok sedí na jednom mieste po celé roky, čo je presne tvar vecí, ktoré zbiera zber-teraz-dešifrovaný-neskôr protivník - oveľa viac ako akákoľvek jediná správa, ktorá je aspoň efemérna v mysli používateľa.

Jedno obmedzenie tu upravuje formát namiesto kľúča.Samoadresovaná kópia musí byť čitateľná každý zariadenie na účte, takže každé zariadenie inzeruje to, čo môže otvoriť v zozname, ktoré jeho oznámenie nesie, a účet píše len to, čo všetci môžu čítať.Písanie čokoľvek iného by zablokovalo zariadenie z jeho vlastných nastavení - rovnaký tichý zlyhanie Oddiel 3.2 sa vyhne inými prostriedkami, prichádzajúce z iného smeru.

Obmedzenie, ktoré sa oplatí uviesť

Zariadenie, ktoré má totožnosť, ale nie koreň, nemôže otvoriť čokoľvek zapečatené kľúčom odvodeným od koreňa, vrátane jeho vlastných nastavení.To je úmyselný dôsledok, nie dohľad, a to je dôvod, prečo časť 3.3 má takéto zariadenie na prepojenie namiesto vytvárania čerstvého koreňa: druhý koreň by neurobil blob čitateľný, rozdelil by len kľúčový materiál identity na dve časti.

Zariadenie, ktoré poháňa rozšírenie prehliadača alebo vzdialený signatár (NIP-46), nemá nsec, z ktorého by mohlo byť odvodené, ale vlastne drží kód obnovy, a pod vrstvenou konštrukciou oddielu 6.1 to je všetko, čo post-kvantová polovica potrebuje: signatár produkuje vrstvu NIP-44 tak, ako to vždy má, a klient kladie kľúč na vonkajšiu vrstvu.

9Rotácia

na epoch Počet v derivácii je to, čo robí rotáciu možnou bez nového kľúčového materiálu. Zväčšenie prináša nový kľúčový pár z rovnakého koreňa a opätovne publikované oznámenie; kolegovia vyzdvihnú nový kľúč z nahraditeľného záznamu.

9.1 Staré epochy sú zachované a nič nie je znovu šifrované

Klient vytvára kandidátov na dešifrovanie z aktuálnej éry až do epochy &minus; 3, takže správa zapečatená krátko pred rotáciou sa stále otvára proti páru klávesov, ktorý bol aktuálny, keď bol odoslaný.

To okno je to, čo robí rotáciu bezpečnou vôbec: bez nej by každá rotácia strhla čokoľvek, čo bolo v lete.Čokoľvek už zapečatené zostáva čitateľné po celý život identity, pretože správa, ktorú už používateľ nemôže otvoriť, je pre nich prísne horšia ako tá, ktorej ochranu nie je možné zlepšiť spätne (oddiel 10.5).

10Čo to nechráni

Papier, ktorý uvádza len to, čo dizajn dosahuje, nepopisuje systém a preceňovanie bezpečnostnej vlastnosti v rozhraní je horšie ako jej vynechanie.

10.1 Koreň je druhé tajomstvo a strata je nenávratná

Toto je skutočná cena dizajnu. Obmedzenie v oddiele 2, že používateľ by mal mať presne jednu vec, ktorú by mal udržať, nemôže byť splnené: nsec sám o sebe nerekonštruuje post-kvantový kľúč, pretože celá vec je, že žiadna verejná hodnota a žiadne iné tajomstvo ho nevystavuje. Ak žiadne zariadenie nemá koreň a žiadne z obalov oddielu 3.2 sa nedá otvoriť, materiál zapečatený na koreňový odvodený kľúč nie je obnoviteľný.

S manuálnym prenosom jedinou cestou, je to ostrejšie, než by sa mohlo najprv čítať. nympq1… kód kdekoľvek má presne jednu kópiu, na jednom zariadení, a strata tohto zariadenia stráca každú post-kvantovú správu, nastavenia blob a archívny riadok zapečatený na ňu. nsec nepomôže; to je vlastnosť, na ktorej spočíva celý dizajn.

Útočník útočí na najlacnejšiu dostupnú cestu, takže schéma stojí za to, čo stojí jej najslabšia cesta na obnovu - nezabudnuteľná heslo, napríklad, by dalo celú vec na čokoľvek heslo je hodnota, a zabalený riadok je presne artefakt, ktorý zbiera a brúsi offline v čase voľného času.

10.2 Overovanie ako odlišné od dôvernosti

Každý podpis v Nostr je Schnorr nad secp256k1, a to je tu nezmenené. Nepriateľ s kvantovým počítačom by mohol falšovať podpisy a predstierať používateľa v reálnom čase. Čo hybridná výmena kľúčov porazí je zber-teraz-dešifrovať-neskôr: útočník zaznamenávajúci prevádzku dnes nemôže čítať neskôr. To nerobí správu neodpustiteľnou proti protivníkovi, ktorý už má stroj. Toto rozlišovanie sa prenáša do aplikácií zámerne - ukazovateľ padlock hlásí autentizáciu, štít hlásí dôvernosť a sú to oddelené glyfy, pretože správa môže mať jednu bez druhej.

Spojenie medzi npubom a ML-KEM kľúčom je podpisom secp256k1, takže súper, ktorý ich môže falšovať, môže nahradiť svoj vlastný kľúč.

10.3 Metadátové údaje

Darčekové zabalenie skrýva odosielateľa, príjemcu nad rámec jedného p označenie, typ a časový štítok vnútornej správy. Nezakrýva, že udalosť existuje, jej veľkosť, alebo kedy ju prijal relé.

10.4 Offline sieť

Nymchat Bluetooth Mesh transport je samostatný protokol s vlastným rukávom, a to nie je pokryté touto prácou.

10.5 Už odoslané správy

Šifrovací text zaznamenaný, zatiaľ čo na oboch stranách bol stále klasický zostáva klasický natrvalo. Už existuje a nemôže byť opätovne zapečatený. Ochrana začína na správu, kde obe strany držali post-kvantové kľúče, nie v okamihu, keď bola funkcia zapnutá.

11Uvažované alternatívy

PrístupPrečo nie
Odvodenie post-kvantového kľúča od kľúča identity Odmietnutý. odvodenie je verejný algoritmus nad nsec, a kvantový protivník obnoví nsec z uverejneného npub, takže rozbiť klasickú polovicu ruky nad post-kvantovej polovici s ním.
Odoslanie koreňa na ostatné zariadenia používateľa cez NIP-44 Koreň prenášaný pod klasickým šifrovaním je obnoviteľný každým, kto zaznamenal túto správu a rozbije jej kľúč neskôr, čo je protivník koreň existuje zastaviť.
Samostatne generovaný pár klávesov ML-KEM na každom zariadení Odmietnuté. Zariadenia by držali rôzne decapsulačné kľúče a jedno nahraditeľné oznámenie na identitu ich nemôže niesť všetky. Peers by šifroval na ktorýkoľvek kľúč bol publikovaný naposledy a každé iné zariadenie by nebolo schopné čítať výsledok.
Obal koreňa pod PIN Štyri číslice PIN sú okolo 13 bitov proti offline útočníkovi, ktorý drží zabalený riadok.Ponúknuť ho vedľa dvoch 256-bitových ciest by zavádzajúce, čo najslabší obal stojí.
Rozbaľte NPUB tak, aby preniesol oba kľúče 1,184 bajtov nie je zdieľateľný identifikátor, a to by prerušilo každý existujúci Nostr klient analyzovať adresu, ktorá je definovaná ako 32 bajtov.
Kľúčové adresárske služby Obnovuje autoritu, ktorej sa má sieť vyhnúť.Kto odpovie na vyhľadávanie, rozhodne, kto môže správu čítať.
Pripojiť kľúč k každej správe Nič nerieši: odosielateľ potrebuje Príjemca kľúč pred prvou správou, čo je presne prípad bez predchádzajúcej správy, ktorá ju nesie.
Možnosti vyjednávania in-band Útočník, ktorý môže odstrániť vlajku schopnosti, núti klasickú cestu.
Len post-kvantové, žiadne klasické nohy Vynechá desaťročia analýzy secp256k1 výmenou za oveľa mladšieho primitíva. oboje a failu.

12Parita implementácie

Nymchat dodáva dve nezávislé implementácie tejto konštrukcie - jedna v JavaScript pre webovú aplikáciu, jedna v Dart pre mobilné aplikácie, vrátane odrezkového portu ML-KEM-768.

Implementácia Dart ML-KEM je validovaná proti oficiálnemu Nízka ACVP Zoznam produktov, ktoré sa používajú na výrobu výrobkov s označením ML-KEM-768 (ML-KEM-*-FIPS203) – 25 kľúčových generácií, 25 prípadov encapsulácie a 10 prípadov decapsulácie, bežiacich ako ich vlastná sada. To sú vektory, ktoré NIST publikuje na overenie implementácie, takže ich odovzdanie je dôkazom toho, že port je správny, nie len dôkazom toho, že dvaja klienti sa navzájom zhodujú. Okrem toho je zdieľaná fixácia testovacích vektorov – derivácia semien, encapsulácia, oba formáty užitočného zaťaženia a kompletné darčekové obaly – generovaná z odkazu JavaScript a kontrolovaná oboma testovacími súpravami. Koreňové tajomstvo rozširuje túto fixáciu namiesto jej nahradenia: koreň na semeno, koreň na kľúčový pár, verejná odtlačok koreňa a odvod nympq1… Rozdiel v oboch implementáciách zlyhá v budovaní namiesto toho, aby produkoval správu, ktorú druhý klient nemôže otvoriť.

To je to, čo hovorí zariadenie &ldquo;toto je koreň, ktorý držím&rdquo; od &ldquo;toto je iný jeden&rdquo;, a klient, ktorý nemohol reprodukovať odtlačok prsta iného klienta, by čítal dokonale dobrý záznam ako žiadny záznam vôbec - a potom, po oddiele 3.3, minť druhý koreň a rozdeliť identitu.

Nymchat je otvorený zdroj podľa AGPL-3.0. kryptografické jadro tu opísané je js/nym-crypto.js a js/modules/pq.js na webovej stránke klienta a lib/core/crypto/ s lib/features/identity/pq_registry.dart v mobilných zákazníkoch.

Pre kratšie, netechnické vysvetlenie, pozri Základná stránka znalostí o kvantovo odolnom šifrovaní.