Baza znanja: kvantno odporno šifriranje

Nymchat tehnični whitepaper

Post-kvantni ključni sporazum v Nymchatu

Razdeljevanje ML-KEM-768 javnih ključev preko Nostra brez imenika ali registra in jih posejanje iz skrivnosti, ki je nobena javna vrednost ne razkrije.

Različica 1.0 avgust 2026 Uporablja se za Nymchat 3.74+

Dodajanje post-kvantne izmenjave ključev sporočilu večinoma ni kriptografski problem. Primitivi so standardizirani in knjižnice obstajajo. Drugič Ta članek opisuje, kako Nymchat odgovori na to – od kod prihaja drugi ključ, kako doseže ljudi, ki ga potrebujejo, in kaj je vmesniku dovoljeno zahtevati glede rezultata – in v zadnjem razdelku, kaj ta rezultat ne ščiti.

1Problem je

Naša zasebna sporočila so šifrirana z NIP-44, ki ima dve ločljivi polovici. polovica, ki zmeša besedilo – ChaCha20 z oznako HMAC-SHA256, ki je zaklenjena skozi HKDF (RFC 5889) – ni smiselno ogrožen s kvantnim računalnikom; Groverjev algoritem stane pospešek kvadratnega korena proti simetričnemu ključu, 256 bitov pa to absorbira. Strinjam se na ključu je eliptična krivulja Diffie-Hellman Črna256k1, in Shorjev algoritem rešuje diskretni logaritem povsem.Obnavljanje enega zasebnega ključa od svojega javnega kolega retroaktivno razkrije vsako skupno skrivnost, ki jo je ključ kdajkoli ustvaril.

Grožnja, ki jo to ustvarja, ni odložena, dokler tak stroj ne obstaja. Nasprotnik s shranjevanjem lahko danes beleži šifrirno besedilo in ga dešifrira, ko pride možnost. Vse, kar je poslano zdaj, kar je še vedno pomembno, je že ogroženo.

1.1 Vprašanja, na katera ta članek odgovarja

Zmanjšanje je dobro razumljivo: zagon post-kvantnega ključnega mehanizma za kapsulacijo ob klasični izmenjavi, zato mora napadalec prekiniti obe, da bi prebral karkoli.FIPS 204To takoj povzroča problem porazdelitve:

Vprašanje

Če želite sporočiti Alice danes, potrebujete eno stvar: nprub. Dodajte post-kvantno izmenjavo in potrebujete drugo - njen ML-KEM javni ključ.

NPUB je samostojen. Lahko ga napišete na papir, ga preberete glasno ali skenirate z zaslona, in to je vse, kar vam potrebuje za šifriranje. ML-KEM-768 javni ključ je 1.184 bajtov. Ne more se brati glasno, ne bo ustrezal uporabniškemu imenu in ne spada v QR kodo poleg identitete, ki je le 32 bajtov.

Težji del je, da drugi ključ prinaša tri različne težave, preostali del tega članka pa je v veliki meri odgovor na njih:

2Design omejitve

Štiri omejitve so oblikovale odgovor in izključile večino očitnih modelov, preden je bila napisana kakršna koli koda.

  1. Tako malo skrivnosti, kot je mogoče. Naši uporabniki že nosijo točno eno skrivnost, nsec. Vsaka dodatna skrivnost je drug način, da izgubite svojo zgodovino, in nekdo, ki ve, kako varnostno kopirati nsec, ne bo vedel, kako varnostno kopirati kaj drugega. oddelek 3.1 kaže, da tega ne moremo izpolniti neposredno - postkvantni ključ, pridobljen iz nsec, sploh ne zagotavlja postkvantne zaščite - zato zasnova porabi točno eno skrivnost in nič več: en sam kos ključnega materiala, ustvarjen enkrat na identiteto, predstavljen v isti obliki kot nsec in na istem mestu, tako da vsakdo, ki ve, kako obdržati enega, ve, kako obdržati drugega. oddelek 10.1 je pošten o tem, kaj to še stane.
  2. Brez avtoritete Ni strežnika, ki bi mu lahko zaupali, da bi povedal, kateri ključ pripada komu.
  3. Številne naprave, ena identiteta Identiteta Nostr se običajno uporablja iz več strank naenkrat. Karkoli ključnega materiala obstaja, mora na vseh končati enako, in poti, ki ga prenašajo tam, ne smejo biti berljive s strani nasprotnika, proti kateremu se funkcija brani.
  4. Brez pogajanj Vsaka izmenjava v pasu “katere šifre podpirate?” je površina, ki jo napadalec lahko odstrani, da prisili šibkejšo možnost.

