Baza znanja: kvantno otporno šifriranje

Nymchat tehnički whitepaper

Post-kvantni ključni sporazum u Nymchatu

Distribucija ML-KEM-768 javnih ključeva preko Nostr-a bez direktorijuma ili registra, i sijanje ih iz tajne koju nijedna javna vrijednost ne otkriva.

Verzija 1.0 Avgust 2026 Primjenjuje se na Nymchat 3.74+

Dodavanje post-kvantne ključne razmjene na poslanika uglavnom nije problem kriptografije. Primitivi su standardizovani i biblioteke postoje. Druga Ovaj članak opisuje kako Nymchat odgovara na to – odakle dolazi drugi ključ, kako dostiže ljude kojima je potreban, i šta su interfejsi dozvoljeni da tvrde o rezultatu – i, u poslednjem odjeljku, šta taj rezultat ne štiti.

1Problemi

Naše privatne poruke su šifrirane sa NIP-44, koji ima dvije razdvojive polovine. Polovina koja grubi tekst — ChaCha20 sa HMAC-SHA256 tagom, ključan kroz Uslovi (Uslovi korišćenja RFC 5869) — nije smisleno ugrožen kvantnim računalom; Groverov algoritam košta kvadratni korijen ubrzanja protiv simetričnog ključa, a 256 bita to apsorbuje. Slažem se na ključu je eliptička krivulja Diffie-Hellman preko Oznaka: 256k1, i Shorov algoritam rješava diskretni logaritam u potpunosti.

Prijetnja koju to stvara nije odgođena dok takva mašina ne postoji. Neprijatelj sa skladištenjem može snimiti šifrirani tekst danas i dešifrirati ga kad god dođe sposobnost. Sve što je poslato sada što je još važno onda je već ugroženo. Ovo je specifičan napad koji post-kvantna razmjena ključa gubi, i to je razlog zašto rad ne može čekati da se mašina izgradi.

1.1 Pitanje na koje ovaj članak odgovara

Ukoliko se ne primenjuje ova Direktiva, države članice članice mogu predvidjeti da se u skladu sa stavkom 1. stavkom 2. ovog Pravilnika ne primenjuju odgovarajuće odredbe Direktive 95/46/EZ, osim ako se ne primenjuje ova Direktiva.Uslovi korišćenja 203To odmah dovodi do problema distribucije:

pitanje

Dodajte post-kvantnu razmjenu i trebate drugu – njen ML-KEM javni ključ.Gde živi taj ključ, i kako ga dobijete prije nego što joj nešto možete poslati?

NPUB je samostalni ključ. Možete ga napisati na papiru, čitati ga glasno ili skenirati sa ekrana, i to je sve što svatko treba da šifruje za vas. ML-KEM-768 javni ključ je 1,184 bajta. Ne može se čitati glasno, neće se uklopiti u korisničko ime, i ne pripada QR kodu pored identiteta koji je samo 32 bajta.

Teži deo je da drugi ključ donosi tri različita problema, a ostatak ovog papira je uglavnom odgovor na njih:

2Dizajn ograničenja

Četiri ograničenja oblikovala su odgovor, a oni isključuju većinu očiglednih dizajna prije nego što se napiše bilo koji kod.

  1. što je moguće manje tajni. Naši korisnici već nose tačno jednu tajnu, nsec. Svaka dodatna tajna je drugi način da se izgubi vaša povijest, a netko tko zna da rezervira nsec neće znati da rezervira ništa drugo. Odjeljak 3.1 pokazuje da se ova ne može ispuniti izravno – post-kvantni ključ koji potječe iz nsec-a ne pruža nikakvu post-kvantnu zaštitu uopće – tako da dizajn troši tačno jednu tajnu i ništa više: jedan komad ključnog materijala, generisan jednom po identitetu, predstavljen u istom obliku kao i nsec i na istom mestu, tako da svatko tko zna kako da sačuva jedan zna kako da sačuva drugi. Odjeljak 10.1 je iskren o tome koliko to još košta.
  2. Nema autoriteta Ne postoji server koji može biti pouzdan da kaže koji ključ pripada kome. bilo koji takav server postaje tačka na kojoj se poruke mogu preusmjeriti.
  3. Mnogo uređaja, jedan identitet Bez obzira na ključni materijal koji postoji mora završiti identičan na svim njima, a staze koje ga nose tamo ne moraju same biti čitljive protivniku protiv kojeg se funkcija brani.
  4. Nema pregovora Svaka razmjena “ koje cifre podržavate?” je površina koju napadač može skinuti kako bi prisilio slabiju opciju.

