Techninė whitepaper
Post-Quantum raktų susitarimas Nymchat
ML-KEM-768 viešųjų raktų platinimas per „Nostr“ be katalogo ar registro ir jų sėjinėjimas iš paslapties, kurios jokios viešosios vertės neatskleidžia.
Post-kvantinio raktų mainų pridėjimas prie pasiuntinio dažniausiai nėra kriptografijos problema.Primityvai yra standartizuoti, o bibliotekos egzistuoja.Sunkiausia dalis yra ta, kad kiekvienam dalyviui dabar reikia Antrasis Šis straipsnis apibūdina, kaip Nymchat atsako į tai - iš kur antrasis raktas ateina, kaip jis pasiekia žmones, kuriems jis reikalingas, ir ką sąsaja leidžiama teigti apie rezultatą - ir, paskutiniame skyriuje, ką tas rezultatas neapsaugo.
Patogumui šis puslapis išverstas mašininiu būdu. Tinkama versija anglų kalba.
1Problema yra
Mūsų privatūs pranešimai yra užšifruoti su NIP-44Pusė, kuri sukrėtė paprastą tekstą – ChaCha20 su HMAC-SHA256 žyme, paslėpta per HKDF (RFC 5689 straipsnis) – nėra reikšmingai grėsmė kvantiniam kompiuteriui; Groverio algoritmas kainuoja kvadratinės šaknies pagreitį prieš simetrišką raktą, o 256 bitai sugeria tą pusę. Sutinka ant rakto yra elipsinė kreivė Diffie-Hellman per Kėdainiai256K1, ir Shoro algoritmas išsprendžia diskretišką logaritmą visiškai.Atgauti vieną privatų raktą iš savo viešojo kolegos atgaline data atskleidžia kiekvieną bendrą paslaptį, kad raktas kada nors sukūrė.
Grėsmė, kurią tai sukuria, nėra atidėta tol, kol tokia mašina egzistuoja. Priešininkas, turintis saugyklą, šiandien gali įrašyti šifravimo tekstą ir iššifruoti jį kiekvieną kartą, kai pajėgumas atvyksta. Viskas, kas dabar siunčiama, o tai vis dar svarbu, jau yra pažeista.
1.1 Klausimas, į kurį ši knyga atsako
Pavyzdžiui, norint išspręsti šią problemą, būtina atlikti išankstinį tyrimą, kurio metu būtų nustatyta, kaip išspręsti bet kokią problemą, o ne išspręsti bet kokią problemą. „Nymchat“ naudoja ML-KEM-768 (Kėdainiai 203Tai iš karto kelia paskirstymo problemą:
Norėdami pranešti Alice šiandien, jums reikia vieno dalyko: jos npub. Pridėkite post-kvantinį mainą ir jums reikia antrojo - jos ML-KEM viešojo rakto.
NPUB yra savarankiškas.Jūs galite jį parašyti popieriuje, perskaityti garsiai arba nuskaityti jį iš ekrano, ir tai yra viskas, ko jums reikia užšifruoti.ML-KEM-768 viešasis raktas yra 1,184 bajtai.Jis negali būti skaitomas garsiai, jis netelps į vartotojo vardą, ir jis nepriklauso QR kodui be tapatybės, kuri yra tik 32 bajtai.
Sunkiausia dalis yra ta, kad antrasis raktas atneša tris skirtingas problemas, o likusi šio dokumento dalis iš esmės yra atsakymas į juos:
- Jis gali būti pakeistas. Raktas, kurio niekas negali perskaityti iš pirmo žvilgsnio, yra būtent tai, ką užpuolikas apsikeičia savo.
- Jis turi būti suderintas tarp vartotojo įrenginių. Ta pati sąskaita telefone ir nešiojamas kompiuteris turi pateikti tą patį raktą, arba pranešimai, užantspauduoti į vieną, negali būti atidaryti kitoje.
- Jis gali būti prarastas. Viešasis raktas atnaujinamas iš paslapties, taigi tai, kas iš tikrųjų turi išgyventi, yra ta paslaptis - ir statyba nieko kito jo neatkuria.
2Dizaino apribojimai
Keturi apribojimai suformulavo atsakymą, ir jie atmeta daugumą akivaizdžių dizainų prieš bet kokį kodą.
- Kaip įmanoma mažiau paslapčių. Kiekviena papildoma paslaptis yra kitas būdas prarasti savo istoriją, o kas nors, kas žino, kaip atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsargines atsarg
- Jokių autoritetų Nėra jokio serverio, kuriuo galima pasitikėti, kad būtų galima pasakyti, kuris raktas priklauso kam.
- Daugybė įrankių, viena tapatybė Nostr tapatybė paprastai naudojama iš kelių klientų vienu metu. nesvarbu, kokia pagrindinė medžiaga egzistuoja, ji turi baigtis identiška visose iš jų, o keliai, kurie ją atneša, patys negali būti skaitomi priešininko, nuo kurio funkcija gina.
- Jokių derybų Bet koks mainai juostoje “kurie šifrai palaikote?” yra paviršius, kurį užpuolikas gali nuimti, kad priverstų silpnesnį variantą.
3Nepriklausoma šaknies paslaptis
Svarbus sprendimas yra tas, kad ML-KEM dekapsuliacinis raktas yra sėjamas iš pagrindinės medžiagos, kurios jokios viešosios vertės neatskleidžia.
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)
Šaknis pateikiamas vartotojui taip, kaip yra nsec: Kėdainiai32 Žmogaus skaitomojo prefikso
nympqJis skaito kaip nympq1…, rodomas šalia nsec tapatybės ekrane už tos pačios atskleisti sąveikos, nukopijuotas su ta pačia valdikliu, niekada neprisijungė ir niekada nesiuntė niekur aiškiai.
Druska yra tikslingai atskirta nuo domeno, todėl jokia kita paslaptis niekada negali gauti tos pačios raktų poros. epoch Sunkvežimio srautas ( 9 skirsnis )
3.1 Kodėl raktas negali būti išvestas iš tapatybės rakto
Akivaizdus dizainas yra sėti raktų porą iš paslapties, kurią vartotojas jau turi:
seed = HKDF(salt = "…", IKM = nsec) // do not do this
Tai patraukli dėl keturių priežasčių, visi jie yra realūs: nieko naujo atsarginėti, nes nsec jau yra atsarginė kopija; kiekvienas įrenginys, kuris sutinka pagal konstrukciją, be sinchronizavimo protokolo, kad jis būtų neteisingas; vienas pakeičiamas skelbimas vienai tapatybei yra akivaizdžiai teisingas, nes įrenginiai negali nesutikti dėl rakto; ir raktas, kuris egzistuoja prieš jį kada nors paskelbiant, kad klientas galėtų užantspauduoti kažką sau pirmą kartą.
Visi keturi privalumai yra beverčiai, dėl vienos priežasties. Shoro algoritmas veikia prieš paskelbtą npub duoda nsec. Sėklų išvestis yra viešas algoritmas prieš nsec. Taigi priešininkas, kuris sulaužo klasikinę pusę, atstato post-kvantinę pusę, paleisdamas tą patį HKDF, kurį veikia visi kiti.
ML-KEM dekapsuliacijos raktas turi ateiti iš entropijos, kuri nėra nei išvestinė iš nsec, nei kada nors perduodama pagal klasikinį tik šifravimą.
Nepriklausomai sukurta paslaptis, kuri tada sinchronizuojama tarp vartotojo įrenginių įprastoje NIP-44 žinutėje, yra ta pati nesėkmė su papildomais žingsniais: priešininkas šiandien registruoja tą pranešimą ir vėliau atgauna savo klasikinį raktą, o šaknis išnyksta.
3.2 Šaknų įvedimas į kitus naudotojo įrenginius
2 skirsnio 3 apribojimas – viena tapatybė, keli prietaisai – čia negali būti patenkinti aritmetika, nes visas dalykas yra tas, kad raktas nėra kažko, ką jau dalijasi prietaisai, funkcija. nympq1… Kodai patys
Šaknis pateikiamas kaip nympq1… šalia nsec, ir antrasis prietaisas priima jį įklijuoti į tą patį skydelį.Tai yra visas mechanizmas. Prietaisas, kuriam nebuvo suteiktas kodas negali dalyvauti, kuris aprašomas 4.2 skyriuje.
3.1 skirsnio taisyklė sako, kad šaknis niekada negali keliauti pagal klasikinį tik šifravimą, ir kiekvienas mechanizmas, kuris padėtų tai padaryti automatiškai – sinchronizuojant jį per siųstuvą, supakuojant jį į tapatybės raktą – pažeidžia būtent tai.
Formatas palieka erdvę pakabinamam keliui: įrašas gali turėti pakabinimų sąrašą, kiekvienas AEAD blob pagal raktą, kurį vartotojas gali atkurti kitame įrenginyje - pavyzdžiui, passkey PRF išvestis. nympq1… Kodas yra vienintelis būdas peržengti.10.1 skyrius nurodo, kiek tai kainuoja.
Pats įrašas gyvena savo nustatymų kategorijoje, nymchat-pq-rootNet nešiojant jokių apvyniojimų, jis atlieka būtiną darbą: jo buvimas yra tai, kaip antrasis įrenginys sužino, kad ši tapatybė jau turi šaknį, o tai neleidžia jai minti konkurentą (3.3 skirsnis).
Tų nymchat-pq-root Kategorijos MUST ne Ši eilutė turi vienintelę šaknies kopiją, taigi užantspauduodama ją pagal šaknies raktą yra užraktas, kurio raktas yra dėžutėje: joks prietaisas niekada negalėjo atidaryti jo, įskaitant tą, kuris jį parašė.
Kiekviena kita nustatymų kategorija gali ir turėtų naudoti šaknų išvestinį raktą.Tai yra vienintelė išimtis, ir tai yra išimtis dėl apskrities, o ne dėl stiprumo.
3.3 Generavimas ir įvaikinimas
Pradžioje, laikydamas ilgalaikę tapatybę, klientas veikia šioje tvarkoje:
- Ieškoti esamo
nymchat-pq-rootUžfiksuoti įrašai. - Įrašas rasta, ir šis prietaisas gali atsikratyti jo - priimti ją ir paskelbti šią tapatybę kaip post-kvantinį pajėgumą.
- Rastas įrašas, o šis įrenginys jo neatskleis - nesukurkite naujos šaknies ir nepublikuokite jokių skelbimų.Prašykite vartotojo susieti šį įrenginį įvesdami
nympq1…kodą iš įrenginio, kuris jau turi jį. - Rekordų nėra - sukurti šaknį, paskelbti įrašą, paskelbti ir parodyti
nympq1…kodą vartotojui vieną kartą, kad jie galėtų jį išsaugoti.
3 žingsnis yra žingsnis, kurį lengva suklysti, ir tai yra priežastis, kodėl užsakymas yra parašytas, o ne paliktas kiekvienam įgyvendinimui.Du įrenginiai, kurių kiekvienas nusprendžia generuoti šaknį, gamina dvi nepriklausomas šaknis pagal vieną tapatybę, ir tai yra šio užsakymo nesėkmė, kad būtų užkirstas kelias.
4Galimybių skelbimas
Viešoji pusė išvestinės raktų poros skelbiama kaip adresuojama
Nėrinė-01
renginys — rūšis 30078, pažymėtas 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": [ ... ]
}
}
Adresuojamas reiškia, kad perdavėjas išlaiko vieną įvykį (kind, pubkey, d-tag), todėl republish pakeičia ankstesnį skelbimą vietoje.
Pasirašymas yra privalomas. Įvykis yra pasirašytas tapatybės raktu, todėl teiginys “šis ML-KEM raktas priklauso šiam npub” yra lygiai toks pat stiprus, kaip ir pats npub. Pakeisti kitą įkabinimo raktą reikalauja sukurti secp256k1 parašą. Užpuolikas, kuris gali tai padaryti, neturi nerimauti su KEM.
Pranešimai baigėsi. Septynios dienos NIP-40 Pasibaigimas, vėl paskelbtas kas 24 valandas, saugo įrašą apie pareiškimą apie klientą, kuris vis dar veikia, o ne tas, kuris anksčiau buvo.
Praleistas skelbimas skaitomas lygiai taip pat, kaip ir tas, kuris niekada nešiojo raktą: bendraamžiai siunčia įprastą NIP-44, kurį kiekvienas prisijungimas gali perskaityti, o klientas atnaujina post-kvantinį mainus kito ryšio metu, kai jis vėl skelbiamas.Todėl tylėjimas ilgiau nei savaitę kainuoja apsaugą pranešimams, siunčiamiems per spragą - jie yra klasiškai užšifruoti, o ne atsparūs kvantui - ir nieko nekainuoja.
Be jo, įrašas išgyvena už raktą, kurį jis vadina: prietaisas, kuris yra ištrintas, iš naujo nustatytas arba jo šaknis pakeistas, palieka stovintį nurodymą įklijuoti į raktą, kurio niekas nebeturi, ir po jo siunčiami pranešimai prarandami be jokios klaidos iš abiejų pusių.
Pagrindinis laukas vadina savo formatą. Laukas yra pk2, ir skaitmuo yra sutarties dalis, o ne dekoravimas: jis vadina naudingos apkrovos formatą, su kuriuo gali būti naudojamas raktas. Skaitytojas, kuris nepripažįsta lauko, baigiasi "Nymchat" klientu, nėra post-kvantinio rakto ir siunčia įprastą NIP-44, kurį kiekvienas prisijungimas gali perskaityti. Tai yra teisinga nesėkmės kryptis, ir verta pabrėžti, kaip taisyklę, kad egzistuoja formato numeracija: nepripažintas pajėgumų reikalavimas turi kainuoti apsaugą, niekada pristatyti. raktas, kurio negalima naudoti, yra blogesnis nei joks raktas, nes pranešimas, kurį jis gamina, yra prarastas be klaidos abiejose pusėse.
4.1 Trūkumas yra reikšmingas ir triskart vertinamas
Subtilus, bet svarbi detalė: skelbimą skelbia kiekvienas „Nymchat“ klientas, o ne tik tie, kurie gali atlikti post-kvantinį darbą, o raktinis laukas yra neprivalomas.
| Stebėta | Reiškia | Siųsti elgesį |
|---|---|---|
| Pranešimas su rakteliu | Nymchat, post-kvantinis pajėgus | Hibridinė |
| Pranešimas, jokių raktų | Nymchat, klasikinis tik - po kvantinio išjungimo, arba įrenginys, dar nesusijęs su tapatybės šaknimis | Klasikinė NIP-17 |
| Jokių skelbimų | Nežinomas klientas. gali būti bet kuris „Nostr“ ar „Bitchat“ vartotojas | Klasikinis, plius suderinamumo apvalkalas |
Paskelbimas be rakto yra pasirašytas pareiškimas, kad siuntėjas paleidžia Nymchat, kuris leidžia siuntimo keliui praleisti spekuliatyvią kryžminio protokolo apvyniojimą, kurį jis kitaip turės įtraukti visiems, kurių jis negali identifikuoti.
4.2 Prietaisas, kuris negali atidaryti šaknų, lieka tylus
Pranešimas yra pakeičiamas: vienas įvykis vienai tapatybei, paskutinis rašymas laimi.Tai daro vieno įrašo dizainą, ir tai taip pat daro nesusijusį įrenginį pavojingą, jei jis paskelbia.Įrenginys, kuris paskelbė raktą, kurį jis buvo užrašęs sau, užgniaužtų tikrąjį įrašą ir siųstų kiekvieną kolegą šifruoti pagal raktą, kurio kiti įrenginiai negali atidaryti.
Taigi prietaisas, kuris žino šaknį, egzistuoja, bet negali atidaryti jo, apskritai nepaskelbia jokių skelbimų.Jis nėra sulaužytas ir nėra užrakintas iš programos: jis vis dar skaito kiekvieną pranešimą, kuriam jis turi raktus, ir vis dar siunčia klasikiniu būdu, ragindamas vartotoją jį susieti.
5Atradimas ir sprendimas siųsti
Klientai išmoksta bendraamžių raktus dviem būdais. Nuolatinis prenumerata apima žmones, su kuriais vartotojas iš tikrųjų atitinka – atvirus pokalbius ir grupės narius – todėl jų skelbimai atvyksta kaip įprasti įvykiai.
Vartotojas, kuris jungia naują įrenginį, arba kuris pereina nuo naršyklės plėtinį prisijungti prie vietinio rakto, tampa post-kvantinis pajėgus viduryje pokalbio, ir nuolat talpyklos “ne” būtų išlaikyti juos klasikinio šifravimo per skelbimo gyvenimą.
5.1 Kodėl nėra nuvertinimo atakos
Sprendimas dėl maršruto sumažėja iki vieno klausimo:
pq = (we hold a signed, unexpired ML-KEM key for this recipient)
Nėra jokių gebėjimų derybų, jokių palaikomų algoritmų sąrašų ir jokio lauko, kurį užpuolikas gali išvalyti, kad priverstų silpnesnį kelią. yra Nesėkmės būdas pašalintas arba susilaikytas skelbimas yra tai, kad pranešimas eina klasikinis - status quo prieš šią funkciją - o ne kad hibridinis pranešimas yra sumažintas į kažką klastingas.
Atvirkščiai taip pat yra ir svarbiau: klientas siunčia hibridą tik kai jis turi raktą, o raktas yra įrodymas, kad gavėjas gali iškasti.Nėra būsenos, kurioje pranešimas siunčiamas post-kvantiniu būdu kažkam, kuris negali jį perskaityti.
6Hibridinė konstrukcija
Nepakeistas NIP-44 šifravimo tekstas yra vidinis sluoksnis, o ML-KEM paspaudžia išorinį AEAD aplink jį:
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)
Abi paslaptys vis dar turi būti atkurtos, kad būtų galima perskaityti pranešimą: išorinis sluoksnis duoda tik NIP-44 šifravimo tekstą, o atidarymas, kuriam reikia klasikinio ECDH. Kvantinis priešininkas, kuris sulaužo secp256k1, gauna vidinį raktą ir vis dar susiduria su ML-KEM; ML-KEM pertrauka nupjauna išorinį sluoksnį ir palieka NIP-44 stovint.
kem_ssNiekas šioje išvestinėje medžiagoje nepalies žaliavinės ECDH išvesties, o tai yra tai, ką sukuria 6.1 skirsnis.kem_ct,recip_kem_pkir abu tapatybės raktai yra susieti kaip susiję duomenys, todėl išorinis sluoksnis yra įsipareigojęs tiksliam transkriptui, kuris jį sukūrė.
Gavėjo ML-KEM raktas yra ilgalaikis, tačiau kiekvienas pranešimas turi nepriklausomą šifravimo tekstą ir todėl nepriklausomą šifravimo tekstą.
kem_ssTai yra tai, kas leidžia išvesti nonce, o ne atsitiktinai jį skamba:
ChaCha20-Poly1305 apžvalga
yra nutrauktas pakartotinai naudojant (rakto, ne) porą, o čia pats raktas yra naujas kiekvienam pranešimui, todėl jokia pora negali pakartoti.
6.1 Kodėl sluoksniai lieka atskirti
Alternatyva yra sumaišyti abi paslaptis į vieną pokalbio raktą ir perduoti jį NIP-44:
ck = HKDF-Extract(salt = "…",
IKM = ecdh_x || kem_ss || …) // do not do this
Ši konstrukcija skamba kaip kriptografija.Ji turi vieną struktūrinę problemą: ji turi
ecdh_x, žaliavos x-koordinatas iš ECDH išvesties, kaip pagrindinė medžiaga - ir naršyklės plėtinys (NIP-07) arba nuotolinio parašo (NIP-46Jis atlieka NIP-44 skambintojo vardu ir grąžina šifravimo tekstą, kuris yra visas taškas, kai raktas laikomas ten, kur programa negali pasiekti.
Taigi, maišant paslaptis, neįtraukiamas kiekvienas prisijungimas, kuris saugo tapatybės raktą pasirašyme, tai yra, labiausiai atsargūs vartotojai, ir joks darbo kiekis dėl raktų išvestinės gali jį pakeisti.
ML-KEM šifravimo tekstas yra 1,088 baitų ir važiuoja ant kiekvieno pranešimo, base64url-koduojamas iki 1,451 simbolių; išorinis AEAD prideda 16 baitų Poly1305 žymeklį ir išplečia NIP-44 naudingąją apkrovą, kurią jis supa trečdaliu. 50 simbolių pranešimas auga nuo 176 baitų iki 1,712, o 2000 simbolių vienas nuo 2,820 iki 5,238.
6.2 Savarankiškai apibūdinami mokėjimai
Tų pq2. prefiksas daro diegimą inkrementaliu: jis apibūdinamas savarankiškai, todėl klientas pasirenka dekodavimo kelią, tikrindamas naudingąją apkrovą, o ne pasitikėdamas žyme arba prisimindamas, ką palaiko bendraamžiai. skaitytojas, kuris nepripažįsta prefikso, nesugeba atidaryti tos naudingosios apkrovos, o ne neteisingai ją perskaityti, o pranešimai, užantspauduoti prieš bet kurią pusę, gali padaryti post-kvantinį skaitymo būdą kaip įprastas NIP-44 be migracijos.
ML-KEM dekapsuliacija yra sukurta taip, kad niekada nepavyktų: atsižvelgiant į iškraipytą šifravimo tekstą, Fujisaki-Okamoto transformacija grąžina deterministinę pseudo-atsitiktinę paslaptį, o ne klaidą. Todėl klaidingas raktas KEM sluoksnyje iš viso nepatenka – jis išryškėja kaip HMAC gedimas NIP-44 viduje, kuris yra toks pat, kaip ir klaidingas klasikinis raktas. Skambintojai abu elgiasi identiškai, todėl gedimas neturi skiriamojo signalo. Tai taip pat yra tai, kas leidžia dirbti 9.1 skirsnio kandidatų sąraše: klientas bando kiekvieną raktą savo ruožtu ir leidžia NIP-44 pasakyti, kuris buvo teisingas.
6.3 Abu dovanų tvarsčio sluoksniai
A NIP-17 Asmeninė žinutė yra a NIP-59 dovanų apvyniojimas: nepasirašytas gandas, užantspauduotas pagal siuntėjo tapatybės raktą (13 rūšis), tada apvyniotas pagal kiekvieno pranešimo generuojamą išmetamą raktą (1059 rūšis).
Pasirašiusiojo prisijungimas gauna tik išorinį sluoksnį. Slėpinį gamina pasirašiantis asmuo kaip įprastą NIP-44 - programa niekada nemato raktą, kuris jį sukuria, todėl jis negali būti hibridizuotas vietoje. Tai nieko nekainuoja prieš atitinkamą ataką: slėpinį galima pasiekti tik per apvyniojimą, o apvyniojimas yra tai, ką įrašymo įrenginys saugo. Priešininkas, turintis įrašytą srautą, turi nutraukti ML-KEM, kol slėpinys netgi matomas puolimui.
7Grupės pranešimai ir dalinė aprėptis
Grupės pranešimas nėra vienas šifravimo tekstas. Tai tas pats paprastas tekstas, išsiųstas kiekvienam nariui, kiekviena kopija įdėta į to nario ML-KEM raktą. narys, kuris paskelbė raktą, gauna hibridinį apvyniojimą; tas, kuris neturi klasikinio apvyniojimo.
Tai sukuria apskaitos problemą, kad naivus įgyvendinimas yra neteisingas. Jei aštuoni iš dešimties narių gauna hibridinę kopiją, pranešimas yra ne Aštuoni dešimtadaliai apsaugoti. priešininkui reikia vienos klasikinės teksto kopijos, kuri yra identiška visose dešimtyje, todėl pranešimas yra apsaugotas tik tuo atveju, jei kas Tai yra kopija.
Todėl "Nymchat" seka kiekvieno pranešimo aprėptį fanų išsiuntimo metu - skaičius yra žinomas tik tuo metu, kai yra sukurtos pakuotės, o ženklas praneša "kvantinis atsparumas 8 iš 10 narių", o ne teigia, kad pranešimas yra apsaugotas. gavo grupės pranešimas (tik siuntėjas skaičiuoja gerbėją), sąsaja praneša apie dalinę, o ne visišką apsaugą.
7.1 Ką praneša skydas
Skydas sako tiesą apie Žinutė, o ne apie programinę įrangą, kuri jį išsiuntė:
- Visiška apsauga: kiekviena šio paprasto teksto kopija buvo hibridinė.
- Dalinis: kai kurios grupės pranešimo kopijos išeidavo klasikinės, o ne pilnos, nes viena klasikinė paprasto teksto kopija, identiška visoms, yra priešininko poreikis.
- Klasikinis yra išreikštas tiesiai, o ne rodomas kaip joks ženklas, nes trūkstamas indikatorius yra dviprasmiškas tarp “ neapsaugotas”, “ sulaužytas” ir “šis statinys neturi funkcijos”.
Teismo sprendimas įrašomas, kai pranešimas yra užantspauduotas, o ne iš naujo apskaičiuojamas iš to, ką vėliau reklamuoja bendraamžiai. jau egzistuojantis ciphertext negali tapti geriau apsaugotas nei buvo, o sąsaja, kuri iš naujo išdėstė senus pranešimus dėl naujo skelbimo stiprumo, teigia kažką neteisingo apie bajtus perdavime.
Grupės taisyklės viršuje kaupiasi viršuje, o ne jį pakeisti: grupės pranešimas yra visiškai apsaugotas tik tada, kai buvo kiekvieno nario kopija, o gautas grupės pranešimas be aprėpties skaičiavimo rodo dalinį.
8Kopijos, skirtos sau
Keletas dalykų, kuriuos klientas saugo, yra užšifruoti naudotojo tapatybei: sinchronizuoti nustatymai, pokalbių sąrašas, grupės raktai ir pranešimų archyvas. Jie perneša daugiau apie vartotoją nei dauguma atskirų pranešimų, todėl palikdami juos klasikinius, jie taptų silpniausiu saugomu artefaku, nepriklausomai nuo to, kaip kruopščiai pačios pranešimai buvo užantspauduoti. nymchat-pq-root pačios kategorijos, kuri negali būti užantspauduota pagal raktą, kurį gali pagaminti tik ji.
Nustatymų blob arba archyvų eilutė daugelį metų sėdi vienoje vietoje, o tai yra būtent tai, ką surenka priešininkas - dabar-dešifruotas-vėliau - daug daugiau nei bet koks vienas pranešimas, kuris vartotojui yra bent jau trumpalaikis.
Vienas apribojimas reglamentuoja formatą čia, o ne raktą. kas kiekvienas įrenginys reklamuoja tai, ką jis gali atidaryti savo skelbimo lentelėje, o sąskaita rašo tik tai, ką visi jie gali perskaityti.
Prietaisas, turintis tapatybę, bet ne šaknis, negali atidaryti nieko, kas užantspauduota šaknies išvestiniam raktui, įskaitant savo nustatymus.Tai yra tyčinė pasekmė, o ne priežiūra, ir todėl 3.3 skirsnyje yra toks prietaiso raginimas susieti vietoj šviežios šaknies: antroji šaknis nesudaro blobo įskaitomo, ji tik padalins tapatybės raktinę medžiagą į dvi dalis.Kol vartotojas nesusišalina, prietaisas ir toliau veikia – jis skaito tai, kam jis turi raktus, ir siunčia klasikiniu būdu.
Prietaisas, kuriame veikia naršyklės plėtinys arba nuotolinis pasirašytojas (NIP-46), neturi nsec, iš kurio būtų galima gauti, tačiau jis turi atkūrimo kodą, o pagal 6.1 skirsnio sluoksniuotą konstrukciją tai yra viskas, ko reikia po kvantinės pusės: pasirašytojas gamina NIP-44 sluoksnį, kaip jis visada turi, o klientas užrakina patį išorinį sluoksnį.
9rotacijos
Tų epoch Skaičiuoklė išvestinėje yra tai, kas leidžia sukti be naujos rakto medžiagos. padidinus ją, gaunama nauja rakto pora iš tos pačios šaknies ir pakartotinai paskelbtas skelbimas; bendraamžiai paima naują raktą iš pakeičiamojo įrašo.
9.1 Senovės epochos išsaugomos, ir niekas nėra iš naujo užšifruotas
Klientas sukuria dešifravimo kandidatus nuo dabartinės epochos iki epochos − 3, todėl pranešimas, užantspauduotas prieš pat sukimąsi, vis dar atsidaro prieš raktų porą, kuri buvo dabartinė, kai ji buvo išsiųsta.
Tas langas yra tai, kas daro sukimąsi visiškai saugus: be jo, kiekvienas sukimas būtų sugadintas, kas buvo skrydžio metu.Viskas, kas jau užantspauduota lieka įskaitoma visą tapatybės gyvenimą, nes pranešimas, kad vartotojas nebegali atidaryti yra griežtai blogiau jiems nei tas, kurio apsauga negali būti pagerinta atgaline data (10.5 skirsnis).
10Ką tai neapsaugo
Popierius, kuris tik išvardija tai, ką dizainas pasiekia, neapibūdina sistemos, o saugumo savybės pervertinimas sąsajoje yra blogesnis nei jo praleidimas.
Šaknis yra antroji paslaptis, o prarasti ją neįmanoma.
Tai yra tikroji dizaino kaina. 2 skirsnyje nustatytas apribojimas, kad vartotojas turėtų turėti tiksliai vieną dalyką, kurio reikia laikyti, negali būti įvykdytas: vien nsec nekonstruoja post-kvantinio rakto, nes visas dalykas yra tas, kad nėra jokios viešosios vertės ir jokios kitos paslapties, atskleidžiančios jį. Jei joks prietaisas neturi šaknų ir nė vienas iš 3.2 skirsnio apvalkalų negali būti atidarytas, medžiaga, užantspauduota į šaknų išvestinį raktą, negali būti atkurta.
Su rankiniu perdavimu vienintelis kelias, tai yra aštresnis nei jis gali skaityti pirmą kartą. nympq1… kodas bet kur turi tiksliai vieną jo kopiją, viename įrenginyje, ir prarandant tą įrenginį praranda kiekvieną post-kvantinį pranešimą, nustatymus blob ir archyvų eilutę, uždarytą prie jo.
nsec nepadeda; tai yra nuosavybė, kuria remiasi visas dizainas.
Užpuolikas atakuoja pigiausią prieinamą kelią, todėl schema yra verta to, ką vertas silpniausias atkūrimo maršrutas - įsimintina slaptažodis, pavyzdžiui, visą dalyką įdėtų į tai, kas yra slaptažodžio vertė, o supakuota eilutė yra būtent artefaktas, kurį priešininkas surenka ir nupjauna laisvalaikiu.
10.2 Autentifikavimas, išskyrus konfidencialumą
Kiekvienas „Nostr“ parašas yra „Schnorr“ per „secp256k1“, o tai čia nesikeičia. Priešininkas su kvantiniu kompiuteriu galėtų suklastoti parašus ir apsimesti naudotoju realiu laiku. Kas hibridinė raktų mainų pergalė yra derliaus nuėmimas-dabar-dešifravimas-vėliau: užpuolikas, registruojantis srautą šiandien, negali jį perskaityti vėliau. Tai nepadaro pranešimo nepagrįsto priešininkui, kuris jau turi mašiną. Šis skirtumas yra sąmoningai perkeltas į programas – padlock indikatorius praneša apie autentiškumą, skydas praneša apie konfidencialumą, ir jie yra atskiri glifai, nes pranešimas gali turėti vieną be kito.
Jis taip pat apriboja tai, ką gali pažadėti 4 skirsnyje pateiktas skelbimas.Susijimas tarp npub ir ML-KEM raktų yra secp256k1 parašas, todėl priešininkas, kuris gali suklastoti tuos raktus, gali pakeisti savo raktą.
10.3 Metaduomenys
Dovanų apvyniojimas slepia siuntėją, gavėją už vieno p žymėjimas, vidinio pranešimo tipas ir laiko žymėjimas. Jis neslėpia, kad įvykis egzistuoja, jo dydis, arba kai perdavėjas jį gavo.
10.4 Nepriklausomas tinklelis
"Nymchat" "Bluetooth" tinklelio perdavimas yra atskiras protokolas, turintis savo ranką, ir šis darbas neapima.
10.5 Jau išsiųsti pranešimai
Skaitmeninis tekstas, įrašytas tuo metu, kai abi pusės vis dar buvo klasikinės klasikinės visam laikui. Jis jau egzistuoja ir negali būti iš naujo užantspauduotas. Apsauga prasideda nuo pranešimo, kuriame abi pusės laikė post-kvantinius raktus, o ne tuo metu, kai funkcija buvo įjungta.
11Apsvarstomos alternatyvos
| požiūris | Kodėl ne |
|---|---|
| Paimkite post-quantum raktą iš tapatybės rakto | Išvestis yra viešas algoritmas per nsec, o kvantinis priešininkas atgauna nsec iš paskelbto npub, todėl sulaužyti klasikinę pusę rankas per post-kvantinės pusės su juo. |
| Siųsti šaknį į kitus naudotojo įrenginius per NIP-44 | Šaknį, perduodamą pagal klasikinį tik šifravimą, gali atkurti kiekvienas, kuris įrašė tą pranešimą ir vėliau sulaužo jo raktą, kuris yra priešininkas, kurio šaknis egzistuoja, kad jį sustabdytų. |
| Atskirai sukurta ML-KEM klaviatūra kiekviename įrenginyje | Prietaisai laikytų skirtingus dekapsuliacinius raktus, o vienas pakeičiamas skelbimas vienai tapatybei negali nešti jų visų. „Peers“ užšifruotų, į kurį raktas buvo paskelbtas paskutinį kartą, ir kiekvienas kitas įrenginys negalėtų perskaityti rezultato. |
| Apvyniokite šaknį pagal PIN | Atmestas. keturių skaitmenų PIN yra apie 13 bitų prieš neprisijungusį užpuolikį, laikantį supakuotą eilutę. |
| Išplėskite npub, kad galėtumėte perkelti abu raktus | 1,184 baitai nėra bendrinamasis identifikatorius, ir tai nutrauktų kiekvieno esamo "Nostr" kliento analizę adresą, kuris yra apibrėžtas kaip 32 baitai. |
| Pagrindinė direktoriaus paslauga | Atkuria autoritetą, kad būtų išvengta tinklo.Kas atsako į paiešką, nusprendžia, kas gali perskaityti pranešimą. |
| Įveskite raktą į kiekvieną pranešimą | Neišsprendžia nieko: siuntėjui reikia Priimančiosios raktas prieš pirmąjį pranešimą, kuris yra būtent tas atvejis, kai nėra ankstesnės žinutės, kad ji būtų laikoma. |
| In-band derybų pajėgumai | Sukuria žemesnį paviršių. Užpuolikas, kuris gali atsikratyti gebėjimų vėliavos, priverčia klasikinį kelią. |
| Tik postkvantinis, jokių klasikinių pėdsakų | Atsisakoma dešimtmečių sekp256k1 analizės mainais už daug jaunesnį primityvą. tiek Išnykė |
12Įgyvendinimo paritetas
"Nymchat" pristato dvi nepriklausomas šios konstrukcijos įgyvendinimus - vieną "JavaScript" žiniatinklio programai, vieną "Dart" mobiliosioms programoms, įskaitant ML-KEM-768 prievadą nuo nulio.
Dart ML-KEM įgyvendinimas yra patvirtintas prieš oficialų
Nėra ACVP
Žinomas atsakymo testas ML-KEM-768 (ML-KEM-*-FIPS203) – 25 raktų generavimo, 25 encapsulation ir 10 decapsulation atvejais, veikia kaip jų pačių rinkinys. Tai yra vektoriai NIST skelbia patvirtinti įgyvendinimą, todėl juos perduoti yra įrodymas, kad uostas yra teisingas, o ne tik įrodymas, kad du klientai sutinka tarpusavyje. Be to, bendras testų vektorių rinkinys – sėklų išvestis, encapsulation, tiek naudingos apkrovos formatus, ir visą dovanų apvynioti – yra generuojamas iš JavaScript nuoroda ir patikrinta abiejų bandymų rinkiniai. šaknies paslaptis plečia tą rinkinį, o ne pakeisti jį: šaknis į sėklą, šaknis į raktų porą, šaknies viešasis pirštų atspaudas, ir išvest
nympq1… Skirtumas abiejuose įgyvendinimuose nepavyksta sukurti, o ne gaminti pranešimą, kurio kitas klientas negali atidaryti.
Tai yra tai, kas sako įrenginiui “tai yra šaknis, kurį aš laikau” iš “tai yra kitoks vienas”, ir klientas, kuris negalėjo atkurti kito kliento pirštų atspaudų, perskaitytų puikiai gerą įrašą, kaip joks įrašas apskritai - ir tada, sekdamas 3.3 skirsnį, minia antrą šaknį ir padalins tapatybę.
Nymchat yra Atviras šaltinis pagal AGPL-3.0. čia aprašytas kriptografinis branduolys yra
js/nym-crypto.js ir js/modules/pq.js Interneto klientas ir
lib/core/crypto/ su lib/features/identity/pq_registry.dart Iš mobiliųjų klientų.
Dėl trumpesnio, ne techninio paaiškinimo žr. Žinių bazės puslapis apie kvantinio atsparumo šifravimą.