3Neodvisna koreninska skrivnost

Odločitev, ki prinaša obremenitev, je, da je ključ za dekapsulacijo ML-KEM posejan iz ključnega materiala, ki ga nobena javna vrednost ne razkrije.

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)

Korenina je uporabniku predstavljena tako, kot je nsec: Beč32 s človeško berljivim predpono nympqTako se bere kot nympq1…, prikazan poleg nsec v zaslonu identitete za isto interakcijo razkrije, kopiran z istim kontrolnikom, nikoli ne prijavljen in nikoli poslan nikjer v jasno.

Sol je namenoma ločena od domene, tako da nobena druga skrivnost ne more nikoli izpeljati istega ključavnice. epoch Odstranjevanje zračnega toka (oddelek 9).

3.1 Zakaj ključ ni mogoče pridobiti iz identitete ključa

Očitna zasnova je, da seje tipkovnico iz skrivnosti, ki jo uporabnik že ima:

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

Privlačna je iz štirih razlogov, vsi so resnični: nič novega za varnostno kopiranje, ker je nsec že varnostna kopija; vsaka naprava, ki se strinja z gradnjo, brez sinhronizacijskega protokola, da gre narobe; eno zamenljivo obvestilo na identiteto, ki je očitno pravilno, ker se naprave ne morejo strinjati o ključu; in ključ, ki obstaja, preden je kdajkoli objavljen, tako da lahko odjemalec prvič zapečati nekaj zase.

Vse štiri prednosti so neuporabne, iz enega razloga. Shorjev algoritem teče proti objavljenemu npubu prinaša nsec. Derivacija semen je javni algoritem nad nsec. Torej nasprotnik, ki razbije klasično polovico, rekonstruira postkvantno polovico z izvajanjem istega HKDF, ki ga vsi drugi izvajajo.

Pravilo vse sledi iz

Ključ za dekapsulacijo ML-KEM mora izhajati iz entropije, ki ne izhaja iz nsec-a in se nikoli ne prenaša pod klasično šifriranje.

Neodvisno ustvarjena skrivnost, ki se nato sinhronizira med napravami uporabnika znotraj navadnega sporočila NIP-44, je enaka napaka z dodatnimi koraki: nasprotnik danes beleži to sporočilo in kasneje ponovno vzame svoj klasični ključ, koren pa pade ven.

3.2 Pridobivanje korena na druge naprave uporabnika

Omejitev 3 oddelka 2 - ena identiteta, več naprav - tu ni mogoče zadovoljiti z aritmetiko, ker je celotna točka, da ključ ni funkcija česa, kar naprave že delijo. nympq1… samega kodiranja.

Koren je prikazan kot nympq1… poleg nsec in druga naprava sprejme, da je prilepljena v isto ploščo. To je celoten mehanizem. Naprava, ki ni prejela kode, ne more sodelovati, kar je opisano v oddelku 4.2.

Ročni prenos je namerno nadstropje in ne prvi korak. Pravilo v oddelku 3.1 pravi, da koren nikoli ne more potovati pod klasično šifriranje, in vsak mehanizem, ki bi to naredil samodejno - sinhronizacijo prek releja, zavijanje na identitetni ključ - krši točno to.

Oblika pušča prostor za zapakirano pot: zapis lahko nosi seznam zapakir, vsak AEAD blob pod ključem, ki ga lahko uporabnik reproducira na drugi napravi - na primer izhod PRF passkey. nympq1… Koda je edina pot skozi. oddelek 10.1 navaja, koliko to stane.

Sam zapis živi v svoji kategoriji nastavitev, nymchat-pq-rootTudi če ne nosi nobenih ovojnic, opravlja potrebno delo: njena prisotnost je, kako druga naprava izve, da ima ta identiteta že koren, kar ga ustavi pri oblikovanju tekmecev (oddelek 3.3).

Opomba: ena kategorija, ki ne more uporabiti novega ključa