3Nezavisna tajna korena

Odluka koja nosi teret je da je ključ za dekapsulaciju ML-KEM zasićen od ključnog materijala koji ne otkriva nikakva javna vrijednost.

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)

Korijen je predstavljen korisniku na način na koji je nsec: Beč32 sa ljudski čitljivim prefixom nympqTako se čita kao nympq1…, prikazan pored nsec u identitetnom zaslonu iza iste otkrivanje interakcije, kopiran s istim kontrolom, nikad prijavljen i nikad poslao nigdje u jasno.

Sol je namjerno odvojena od domena, tako da nijedna druga tajna nikad ne može izvući isti ključ. epoch Konter pogona rotacije (odjeljak 9).

3.1 Zašto ključ ne može biti izveden iz ključa identiteta

Očigledan dizajn je da seje ključpar iz tajne koju korisnik već ima:

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

To je privlačno iz četiri razloga, svi su stvarni: ništa novo za backup, jer je nsec već backup; svaki uređaj koji se slaže po izgradnji, bez protokola sinhronizacije da pogreši; jedno zamjenjivo obaveštenje po identitetu je očigledno ispravno, jer uređaji ne mogu da se ne slažu o ključu; i ključ koji postoji prije nego što je ikada objavljen, tako da klijent može zapečatiti nešto za sebe na prvi pogled.

Sve četiri prednosti su bezvredne, iz jednog razloga. Shorov algoritam radi protiv objavljenog npub-a daje nsec. Derivacija sjemena je javni algoritam nad nsec. Dakle, protivnik koji slomi klasičnu polovicu rekonstruiše post-kvantnu polovicu tako što će pokrenuti isti HKDF koji svi drugi rade. Protiv žetve-sada-dešifriranje-kasnije - jedna prijetnja koju funkcija postoji da zaustavi - ključ koji je tako dobijen ne dodaje ništa.

Pravilo sve proizlazi iz

ML-KEM ključ za dekapsulaciju mora doći od entropije koja nije ni izveden iz nsec niti je ikada prenesena pod klasičnom samo šifrovanjem.

Druga klauzula tog pravila radi jednako dobro kao i prva. Nezavisno generirana tajna koja se zatim sinhronizuje između uređaja korisnika unutar obične NIP-44 poruke je isti neuspjeh uz dodatne korake: protivnik danas beleži tu poruku i oporavlja svoj klasični ključ kasnije, a korijen izlazi.

3.2 Dobivanje korena na druge uređaje korisnika

Ograničenje 3 odjeljka 2 – jedan identitet, nekoliko uređaja – ne može se zadovoljiti aritmetikom ovdje, jer cela stvar je da ključ nije funkcija bilo čega što uređaji već dijele. nympq1… Kodiranje sami

Korijen je prikazan kao nympq1… pored nsec, a drugi uređaj prihvata je umetnut u istu ploču. To je čitav mehanizam. uređaj koji nije dao kod ne može učestvovati, što je opisano u odjeljku 4.2.

Pravilo u odjeljku 3.1 kaže da koren nikada ne može putovati pod klasičnom samo šifrovanjem, a svaki mehanizam koji bi to automatizovao – sinhronizovanjem kroz relaj, omotavanjem na ključ identiteta – krši upravo to.

Format ostavlja prostor za upakovani put: zapis može nositi listu upakovanja, svaki AEAD blob pod ključem koji korisnik može reproducirati na drugom uređaju - passkey PRF izlaz, na primer. nympq1… Kod je jedini put preko. odjeljak 10.1 navodi koliko to košta.