za nymchat-pq-root Kategorija mora ne Ta vrstica nosi edino kopijo korena, tako da jo zapečatite pod ključem, ki izhaja iz korena, je ključ, katerega ključ je znotraj škatle: nobena naprava ga ne more nikoli odpreti, vključno s tisto, ki jo je napisala.

Vsaka druga kategorija nastavitev lahko in bi morala uporabiti ključ iz korena.To je edina izjema, in to je izjema o krožnosti, ne pa o moči.

3.3 Rojstvo in posvojitev

Na zagonu, ki ima trajno identiteto, stranka deluje v tem vrstnem redu:

  1. Poiščite obstoječo nymchat-pq-root in rekordov.
  2. Posnetek je bil najden in ta naprava ga lahko odvrne - sprejmejo in razglasijo to identiteto kot postkvantno sposobno.
  3. Posnetek je bil najden in ta naprava ga ne more odklopiti - ne ustvarjajte novega korena in ne objavljajte nobenega obvestila. Prosite uporabnika, da poveže to napravo tako, da vnesete nympq1… kodo iz naprave, ki jo že ima.
  4. Brez rekordov — ustvari koren, objavi zapis, napove in prikaže nympq1… Uporabniku pošljite kodo enkrat, da jo lahko shrani.

Korak 3 je korak, ki ga je enostavno zmotiti, in to je razlog, zakaj je vrstni red zapisan, namesto da bi ga pustili vsaki izvedbi.Dve napravi, ki se vsaka odloči, da ustvari koren, proizvajajo dve neodvisni korenini pod eno identiteto, in to je neuspeh, ki ga ta vrstni red obstaja, da bi preprečil.

4Obvestilo o zmogljivosti

Javna polovica izvedenega ključnega para je objavljena kot naslovljiva Črna-01 dogodek — tip 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": [ ... ]
  }
}

Addressable pomeni, da relay ohranja en dogodek na (kind, pubkey, d-tag), tako da republish nadomešča prejšnje obvestilo na mestu. vsaka identiteta zato ima točno en trenutni zapis, ki je tisto, kar naredi &ldquo;glej Alice ključ&rdquo; en sam nedvoumno pick namesto seznama, da se uskladi.

Podpis je zavezujoč. Dogodek je podpisan s ključem identitete, zato trditev &ldquo;ta ML-KEM ključ pripada temu npub&rdquo; je prav tako močna kot npub sam. Zamenjava drugega ključa za vkapljanje zahteva oblikovanje podpisa secp256k1. Napadalec, ki lahko to naredi, ne potrebuje težav s KEM.

Obvestila se iztečejo. Sedmi dan NIP-40 Izpolnjevanje, ponovno objavljeno vsakih 24 ur, vodi zapis o izjavi o odjemalcu, ki še vedno deluje, namesto tistega, ki je bil prej.

Izpuščeno obvestilo se bere točno tako, kot tisto, ki nikoli ni nosilo ključa: kolegi pošljejo navaden NIP-44, ki ga lahko prebere vsak prijavitelj, in odjemalec nadaljuje post-kvantno izmenjavo na svoji naslednji povezavi, ko ponovno objavi.

Brez enega, zapis preživi ključ, ki ga imenuje: naprava, ki je izbrisana, ponastavljena ali ima svoj koren zamenjan, pušča stalno navodilo za vkapljanje na ključ, ki ga nihče več ne drži, in sporočila, poslana pod njim, so izgubljena brez napake na obeh straneh.

Ključno polje imenuje njegovo obliko. Polje je pk2, in številka je del pogodbe namesto dekoracije: imenuje obliko uporabne obremenitve, s katero se lahko uporablja ključ. Bralec, ki ne prepozna polja, zaključi &ldquo;Nymchat odjemalca, brez post-kvantnega ključa&rdquo; in pošlje navaden NIP-44, ki ga lahko prebere vsak vpis. To je pravilna smer neuspeha, in je vredno navesti kot pravilo, da številčenje formata obstaja za uveljavitev: nepriznana zahteva za zmogljivost mora stroškov zaščite, nikoli dostave. Ključ, ki ga kolega ne more uporabiti, je slabši od nobenega ključa sploh, ker je sporočilo, ki ga proizvaja, izgubljeno brez napake na obeh straneh.

4.1 Odsotnost je smiselna in tridimenzionalna