Sam zapis živi u svojoj kategoriji postavki, nymchat-pq-rootČak i bez omotača obavlja neophodan posao: njegovo prisustvo je kako drugi uređaj saznaje da ovaj identitet već ima korijen, što je ono što ga sprečava da zameni rivala (Odjeljak 3.3).

Napomena o dizajnu: jedna kategorija koja ne može koristiti novi ključ

Naši nymchat-pq-root Kategorija mora ne taj red nosi jedinu kopiju korijena, tako da ga zapečaćivanje pod ključem koji proizlazi iz korijena je ključ čiji ključ je unutar kutije: nijedan uređaj ga nikad nije mogao otvoriti, uključujući onaj koji ga je napisao. To je zapečaćeno klasično - NIP-44 za sebe - ili uopće ne.

Svaka druga kategorija podešavanja može i treba da koristi ključ korijena. Ovo je jedini izuzetak, a to je izuzetak u pogledu kružnosti, a ne u pogledu snage.

3.3 Generacija i usvajanje

Na boot, držeći trajni identitet, klijent radi u ovom redoslijedu:

  1. Potražite postojeće nymchat-pq-root Rekord je.
  2. Zapis je pronađen, a ovaj uređaj može ga otključati - usvojiti ga i objaviti ovaj identitet kao post-kvantno sposoban.
  3. Pronađen zapis, a ovaj uređaj ga ne može otključati – ne generirajte novi koren, i ne objavljujte nikakvu objavu. nympq1… kod iz uređaja koji ga već ima.
  4. Nema rekorda — generisati korijen, objaviti zapis, najaviti i prikazati nympq1… kod korisniku jednom kako bi ga mogli sačuvati.

Korak 3 je korak koji je lako pogrešiti, i to je razlog zašto je redoslijed napisan umjesto ostavljen na svaku implementaciju.Dva uređaja koja svaka odluči da generira korijen proizvode dva nezavisna korijena pod jednim identitetom, i to je neuspjeh ovog redoslijed postoji da spriječi.

4Obaveštenje o sposobnosti

Javna polovina izvedenog ključnog para objavljuje se kao adresabilna Knjiga 01 događaj — tip 30078, označeno 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 znači da relaj drži jedan događaj po (kind, pubkey, d-tag), tako da republike zamjenjuje prethodno saopštenje na mestu.

Potpis je obavezujući. Događaj je potpisan ključem identiteta, tako da je tvrdnja &ldquo;ovaj ML-KEM ključ pripada ovom npub&rdquo; je baš tako jak kao i npub sam. Zamjena drugačijeg ključa enkapsulacije zahtijeva kovanje secp256k1 potpis. Napadač koji to može učiniti ne treba da se brine s KEM.

Obaveštenja istekaju. Sedmi dan NIP-40 istek, ponovno objavljen svakih 24 sata, drži zapis izjavu o klijentu koji je još uvek u toku, a ne onaj koji je nekada bio.

Propuštena objava se čita baš kao ona koja nikada nije nosila ključ: kolege šalju običan NIP-44, koji svako prijavljivanje može pročitati, a klijent nastavlja post-kvantnu razmjenu na svojoj sljedećoj poveznici, kada se ponovno objavljuje. Dakle, šutnja duže od nedelju dana košta zaštitu za poruke poslate tokom praznine - klasično su šifrirane umjesto kvantno otporne - i ne košta ništa drugo.

Bez jednog, zapis preživljava ključ koji naziva: uređaj koji je izbrisan, resetiran ili ima svoj korijen zamijenjen ostavlja stajan uputstvo da se ukapsuli na ključ koji nitko više ne drži, a poruke poslate ispod njega se gube bez greške na bilo kojoj strani.

Ključno polje naziva svoj format. Polje je pk2, a brojka je deo ugovora umjesto dekoracije: naziva format korisnog opterećenja s kojim se ključ može koristiti. Čitač koji ne prepoznaje polje zaključuje &ldquo;Nymchat klijent, nema post-kvantni ključ&rdquo; i šalje običan NIP-44, koji svaka prijava može čitati. To je ispravan smjer neuspeha, i vrijedi navesti kao pravilo format broja postoji za izvršavanje: nepoznati zahtjev za sposobnost mora koštati zaštitu, nikada dostavu. Ključ koji kolega ne može koristiti je gore od nikakvog ključa uopšte, jer poruka koju proizvodi je izgubljena bez greške na bilo kojoj strani.