Subtilna, a pomembna podrobnost: obvestilo objavi vsak odjemalec Nymchat, ne samo tisti, ki so sposobni post-kvantnega, in ključno polje je neobvezno.

OpazovaliPomeniPošlji vedenje
Obvestilo s ključem Nymchat, post-kvantno sposoben hibridni
Obvestilo, brez ključa Nymchat, klasičen samo - post-kvantni izklop, ali naprava, ki še ni povezana s korenino identitete Klasični NIP-17
Brez obvestila Neznani odjemalec. Lahko je kateri koli uporabnik Nostr ali Bitchat Klasična, plus združljivostni vložek

Brezključno obvestilo je podpisana izjava, da pošiljatelj upravlja Nymchat, kar omogoča pošiljatelju, da preskoči pot špekulativnega navzkrižnega protokola, ki bi ga sicer moral vključiti za vsakogar, ki ga ne more identificirati.

4.2 Naprava, ki ne more odpreti korena, ostane tiha

Obvestilo je zamenljivo: en dogodek na identiteto, zadnje zapisovanje zmaga. To je tisto, kar naredi zasnovo enega zapisa deluje, in to je tudi tisto, kar naredi nepovezano napravo nevarno, če objavi. naprava, ki je napovedala ključ, ki ga je napisal za sebe, bi stisnil pravi zapis in poslal vsakega kolega za šifriranje pod ključem, ki ga druge naprave ne morejo odpreti.

Torej naprava, ki pozna korenino, obstaja, vendar je ne more odpreti, sploh ne objavi nobenega obvestila. ni zlomljena in ni zaklenjena iz aplikacije: še vedno bere vsako sporočilo, za katero ima ključe, in še vedno pošilja klasično, medtem ko uporabnika spodbuja, da ga poveže. Tišina je pravilno vedenje za napravo, ki ne more govoriti za identiteto.

5Odkritje in odločitev o pošiljanju

Stranke se naučijo ključev vrstnikov na dva načina. Stalna naročnina pokriva ljudi, s katerimi uporabnik dejansko ustreza – odprte pogovore in člane skupine – tako da njihova obvestila prihajajo kot običajni dogodki. Za vrstnika, ki se je prvič srečal, poizvedba z enim zadetkom teče ob času pošiljanja, omejena na 2,5 sekunde; če se ne reši, sporočilo postane klasično, kar je vedenje, ki je obstajalo pred dodajanjem post-kvantnega načina namesto novega načina neuspeha.

Uporabnik, ki poveže novo napravo, ali ki se premakne iz vpisa v razširitev brskalnika na lokalni ključ, postane post-kvantno sposoben sredi pogovora, in trajno predpomnjeno &ldquo;no&rdquo; bi jih ohranilo na klasični šifriranju za življenje oglasa.

5.1 Zakaj ni napadov z nizkimi stopnjami

Odločitev o usmerjanju se zmanjša na eno samo vprašanje:

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

Ni pogajanj o zmogljivostih, ni seznama podprtih algoritmov in nobenega polja, ki bi ga napadalec lahko očistil, da bi prisilil šibkejšo pot. je Način neuspeha prikrajšanega ali zadržanega obvestila je, da je sporočilo klasično - status quo pred to funkcijo - namesto da se hibridno sporočilo zniža na nekaj, kar je podkupljivo.

Nasprotno tudi drži in šteje več: odjemalec pošilja hibrid samo ko ima ključ, in držanje ključa je dokaz, da lahko prejemnik decapsulate. ni stanja, v katerem je sporočilo poslano post-kvantno nekomu, ki ga ne more prebrati.

6Hibridna gradnja

Nespremenjeno NIP-44 šifrirno besedilo je notranja plast, in ML-KEM ključi zunanji AEAD okoli njega:

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)

Obe skrivnosti je treba še vedno odkriti, da bi lahko prebrali sporočilo: zunanja plast prinaša samo NIP-44 šifrirno besedilo, odprtje pa potrebuje klasično ECDH. Kvantni nasprotnik, ki razbije secp256k1, dobi notranji ključ in se še vedno sooča z ML-KEM; prekinitev ML-KEM razbije zunanjo plast in pusti NIP-44 na mestu.