4.1 Odsustvo je smisleno i trostruko vrednovano

Subtilan, ali važan detalj: objavu objavljuje svaki Nymchat klijent, ne samo oni koji su post-kvantno sposobni, a ključno polje je opcionalno.

PosmatračiSredstvaPošaljite ponašanje
Obaveštenje sa ključem Nymchat, post-kvantni sposoban hibridni
Obaveštenje, bez ključa Nymchat, klasična samo - post-kvantno isključeno, ili uređaj još nije povezan sa korenom identiteta Klasična NIP-17
Bez objave Nepoznati klijent. Može biti bilo koji Nostr ili Bitchat korisnik Klasična, plus kompatibilnost Wrap

Srušavanje trećeg reda u četvrti bi bio pravi gubitak. objava bez ključa je potpisana izjava da pošiljatelj pokreće Nymchat, što omogućava da put pošiljanja preskoči špekulativni prekrižni protokol koji bi inače morao uključiti za svakoga koga ne može identificirati.

4.2 Uređaj koji ne može otvoriti korijen ostaje u tišini

Najava je zamjenjiva: jedan događaj po identitetu, poslednji zapis pobeđuje. To je ono što čini dizajn jednog zapisa radom, a to je i ono što čini nepovezan uređaj opasnim ako objavljuje.

Dakle, uređaj koji poznaje korijen postoji, ali ga ne može otvoriti, ne objavljuje nikakvu objavu. On nije slomljen i nije zaključan iz aplikacije: još uvijek čita svaku poruku za koju ima ključeve i još uvijek šalje klasično, dok potiče korisnika da ga poveže.

5Otkriće i odluka o slanju

Klijenti uče ključeve sugrađana na dva načina. Stalna pretplata pokriva ljude s kojima korisnik zapravo odgovara – otvorene razgovore i članove grupe – tako da njihove najave stižu kao obični događaji. Za sugrađana koji su se prvi put sastali, upit na jedan hit radi u vrijeme slanja, ograničen na 2,5 sekundi; ako se ne riješi, poruka ide klasična, što je ponašanje koje je postojalo prije post-kvantnog dodavanja, a ne novi način neuspeha.

Korisnik koji povezuje novi uređaj, ili koji se kreće od pretraživanja proširenja na lokalni ključ, postaje post-kvantno sposoban sredinom razgovora, a trajno cached &ldquo;no&rdquo; bi ih držali na klasičnom enkripciji za život oglasa.

5.1 Zašto nema napada na nižim nivoima

Odluka o usmjeravanju smanjuje se na jedno pitanje:

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

Nema pregovora o sposobnostima, nema popisa algoritama koji se podržavaju i nema polja koje napadač može izbaciti kako bi prisilio na slabiji put. je Režim neuspeha odvojene ili zadržane najave je da poruka ide klasična - status quo prije ove značajke - umjesto da se hibridna poruka spusti na nešto što se može prevariti.

Obrnuto takođe drži i više je važno: klijent šalje hibrid samo kada drži ključ, a držanje ključa je dokaz da primatelj može dekapsulirati.Nema stanja u kojem se poruka šalje post-kvantno nekome ko je ne može pročitati.

6Hibridna konstrukcija

Nymchat ne zamjenjuje NIP-44. Ona ga zagrljava.Nemodifikovani NIP-44 šifrirani tekst je unutrašnji sloj, a ML-KEM ključi vanjski AEAD oko 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)

Obje tajne još moraju biti pronađene da bi se čitala poruka: spoljni sloj donosi samo NIP-44 šifrirani tekst, a otvaranje koje treba klasični ECDH. Kvantni protivnik koji slomi secp256k1 dobija unutrašnji ključ i još uvijek se suočava sa ML-KEM-om; slom ML-KEM-a obriše spoljni sloj i ostavlja NIP-44 stajan.

ML-KEM ključ primatelja je dugotrajan, ali svaka poruka nosi nezavisni šifrirani tekst i stoga nezavisni šifrirani tekst. kem_ssTo je ono što čini da se izvodi nonce umjesto da se slučajno zvuči: Uslovi korišćenja ChaCha20-Poly1305 je prekinut ponovnom upotrebom (ključ, nonce) par, a ovdje je sam ključ novi za svaku poruku, tako da nijedan par ne može ponoviti.

6.1 Zašto slojevi ostaju odvojeni

Alternativa je da se obe tajne pomiješaju u jedan ključ za razgovor i da se taj ključ prenese na NIP-44:

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

Ta konstrukcija zvuči kao kriptografija. Ona ima jedan strukturni problem: ona treba ecdh_x, sirova x-koordinata izlaza ECDH, kao ključni materijal - i proširenje preglednika (NIP-07) ili daljinski potpisnik (NIP-46Izvršava NIP-44 u ime pozivača i vraća tekst šifriranja, što je čitava točka držanja ključa negde gde aplikacija ne može dostići.

Miješanje tajni stoga isključuje svaki login koji drži ključ identiteta u potpisniku, što znači da su najoprezniji korisnici, a nijedna količina rada na izvedenom ključu ga ne može promeniti.

ML-KEM šifrirni tekst je 1.088 bajta i vozi na svakoj poruci, base64url-kodiranoj na 1.451 znakova; vanjski AEAD dodaje 16-bitnu oznaku Poly1305 i proširuje korisno opterećenje NIP-44 koje obara za trećinu. Poruka od 50 znakova raste sa 176 bajta na 1.712, a poruka od 2.000 znakova od 2.820 do 5.238.

6.2 Self-opisujući payloads

Naši pq2. Prefix čini raspodjelu incrementalnim: to je samo-opisivanje, tako da klijent bira put dešifriranja ispitivanjem korisnog opterećenja umjesto da vjeruje oznaku ili pamti ono što peer podržava. čitalac koji ne prepoznaje prefix ne otvara taj korisni opterećenje umjesto da ga pogrešno pročita, a poruke zapečaćene prije bilo koje strane mogle bi post-kvantno ostati čitljive kao obični NIP-44 bez migracije.

Implicitno odbijanje

ML-KEM dekapsulacija je dizajnirana tako da nikada ne propadne: uzimajući u obzir pogrešan šifrirani tekst, Fujisaki-Okamoto transformacija vraća deterministsku pseudo-slučajnu tajnu umjesto greške. Pogrešan ključ stoga uopšte ne izlazi na površinu KEM sloja – on se pojavljuje kao neuspjeh HMAC-a unutar NIP-44, što je na isti način kao i pogrešna klasična ključna površina. Pozivači tretiraju oba jednako, tako da neuspjeh ne nosi razlikujući signal. To je i ono što čini listu kandidata u Odjeljku 9.1 funkcionalnom: klijent pokušava svaki ključ zauzvrat i dozvoljava NIP-44 da kaže koji je jedan bio ispravan.

6.3 Oba sloja poklon omotača

A NIP-17 Privatna poruka je a NIP-59 poklon omotač: neosignirana glasina, zapečaćena pod ključem identiteta pošiljatelja (vrsta 13), a zatim omotana pod ključem za bacanje generisanim po poruci (vrsta 1059). Na prijavi koja direktno drži ključ identiteta, Nymchat hibridizuje oba sloja, svaki sa svojom vlastitom enkapsulacijom.

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
Oba sloja šifriranja su hibridna, svaka sa nezavisnom ML-KEM enkapsulacijom. Vanjski sloj je ključan za tajnu koja se baca, tako da omotač ne otkriva pošiljatelja.

Prijava potpisnika dobija samo spoljni sloj. Pečat proizvodi potpisnik kao običan NIP-44 – aplikacija nikada ne vidi ključ koji ga čini – tako da se ne može hibridizovati na mestu. To ne košta ništa protiv napada u pitanju: pečat je dostupan samo kroz oklop, a oklop je ono što skladišti snimatelj. Neprijatelj koji drži zabilježen promet mora prekinuti ML-KEM prije nego što pečat bude čak vidljiv za napad.

7Grupne poruke i djelomična pokrivenost

Grupna poruka nije jedan šifrirani tekst. To je isti jednostavni tekst koji se šalje svakom članu, svaka kopija je ukapsulirana u taj članov ML-KEM ključ. Član koji je objavio ključ dobija hibridni omotač; onaj koji nema dobija klasični omotač.

To stvara računovodstveni problem da naivna implementacija pogreši. Ako osam od deset članova dobije hibridnu kopiju, poruka je ne protivnik treba jednu klasičnu kopiju jednostavnog teksta koji je identičan u svih deset, tako da je poruka zaštićena samo ako svaki To je kopija.

Nymchat stoga prati pokrivenost po poruci tokom fan-out-a - broj je znatan samo dok se ovijeće grade - a badge izvještava &ldquo;kvantno otporan na 8 od 10 članova&rdquo; umjesto da tvrdi da je poruka zaštićena. Preuzimanje grupna poruka (samo pošiljatelj broji fan-out), sučelje izvještava o djelomičnoj, a ne potpunoj zaštiti.

7.1 Šta izveštava štit

Štit govori istinu o Poruka, a ne o softveru koji ga je poslao:

Presuda je zabilježena kada je poruka zapečaćena, a ne rekapitulirana iz onoga što kolega oglašava kasnije. Ciphertext koji već postoji ne može postati bolje zaštićen nego što je bio, a interfejs koji je preoblikovao stare poruke na snagu novog oglasa tvrdi nešto lažno o bajtima na prenosu.

Skupina pravila iznad stack na vrhu ovog, a ne zamijeniti ga: grupa poruka je potpuno zaštićena samo kada je svaka kopija člana je, a primljena grupa poruka bez broja pokrivenosti prikazuje djelomično.

8Fotografije upućene samom sebi

Nekoliko stvari koje klijenti skladište su šifrovane prema korisnikovom identitetu: sinhronizovane postavke, lista razgovora, grupni ključevi i arhiva poruka. Ovi sadrže više o korisniku nego većina pojedinačnih poruka, tako da bi ih ostavljanje klasičnih učinilo najslabijim pohranjenim artefaktom bez obzira na to koliko su same poruke pažljivo zapečaćene. nymchat-pq-root sama kategorija, koja ne može biti zapečaćena pod ključem koji samo ona može proizvesti.

Blob postavki ili red arhiva sjedi na jednom mestu godinama, što je upravo oblik stvari koju sakuplja protivnik žetve-sada-dešifrovan-kasnije - daleko više od bilo koje pojedinačne poruke, koja je barem efemerna u vlastitom umu korisnika.

Jedno ograničenje ovde upravlja formatom, a ne ključem. svaki uređaj na računu, tako da svaki uređaj oglašava ono što može otvoriti u rasporedu njegov oglas nosi, a račun piše samo ono što svi oni mogu čitati.

Ograničenje koje vredi istaknuti

To je namjerna posledica, a ne nadzor, i zato Odjeljak 3.3 ima takav poziv uređaja za povezivanje umesto da bi nametnuo novi koren: drugi koren ne bi učinio blob čitljivim, samo bi podijelio ključni materijal identiteta na dva.

Uređaj koji pokreće proširenje pretraživača ili daljinski potpisnik (NIP-46) ne drži nsec za izvlačenje, ali ima kod za oporavak, a pod složenom konstrukcijom Odjeljka 6.1 to je sve što je post-kvantnoj polovici potrebno: potpisnik proizvodi NIP-44 sloj kao što uvek ima, a klijent ključi sam vanjski sloj.

9Rotacija

Naši epoch Broj u izvedenju je ono što omogućuje rotaciju bez novog ključnog materijala. Povećanje dobija novi ključni par iz istog korena i ponovno objavljenog oglasa; kolege uzimaju novi ključ iz zamjenjivog zapisa.

9.1 Stare epohe se čuvaju, a ništa se ne re-šifruje

Ništa se ne prepisuje kada se ključ okreće. klijent gradi kandidate za dešifrovanje od trenutne epohe do epohe &minus; 3, tako da poruka zapečaćena neposredno prije rotacije još uvijek se otvara protiv ključnog para koji je bio aktuelan kada je poslan.

Taj prozor je ono što čini rotaciju bezbednom: bez nje, svaka rotacija bi uništila sve što je bilo u letu. Sve što je već zapečaćeno ostaje čitljivo za život identiteta, jer poruka koju korisnik više ne može otvoriti je strogo gore za njih od one čija se zaštita ne može poboljšati retroaktivno (Odjeljak 10.5).

10Šta to ne štiti

Papir koji samo popisuje ono što dizajn postiže nije opisivanje sistema, a preterivanje bezbednosnog svojstva u sučelju je gore od propuštanja.

Korijen je druga tajna, a izgubiti ga nije moguće.

To je stvarna cijena dizajna. Ograničenje u odjeljku 2. da korisnik treba da ima tačno jednu stvar da drži ne može se ispuniti: nsec sam ne rekonstruiše post-kvantni ključ, jer je cela stvar u tome da ga nema javne vrijednosti i nikakve druge tajne ne otkriva. Ako nijedan uređaj ne drži korijen i nijedan od odjeljka 3.2 ne može da se otvori, materijal zapečaćen ključem korijena ne može se vratiti.

S ručnim prijenosom jedini put, ovo je oštrije nego što se može prvo pročitati. nympq1… kod bilo gde ima tačno jednu kopiju, na jednom uređaju, a gubitak tog uređaja gubi svaku post-kvantnu poruku, postavke blob i arhivski red zapečaćen na njemu. nsec ne pomaže; to je imovina na kojoj se čitav dizajn oslanja.

Napadač napada najjeftiniji put koji je dostupan, tako da je shema vrijedna onoga što je njegova najslabija ruta za oporavak vrijedna - memorabilna fraza, na primjer, stavila bi celu stvar na ono što je vrijedna fraza, a umotani red je upravo artefakt koji protivnik sakuplja i mlje offline u slobodno vrijeme.

10.2 Autentifikacija, kao razlika od povjerljivosti

Svaki potpis u Nostr je Schnorr nad secp256k1, a to je nepromenjeno ovdje. Neprijatelj s kvantnim računalom mogao bi falsifikovati potpise i pretvarati se da je korisnik u realnom vremenu. Ono što hibridna ključna razmjena porazi je žetva-sada-dešifriranje-kasnije: napadač koji danas beleži saobraćaj ne može je pročitati kasnije. To ne čini poruku neoprostivom protiv neprijatelja koji već ima mašinu. Ova razlika se prenosi u aplikacije namjerno – indikator padlock izvještava o autentifikaciji, štit izvještava o povjerljivosti, i oni su zasebni glyphs jer poruka može imati jednu bez druge.

Ona takođe ograničava ono što oglas u odjeljku 4 može obećati. Povezivanje između npub i ML-KEM ključa je potpis secp256k1, tako da protivnik koji može krivotvoriti te ključeve može zamijeniti vlastiti ključ.

10.3 Metapodatke

Poklon pakovanje skriva pošiljatelja, primatelja izvan jednog p oznaka, vrsta i vremenski žig unutrašnje poruke. Ne skriva da događaj postoji, njegovu veličinu, ili kada ga je prijenosnik primio.

10.4 Offline mreža

Nymchat Bluetooth mrežni transport je zaseban protokol sa sopstvenim rukovanjem, i nije obuhvaćen ovim radom.

10.5 Već poslane poruke

Ciphertext zabilježen dok je bilo koja strana je još uvek klasična ostaje klasična trajno. To već postoji i ne može se ponovo zapečatiti. Zaštita počinje na poruku gde su obe strane držali post-kvantne ključeve, a ne u trenutku kada je funkcija bila uključena.

11Razmatrane alternative

PristupZašto ne
Dobijanje post-kvantnog ključa iz ključa identiteta Odbijena. Derivacija je javni algoritam preko nsec, a kvantni protivnik oporavlja nsec iz objavljenog npub, tako da je klasicnu polovicu prekinuo preko post-kvantne polovice s njom.
Pošaljite korijen na druge uređaje korisnika preko NIP-44 Odbijen iz istog razloga u različitim odjevima. korijen prenesen pod klasičnom samo šifrovanjem može da se oporavi od bilo koga tko je snimio tu poruku i slomi njegov ključ kasnije, što je protivnik korijen postoji da zaustavi.
Samostalno generisan ML-KEM tipkovni par na svakom uređaju Odbijen. uređaji bi držali različite ključeve dekapsulacije, a jedan zamjenjiv oglas po identitetu ne može nositi sve. Peers bi šifrirali na koji ključ je objavljen zadnji, a svaki drugi uređaj ne bi mogao da pročita rezultat.
Stavite korijen ispod PIN-a Odbijen. četvoromjesečni PIN je oko 13 bitova protiv offline napadača koji drži uvučeni red. Ponuditi ga pored dva 256-bitna puta pogrešno bi predstavljalo koliko je najslabiji uvučeni red vrijedan.
Proširite npub da prenese oba ključa 1,184 bajta nije deljiv identifikator, i to bi prekinulo svaki postojeće Nostr klijenta analiziranje adrese koja je definirana kao 32 bajta.
Ključna reč: direktorijska usluga Ponovo uvodi autoritet koji mreža postoji da bi se izbjegao.Ko god odgovori na pretraživanje odlučuje ko može pročitati poruku.
Pripremite ključ za svaku poruku Ne rješava ništa: pošiljatelj treba Prijemnik ključ prije prve poruke, što je upravo slučaj bez prethodne poruke da ga prenese.
In-band sposobnost pregovaranja Napadač koji može skinuti zastavu sposobnosti prisiljava klasični put.
Samo postkvantno, bez klasične noge Odbaci desetljeća analize secp256k1 u zamenu za mnogo mlađi primitiv. oboje Neuspeh

12Paritet implementacije

Nymchat isporučuje dve nezavisne implementacije ove konstrukcije – jednu u JavaScript-u za web aplikaciju, drugu u Dart-u za mobilne aplikacije, uključujući i port ML-KEM-768.

Dart ML-KEM implementacija je validirana protiv zvaničnog Uslovi korišćenja ACVP Poznati odgovori testova za ML-KEM-768 (ML-KEM-*-FIPS203) — 25 ključnih generacija, 25 enkapsulacija i 10 slučajeva dekapsulacije, pokrenuti kao vlastiti paket. To su vektori koje NIST objavljuje kako bi potvrdio implementaciju, tako da je njihovo prenošenje dokaz da je port ispravan, a ne samo dokaz da se dva klijenta slažu jedni s drugima. Pored toga, zajednička fiksacija test vektora – derivata sjemena, enkapsulacije, oba formata korisnog opterećenja i kompletnih darova – generisana je iz JavaScript reference i provjerena od strane oba test paketa. Root secret proširuje tu fiksu umjesto da je zamijeni: koren na seme, koren na ključ, javni otisak korena, i derivirani ključ, nonce i povezani podaci vanjskog sloja su njihovi vektor nympq1… Divergencija u bilo kojoj implementaciji ne uspijeva izgraditi umesto da proizvede poruku koju drugi klijent ne može otvoriti.

To je ono što govori uređaj &ldquo;to je koren držim&rdquo; od &ldquo;to je drugačiji jedan&rdquo;, a klijent koji nije mogao reproducirati otisak prsta drugog klijenta čitao bi savršeno dobar zapis kao nikakav zapis uopće - a zatim, nakon Odjeljka 3.3, mint drugi koren i podijeliti identitet.

Nymchat je otvorenog izvora pod AGPL-3.0. Kriptografsko jezgro opisano ovdje je js/nym-crypto.js i js/modules/pq.js na web stranici klijenta, i lib/core/crypto/ sa lib/features/identity/pq_registry.dart U mobilnim klijentima.

Za kraće, ne-tehničko objašnjenje, pogledajte stranica baze znanja o kvantno otpornom enkripciji.