ML-KEM ključ prejemnika je dolgotrajen, vendar vsako sporočilo nosi neodvisno šifrirno besedilo in zato neodvisno šifrirno besedilo. kem_ssTo je tisto, zaradi česar izvira nonce namesto naključno zveni: ChaCha20-Poly1305 Ohišje je prekinjena z ponovno uporabo (ključ, nonce) par, in tukaj je ključ sam nov za vsako sporočilo, tako da noben par ne more ponoviti.

6.1 Zakaj plasti ostanejo ločene

Druga možnost je, da mešate obe skrivnosti v en pogovorni ključ in ga posredujete NIP-44:

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

Ta konstrukcija zveni kot kriptografija. Ima en strukturni problem: potrebuje ecdh_x, surovi x-koordinat izhoda ECDH, kot ključni material - in razširitev brskalnika (NIP-07) ali oddaljenega podpisnika (NIP-46Izvaja NIP-44 v imenu klicatelja in vrne šifrirno besedilo, kar je celotna točka držanja ključa nekje, kjer aplikacija ne more doseči.

Mešanje skrivnosti zato izključuje vsako prijavo, ki ohranja identitetni ključ v podpisniku, kar pomeni, da so najbolj previdni uporabniki, in nobena količina dela na ključnem izvlečku ga ne more spremeniti. Razvrščanje odstrani odvisnost: NIP-44 ostane cel in ga proizvaja vse, kar ima identitetni ključ, podpisnik vključen, medtem ko se polovica KEM izračuna iz kode za obnovitev, ki jo ima stranka neposredno.

Stroški so pasovna širina in niso majhni. šifrirno besedilo ML-KEM je 1.088 bajtov in vozi na vsako sporočilo, baz64url-kodirano na 1.451 znakov; zunanji AEAD doda 16-bitno oznako Poly1305 in razširi uporabno obremenitev NIP-44 za tretjino. Sporočilo s 50 znaki raste od 176 bajtov do 1.712, in sporočilo z 2.000 znakov od 2.820 do 5.238.

6.2 Samostojno opisani payloads

za pq2. Predpona naredi uvajanje postopno: samopisuje se, tako da odjemalec izbere pot za dešifriranje tako, da pregleda uporabno obremenitev, ne pa da bi zaupal oznaki ali se spomnil, kaj podpirajo kolegi. bralec, ki ne prepozna predpona, ne odpre te uporabne obremenitve, namesto da bi jo napačno prebral, in sporočila, zapečatena pred obema stranema, bi lahko post-kvantno ostala berljiva kot običajna NIP-44 brez selitve.

Implicitna zavrnitev

ML-KEM decapsulation je zasnovan tako, da ne bo nikoli neuspešen: glede na napačno oblikovano šifrirno besedilo, Fujisaki-Okamoto preoblikovanje vrne deterministično psevdo naključno skrivnost namesto napake. Napačen ključ zato na KEM-ovem sloju sploh ne pride na površje – pojavlja se kot neuspeh HMAC znotraj NIP-44, kar je enako kot pri napačnih klasičnih ključnih površinah. Klicalci obravnavajo oba enako, tako da neuspeh ne prenaša nobenega razlikovalnega signala.

6.3 Obe plasti darilne ovojnice

A NIP-17 Zasebno sporočilo je a NIP-59 darilna embalaža: nepodpisana govorica, zapečatena pod identitetnim ključem pošiljatelja (vrsta 13), nato zavita pod vrvnim ključem, ustvarjenim po sporočilu (vrsta 1059). Na prijavi, ki neposredno drži identitetni ključ, Nymchat hibridizira obe plasti, vsaka s svojo encapsulacijo.

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 šifrirni plasti sta hibridni, vsaka z neodvisno ML-KEM-kapsulacijo. Zunanja plast je zaklenjena v skrivnost, tako da ovojnica ne razkrije pošiljatelja.

Prijava podpisnika dobi le zunanji sloj. Pečat proizvaja podpisnik kot običajen NIP-44 – aplikacija nikoli ne vidi ključa, ki ga naredi – zato ga ni mogoče hibridizirati na mestu. To ne stane nič proti napadu v zvezi: pečat je dosegljiv samo prek ovojnice, in ovojnica je tisto, kar shranjuje snemalnik. Nasprotnik, ki ima zabeležen promet, mora prekiniti ML-KEM, preden je pečat celo viden za napad.

7Skupinska sporočila in delna pokritost

Skupinsko sporočilo ni eno šifrirno besedilo. To je isto preprosto besedilo, ki je razdeljeno vsakemu članu, vsaka kopija je vkapisana v lastni ML-KEM ključ tega člana. Član, ki je objavil ključ, dobi hibridno ovojnico; tisti, ki nima, dobi klasično ovojnico.

To povzroča računovodske težave, ki jih naivno izvajanje naredi narobe. Če osem od desetih članov prejme hibridno kopijo, je sporočilo ne Nasprotnik potrebuje eno klasično kopijo preprostega besedila, ki je enaka v vseh desetih, zato je sporočilo zaščiteno le, če vsak Kopiranje je.

Nymchat zato sledi pokritosti po sporočilu med fan-outom - število je znano le, ko se gradijo zaponke - in oznaka poroča &ldquo;kvantno odporna na 8 od 10 članov&rdquo; namesto da trdi, da je sporočilo zaščiteno. prejetih skupinska sporočila (samo pošiljatelj šteje fan-out), vmesnik poroča delno namesto popolno zaščito.

7.1 Kaj poročajo ščitniki

Ščit govori resnico o Sporočilo, ne o programski opremi, ki jo je poslala:

Sodba je zabeležena, ko je sporočilo zapečateno, namesto da bi se ponovno izračunalo iz tega, kar je pozneje oglaševal peer. šifrirno besedilo, ki že obstaja, ne more postati bolje zaščiteno, kot je bilo, in vmesnik, ki je preoblikoval stara sporočila o moči novega obvestila, bi trdil nekaj napačnega o bajtih na prenosu.

Pravila skupine zgoraj stack na vrhu tega, namesto da ga nadomestijo: sporočilo skupine je v celoti zaščiten le, ko je bila kopija vsakega člana, in prejeto sporočilo skupine brez števila pokritosti prikazuje delno.

8Kopije, naslovljene na samega sebe

Številne stvari, ki jih shranjuje odjemalec, so šifrirane za lastno identiteto uporabnika: sinhronizirane nastavitve, seznam pogovorov, skupinski ključi in arhiv sporočil. Ti nosijo več o uporabniku kot večina posameznih sporočil, zato bi jih zapustitev klasičnih naredila najšibkejši shranjeni artefakt, ne glede na to, kako skrbno so bila sporočila zaprta. nymchat-pq-root kategorije, ki je ni mogoče zapečatiti pod ključem, ki ga lahko proizvede samo

Nastavitve blob ali vrstice arhivov sedi na enem mestu že več let, kar je točno oblika stvari, ki jo zbirajo nasprotniki žetve-zdaj-dešifrirajo-kasneje - veliko več kot katero koli eno sporočilo, ki je vsaj efemerno v lastnem umu uporabnika.

Ena omejitev ureja obliko tukaj namesto ključa. samodejno naslovljena kopija mora biti berljiva z vsak naprave na računu, tako da vsaka naprava oglašuje tisto, kar lahko odpre v razpisu, ki ga nosi oglas, in račun piše samo tisto, kar lahko vsi preberejo.

Omejitev, ki jo je vredno poudariti

Naprava, ki ima identiteto, ne pa korenine, ne more odpreti ničesar, kar je zapečateno s koreninskim ključem, vključno z lastnimi nastavitvami.To je namerna posledica, ne nadzor, in zato je v oddelku 3.3 takšna naprava, ki zahteva povezavo, namesto da bi pritrdila sveže korenine: drugi koren ne bi naredil bloba berljivega, temveč bi le razdelil ključno gradivo identitete na dva dela.

Naprava, ki poganja razširitev brskalnika ali oddaljeni podpisnik (NIP-46), nima nobenega nsec, iz katerega bi lahko izvirala, vendar pa ima kodo za obnovitev, in pod plastjo gradnje oddelka 6.1, ki je vse, kar potrebuje postkvantna polovica: podpisnik proizvaja plast NIP-44, kot jo vedno ima, in odjemalec sam ključi zunanjo plast.

9rotacijo

za epoch Števec v izpeljavi je tisto, kar omogoča vrtenje brez novega ključnega materiala. Če ga povečate, dobite nov par ključev iz istega korena in ponovno objavljenega obvestila; kolegi vzamejo nov ključ iz zamenljivega zapisa.

9.1 Stare dobe so ohranjene in nič ni ponovno šifrirano

Odjemalec gradi kandidate za dešifriranje od trenutne dobe do epohe &minus; 3, tako da se sporočilo, zapečateno tik pred vrtenjem, še vedno odpre proti ključnemu paru, ki je bil trenutni, ko je bil poslan.

To okno je tisto, kar naredi vrtenje varno: brez njega bi vsako vrtenje uničilo vse, kar je bilo v letu. Vse, kar je že zapečateno, ostane berljivo za vse življenje identitete, ker je sporočilo, ki ga uporabnik ne more več odpreti, strogo slabše za njih kot tisto, katerega zaščite ni mogoče izboljšati retroaktivno (oddelek 10.5).

10Kaj to ne ščiti

Dokument, ki navaja le to, kar zasnova doseže, ne opisuje sistema, in pretiravanje varnostne lastnosti v vmesniku je slabše kot izpuščanje.

10.1 Korenina je druga skrivnost in izgubiti jo ni mogoče.

To je resnična cena zasnove. Omejitev v oddelku 2, da mora uporabnik imeti točno eno stvar, ki jo je treba obdržati, ni mogoče izpolniti: nsec sam ne rekonstruira post-kvantnega ključa, ker je celotna točka v tem, da ga nobena javna vrednost in nobena druga skrivnost ne razkrije. Če nobena naprava ne drži korena in nobena od zavihkov v oddelku 3.2 ni mogoče odpreti, material, zapečaten do korenskega izvedenega ključa, ni mogoče obnoviti.

Z ročnim prenosom je edina pot ostrejša, kot jo je mogoče najprej prebrati. nympq1… Koda kjerkoli ima točno eno kopijo, na eni napravi, in izguba te naprave izgubi vsako post-kvantno sporočilo, nastavitve blob in arhivsko vrstico, zapečateno z njo. nsec ne pomaga; to je lastnost, na kateri temelji celotna zasnova.

Napadalec napade najcenejšo razpoložljivo pot, tako da je shema vredna tistega, kar je vredna njena najšibkejša pot izterjave - nepozabna gesla, na primer, bi postavila celotno stvar na vse, kar je geslo vredno, in zaprta vrstica je točno artefakt, ki ga nasprotnik zbira in mletje brez povezave v prostem času.

10.2 Avtentikacija, kot drugačna od zaupnosti

Vsak podpis v Nostr je Schnorr nad secp256k1, in to je tukaj nespremenjeno. Nasprotnik s kvantnim računalnikom bi lahko ponarejal podpise in se pretvarjal, da je uporabnik v realnem času. Kaj hibridna ključna izmenjava porazov je žetev-zdaj-dešifriranje-kasneje: napadalec, ki danes beleži promet, ga ne more prebrati pozneje. To ne naredi sporočila nepopustljivega proti nasprotniku, ki že ima stroj. Ta razlika se namerno prenaša v aplikacije - indikator padlock poroča o avtentikaciji, ščit poroča o zaupnosti in so ločeni glifi, ker lahko sporočilo ima eno brez drugega.

Prav tako omejuje tisto, kar lahko obljublja napoved v 4. oddelku.Vezava med npubom in ključem ML-KEM je podpis secp256k1, tako da lahko nasprotnik, ki jih lahko ponari, nadomesti svoj ključ.Zaupnost proti prihodnjemu nasprotniku ni enaka kot pristnost proti enemu.

10.3 Metapodatki

Darilna embalaža skriva pošiljatelja, prejemnika zunaj enega p oznaka, vrsta in časovni žig notranjega sporočila. Ne skriva, da dogodek obstaja, njegova velikost ali kdaj ga je prejel predvajalnik.

10.4 Offline mreža

Nymchat's Bluetooth mesh transport je ločen protokol s svojo roko, in ni zajeta s tem delom.

10.5 Že poslana sporočila

Šifrirno besedilo, zabeleženo medtem ko je bila na obeh straneh še vedno klasična, je klasično trajno. Že obstaja in ga ni mogoče ponovno zapečatiti. Zaščita se začne na sporočilu, kjer sta obe strani držali post-kvantne tipke, ne pa v trenutku, ko je bila funkcija vklopljena.

11Razmisleke o alternativah

pristopZakaj ne
Izpeljite postkvantni ključ iz identitete Odvzem je javni algoritem nad nsec, in kvantni nasprotnik izterja nsec iz objavljenega npub, tako da razbije klasično polovico roke nad post-kvantno polovico z njim.
Pošljite koren na druge naprave uporabnika preko NIP-44 Koren, ki se prenaša pod klasično šifriranje samo, je mogoče obnoviti vsakogar, ki je zabeležil to sporočilo in razbije njegov ključ kasneje, kar je nasprotnik, ki je koren obstaja za ustavitev.
Ločeno ustvarjena ML-KEM tipkovnica na vsaki napravi Zavrnjeni. Naprave bi imele različne ključe za dekapsulacijo, in eno zamenljivo obvestilo na identiteto jih ne more nositi vseh. Prijatelji bi šifrirali na kateri koli ključ, ki je bil objavljen nazadnje, in vsaka druga naprava ne bi mogla prebrati rezultata.
Vstavite korenine pod PIN Štirimestni PIN je približno 13 bitov proti napadalcu brez povezave, ki drži zavito vrstico.
Razširite npub tako, da prenašate oba ključa 1,184 bajtov ni identifikator, ki ga je mogoče deliti, in to bi prekinilo vsako obstoječe analiziranje naslova, ki je opredeljen kot 32 bajtov.
Ključna direktorijska storitev Ponovno uvaja avtoriteto, ki jo omrežje obstaja, da bi se izognili.Tisti, ki odgovori na iskanje, odloči, kdo lahko prebere sporočilo.
Priložite ključ vsakemu sporočilu Nič ne reši: pošiljatelj potrebuje Prejemnik je ključ pred prvo sporočilo, kar je točno to, kar se zgodi brez predhodnega sporočila, da ga prenese.
Pogajalska zmogljivost in-band Ustvarja površino za znižanje. Napadalec, ki lahko odstrani zastavo zmožnosti, prisili klasično pot.
Samo postkvantno, brez klasične noge Odvrže desetletja analize secp256k1 v zameno za veliko mlajše primitive. oboje neuspeh .

12Paritetno izvajanje

Nymchat pošilja dve neodvisni implementaciji te konstrukcije - eno v JavaScript za spletno aplikacijo, eno v Dart za mobilne aplikacije, vključno s pristaniščem ML-KEM-768.

Izvajanje Dart ML-KEM je potrjeno proti uradnemu NIST ACVP Znanih odgovorov test za ML-KEM-768 (ML-KEM-*-FIPS203) – 25 ključnih generacij, 25 encapsulatorjev in 10 primerov decapsulatorjev, ki se izvajajo kot lastna zbirka. To so vektorji, ki jih NIST objavi za potrjevanje izvedbe, tako da jih prenese, je dokaz, da je vrata pravilna, ne le dokaz, da se oba odjemalca strinjata med seboj. Poleg tega je skupna določitev testnih vektorjev – semenske derivate, encapsulatorje, obeh uporabnih formatov in popolnih darilnih oblog – ustvarjena iz sklicevanja na JavaScript in preverjena s strani obeh testnih kompletov. Korenska skrivnost razširi to določitev, namesto da bi jo nadomestila: koren do semena, koren do ključavnice, koreninski javni prstni odtis in izpeljani klju nympq1… Divergenca v obeh implementacijah ne uspe graditi namesto da bi ustvarila sporočilo, ki ga drugi odjemalec ne more odpreti.

To je tisto, kar pripoveduje napravo &ldquo;to je koren, ki ga imam&rdquo; od &ldquo;to je drugačna ena&rdquo;, in odjemalec, ki ne bi mogel reproducirati prstnega odtisa drugega odjemalca, bi prebral popolnoma dober zapis kot noben zapis sploh - in nato, po oddelku 3.3, pometati drugo korenino in razdeliti identiteto.

Nymchat je odprtih virov pod AGPL-3.0. Kriptografsko jedro, ki je opisano tukaj, je js/nym-crypto.js in js/modules/pq.js na spletni strani naročnika in lib/core/crypto/ s lib/features/identity/pq_registry.dart na mobilnih strankah.

Za kratko, ne-tehnično pojasnilo glej Stran baze znanja o kvantno odpornem šifriranju.