Nymchat whitepaper teknikë
Marrëveshja Post-Quantum Key në Nymchat
Shpërndarja e çelësave publike ML-KEM-768 mbi Nostr pa një direktori ose një regjistër, dhe mbjellja e tyre nga një sekret që asnjë vlerë publike nuk ekspozon.
Shtimi i një shkëmbimi çelësash post-kuantike në një lajmëtar nuk është kryesisht një problem kriptografik. primitivët janë standardizuar dhe bibliotekat ekzistojnë. Pjesa e vështirë është se çdo pjesëmarrës tani ka nevojë për një të dytë Ky artikull përshkruan se si Nymchat përgjigjet për këtë - nga vjen çelësi i dytë, si arrin njerëzit që kanë nevojë për të, dhe çfarë ndërfaqja lejohet të pretendojë për rezultatin - dhe, në seksionin e fundit, çfarë ky rezultat nuk mbron.
Kjo faqe është përkthyer me makinë për lehtësi. Origjinali në anglisht është versioni që zbatohet.
1Problemi
Mesazhet tona private janë të koduara me NIP-44, e cila ka dy gjysma të ndara. gjysma që rrëmben tekstin e thjeshtë - ChaCha20 me një etiketë HMAC-SHA256, të çelur nëpërmjet HKDF (KQZ 5869- nuk kërcënohet në mënyrë kuptimplote nga një kompjuter kuantik; algoritmi i Grover-it kushton një përshpejtim me rrënjë katrore kundrejt një çelësi simetrik, dhe 256 bit absorbojnë atë. Pajtohem në çelës është elips-kurva Diffie-Hellman mbi Pllakë 256k1Recovering një çelës privat nga homologu i tij publik retroaktivisht ekspozon çdo sekret të përbashkët që çelësi ndonjëherë prodhuar.
Kërcënimi që krijon kjo nuk shtyhet derisa të ekzistojë një makinë e tillë. Një kundërshtar me ruajtje mund të regjistrojë tekstin e kodimit sot dhe ta dekriptojë atë sa herë që mundësia vjen. Çdo gjë e dërguar tani që ende ka rëndësi atëherë është tashmë e kompromentuar. Kjo është sulmi specifik i një shkëmbimi çelësash post-quantum, dhe kjo është arsyeja pse puna nuk mund të presë që makina të ndërtohet.
1.1 Pyetja që përgjigjet në këtë libër
Për shembull, në rastin e shkarkimit të të dhënave, të dhënat e të dhënave duhet të jenë të ndaluara në mënyrë të përshtatshme, duke përfshirë edhe shkarkimin e të dhënave të të dhënave të të dhënave të të dhënave të të dhënave. (Fjalë kyçe 203Kjo menjëherë ngre një problem të shpërndarjes:
Shtoni një shkëmbim post-quantum dhe keni nevojë për një të dytë – çelësin e saj publik ML-KEM.
Një npub është vetë-mbajtur. Ju mund ta shkruani atë në letër, ta lexoni atë me zë të lartë, ose ta skanoni atë nga një ekran, dhe kjo është e gjitha që dikush ka nevojë për të koduar për ju. Një ML-KEM-768 çelës publik është 1,184 bytes. Ajo nuk mund të lexohet me zë të lartë, ajo nuk do të përshtatet në një emër përdoruesi, dhe ajo nuk i përket një kodi QR përveç një identiteti që është vetëm 32 bytes.
Pjesa më e vështirë është se një çelës i dytë sjell tre probleme të ndryshme, dhe pjesa tjetër e kësaj letre është kryesisht një përgjigje për ta:
- mund të zëvendësohet. Një çelës që askush nuk mund të lexojë në një vështrim është pikërisht lloji i gjërave që një sulmues shkëmben për veten e tyre.
- Ajo duhet të pajtohet në të gjitha pajisjet e një përdoruesi. I njëjti llogari në një telefon dhe një laptop duhet të paraqesë të njëjtin çelës, ose mesazhet e vulosura në njërën nuk mund të hapen në tjetrën.
- mund të humbasë. Çelësi publik është ripublikuar nga një sekret, kështu që ajo që në të vërtetë duhet të mbijetojë është ky sekret – dhe nga ndërtimi asgjë tjetër nuk e rindërton atë.
2Kufijtë e dizajnit
Katër kufizime formojnë përgjigjen, dhe ato përjashtojnë shumicën e dizajneve të dukshme para se të shkruhet ndonjë kod.
- Sa më pak sekrete të mundshme. Përdoruesit tanë tashmë mbajnë saktësisht një sekret, nsec. Çdo sekret shtesë është një mënyrë tjetër për të humbur historinë tuaj, dhe dikush që di të backup një nsec nuk do të dijë të backup asgjë tjetër. Seksioni 3.1 tregon se ky nuk mund të përmbushet drejtpërdrejt - një çelës post-kuantik i rrjedhur nga nsec nuk ofron asnjë mbrojtje post-kuantik në të gjitha - kështu që dizajni shpenzon saktësisht një sekret dhe jo më shumë: një copë e vetme e materialit kyç, e gjeneruar një herë për identitet, e paraqitur në të njëjtën formë si nsec dhe në të njëjtin vend, kështu që kushdo që di se si të mbajë njëri e di se si të mbajë tjetrin.
- Asnjë autoritet Nuk ka asnjë server që mund të besohet për të thënë se cila çelës i përket kujt.
- Shumë pajisje, një identitet i vetëm Çdo material kyç që ekziston duhet të përfundojë identike në të gjithë ata, dhe rrugët që e mbajnë atë atje nuk duhet të jenë të lexueshme nga kundërshtari kundër të cilit karakteristika është duke u mbrojtur.
- Asnjë negociatë Çdo shkëmbim në bandë i “cilat shifra ju mbështesin?” është një sipërfaqe që një sulmues mund të shkurtojë për të detyruar opsionin më të dobët.
3Një sekret i pavarur rrënjë
Vendimi i rëndë është që çelësi i dekapsulimit ML-KEM është mbjellë nga materiali kyç që asnjë vlerë publike nuk e ekspozon.
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)
Rrënja është paraqitur për përdoruesin në mënyrën e një nsec është: Beqaj32 me prefiksin e lexueshëm njerëzor
nympqKështu që lexohet si nympq1…, e shfaqur pranë nsec në ekranin e identitetit prapa të njëjtës ndërveprim të zbulimit, kopjuar me të njëjtin kontroll, kurrë i regjistruar dhe kurrë i dërguar kudo në të qartë.
Selia është e ndarë nga domeni me qëllim, kështu që asnjë sekret tjetër nuk mund të nxjerrë ndonjëherë të njëjtin çelës. epoch Rrotullimi i motorit të kundërt (Seksioni 9).
3.1 Pse çelësi nuk mund të rrjedhë nga çelësi i identitetit
Dizajni i dukshëm është që të mbjellë çelësat nga sekreti që përdoruesi tashmë ka:
seed = HKDF(salt = "…", IKM = nsec) // do not do this
Është erheqëse për katër arsye, të gjitha të vërteta: asgjë e re për të backup, sepse nsec tashmë është backup; çdo pajisje që pajtohet nga ndërtimi, pa protokollin e sinkronizimit për të shkuar gabim; një njoftim i zëvendësueshëm për identitet duke qenë në mënyrë të qartë e saktë, sepse pajisjet nuk mund të mos pajtohen për çelësin; dhe çelësi ekzistues para se të publikohet ndonjëherë, kështu që një klient mund të vulosë diçka për veten e tij në fillim.
Të katër përfitimet janë të padobishme, për një arsye. Algoritmi i Shor drejtohet kundër një npub të botuar jep nsec. Derivimi i farës është një algoritëm publik mbi nsec. Kështu kundërshtari që thyen gjysmën klasike rindërton gjysmën post-kuantike duke drejtuar të njëjtën HKDF që të gjithë të tjerët drejtojnë. Kundër korrjes-tani-dekript-më vonë - një kërcënim që ekziston për të ndaluar tiparin - një çelës i derivuar në këtë mënyrë nuk shton asgjë.
Çelësi i dekapsulimit ML-KEM duhet të vijë nga entropia që nuk është as e rrjedhshme nga nsec dhe as kurrë e transmetuar nën kodimin klasik vetëm.
Një sekret i gjeneruar në mënyrë të pavarur që pastaj sinkronizohet midis pajisjeve të një përdoruesi brenda një mesazhi të zakonshëm NIP-44 është e njëjta dështim me hapa shtesë: një kundërshtar regjistron atë mesazh sot dhe rikthen çelësin e tij klasik më vonë, dhe rrënja bie jashtë.
3.2 Marrja e rrënjëve në pajisjet e tjera të përdoruesit
Kufiri 3 i Seksionit 2 - një identitet, disa pajisje - nuk mund të plotësohet me aritmetikë këtu, sepse e gjithë pika është se çelësi nuk është një funksion i ndonjë gjëje që pajisjet tashmë ndajnë. nympq1… Kodin vetë.
Rrënjët shfaqen si nympq1… pranë nsec, dhe një pajisje e dytë e pranon atë të ngjitur në të njëjtin panel. Kjo është e gjithë mekanizmi. Një pajisje që nuk është dhënë kodi nuk mund të marrë pjesë, e cila Seksioni 4.2 përshkruan.
Rregulli në Seksionin 3.1 thotë se rrënja kurrë nuk mund të udhëtojë nën kodimin klasik-vetëm, dhe çdo mekanizëm që do ta bënte këtë automatik - duke e sinkronizuar atë përmes një relai, duke e mbështjellë atë me çelësin e identitetit - shkel pikërisht këtë.
Formati lë hapësirë për një rrugë të mbështjellë: një rekord mund të mbajë një listë të mbështjelljeve, secila një AEAD blob nën një çelës që përdoruesi mund të riprodhojë në një pajisje tjetër - një output PRF passkey, për shembull. nympq1… Kodi është e vetmja mënyrë për të kaluar.Neni 10.1 tregon se sa kushton.
Regjistrimi vetë jeton në kategorinë e vet të cilësimeve, nymchat-pq-rootEdhe duke mbajtur asnjë mbështjellje, ajo bën punën e nevojshme: prania e saj është se si një pajisje e dytë mëson se kjo identitet tashmë ka një rrënjë, e cila është ajo që e ndalon atë nga tërheqja e një rivali (Seksioni 3.3).
të nymchat-pq-root Kategoritë duhet jo Kjo rresht mban kopjen e vetme të rrënjëve, kështu që vulosja nën një çelës të rrënjëve është një çelës çelësi i të cilit është brenda kutisë: asnjë pajisje nuk mund ta hapë atë, duke përfshirë atë që e shkroi atë.
Çdo kategori tjetër e cilësimeve mund dhe duhet të përdorë çelësin e rrënjës.Kjo është përjashtimi i vetëm, dhe është një përjashtim në lidhje me qarkullimin dhe jo në lidhje me forcën.
3.3 Gjenerimi dhe adoptimi
Në boot, duke mbajtur një identitet të qëndrueshëm, një klient punon në këtë mënyrë:
- Kërko një ekzistues
nymchat-pq-rootRekordin e - Regjistrimi i gjetur, dhe ky pajisje mund ta zhbllokojë atë - ta adoptojnë atë dhe ta shpallin këtë identitet si të aftë post-kuantik.
- Regjistrimi i gjetur, dhe ky pajisje nuk mund ta zhbllokojë atë - mos gjeneroni një rrënjë të re, dhe mos publikoni asnjë njoftim në të gjitha.
nympq1…Kodi nga një pajisje që tashmë e ka atë. - Asnjë rekord - të gjenerojë një rrënjë, të publikojë rekordin, të njoftojë dhe të tregojë
nympq1…kodin për përdoruesin një herë në mënyrë që ata mund ta ruajnë atë.
Hapi i tretë është hapi që është i lehtë për t'u gabuar, dhe kjo është arsyeja pse renditja është shkruar poshtë dhe jo lënë për secilën zbatim.Dy pajisje që secili vendos të gjenerojë një rrënjë prodhojnë dy rrënjë të pavarura nën një identitet, dhe kjo është dështimi që ky renditje ekziston për të parandaluar.
4Njoftimi i kapaciteteve
Gjysma publike e çelësave të derivuar publikohet si një adresë
Fjalë kyçe-01
ngjarje — lloj 30078, tagged 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 do të thotë relay mban një ngjarje për (kind, pubkey, d-tag), kështu që një republish zëvendëson njoftimin e mëparshëm në vend.
Nënshkrimi është detyrues. Ngjarja nënshkruhet me çelësin e identitetit, kështu që pretendimi “kjo çelës ML-KEM i përket këtij npub” është pikërisht aq i fortë sa vetë npub. Zëvendësimi i një çelësi të ndryshëm të kapsulimit kërkon forjimin e një nënshkrimi secp256k1. Një sulmues që mund ta bëjë këtë nuk ka nevojë të shqetësohet me KEM.
Njoftimet kanë mbaruar. Një ditë shtatë NIP-40 Koha e skadimit, e ripublikuar çdo 24 orë, mban në rekord një deklaratë për një klient që është ende duke u ekzekutuar në vend të atij që dikur ishte.
Një njoftim i humbur lexohet pikërisht si ai që kurrë nuk mbante një çelës: kolegët dërgojnë NIP-44 të zakonshëm, të cilin çdo hyrje mund ta lexojë, dhe klienti rifillon shkëmbimin post-quantum në lidhjen e tij të ardhshme, kur ai ripublikon.
Pa një, një rekord tejkalon çelësin që quhet: një pajisje që fshihet, rivendoset, ose ka rrënjën e saj të zëvendësuar lë një udhëzim të qëndrueshëm për të kapsuluar në një çelës që askush nuk e mban më, dhe mesazhet e dërguara nën të humbasin pa gabim në të dyja anët.
Fusha kyçe emëron formatin e saj. Fusha është pk2, dhe shifra është pjesë e kontratës në vend të dekorimit: emëron formatin e ngarkesës së dobishme me të cilin mund të përdoret çelësi. Një lexues që nuk e njeh fushën përfundon klientin “Nymchat, nuk ka çelës post-kuantik” dhe dërgon NIP-44 të zakonshëm, të cilin çdo login mund të lexojë. Kjo është drejtimi i saktë i dështimit, dhe ia vlen të thuhet si rregull numërimi i formatit ekziston për të zbatuar: një kërkesë për aftësi të panjohur duhet të kushtojë mbrojtje, kurrë dorëzimin. Një çelës që një koleg nuk mund të përdorë është më keq se asnjë çelës në të gjitha, sepse mesazhi që prodhon është i humbur pa gabim në të dyja anët
4.1 Mungesa është e kuptueshme dhe trefishtë
Një detaj i hollësishëm por i rëndësishëm: Njoftimi publikohet nga çdo klient Nymchat, jo vetëm ata që kanë aftësi post-quantum, dhe fusha kyçe është opsionale.
| vëzhguar | Mjetet | Dërgo sjellje |
|---|---|---|
| Njoftim me një çelës | Nymchat, post-quantum i aftë | Hibridë |
| Njoftim, asnjë çelës | Nymchat, vetëm klasike - post-quantum off, ose një pajisje që nuk është ende e lidhur me rrënjën e identitetit | Fjalë kyçe NIP-17 |
| Asnjë njoftim | Klienti i panjohur. mund të jetë çdo përdorues i Nostr ose Bitchat | Klasike, plus një mbështjellje për pajtueshmëri |
Një njoftim pa çelës është një deklaratë e nënshkruar që dërguesi drejton Nymchat, e cila lejon rrugën e dërgimit të kalojë një mbështjellje spekulative të protokollit të ndërmjetëm që do të duhej të përfshijë për këdo që nuk mund të identifikohet.
4.2 Një pajisje që nuk mund të hapë rrënjën mbetet e heshtur
Njoftimi është i zëvendësueshëm: një ngjarje për identitet, fiton shkrimi i fundit.Kjo është ajo që e bën dizajnin e një rekordi të vetëm të funksionojë, dhe kjo është gjithashtu ajo që e bën një pajisje të palidhur të rrezikshme nëse publikon.Një pajisje që njoftoi një çelës që e kishte minuar për veten e saj do të ngatërronte rekordin e vërtetë dhe do të dërgonte çdo koleg për të koduar nën një çelës që pajisjet e tjera nuk mund të hapnin.
Pra, një pajisje që njeh një rrënjë ekziston, por nuk mund ta hapë, nuk publikon asnjë njoftim fare.Nuk është e thyer dhe nuk është e mbyllur nga aplikacioni: ende lexon çdo mesazh për të cilin ka çelësat dhe ende dërgon në mënyrë klasike, duke i bërë përdoruesit ta lidhë atë.Heshtja është sjellja e duhur për një pajisje që nuk mund të flasë për identitetin.
5Zbulimi dhe vendimi i dërgimit
Klientët mësojnë çelësat e shokëve në dy mënyra. Një abonim i qëndrueshëm mbulon njerëzit me të cilët përdoruesi në fakt korrespondon - bisedat e hapura dhe anëtarët e grupit - kështu që njoftimet e tyre mbërrijnë si ngjarje të zakonshme. Për një shokë të takuar për herë të parë, një pyetje e vetme shkon në kohën e dërgimit, e kufizuar në 2.5 sekonda; nëse nuk zgjidhet, mesazhi shkon klasik, që është sjellja që ekzistonte para post-quantum u shtua në vend të një mënyre të re dështimi.
Një përdorues që lidh një pajisje të re, ose që kalon nga një hyrje në shfletues në një çelës lokal, bëhet post-quantum i aftë në mes të bisedës, dhe një cache i përhershëm “no” do t'i mbante ato në encryption klasike për jetën e njoftimit.
5.1 Pse nuk ka sulme të ulëta
Vendimi i routing reduktohet në një pyetje të vetme:
pq = (we hold a signed, unexpired ML-KEM key for this recipient)
Nuk ka negociata të aftësive, asnjë listë të algoritmeve të mbështetura, dhe asnjë fushë që një sulmues mund të qartësojë për të detyruar një rrugë më të dobët. është Modaliteti i dështimit i një njoftimi të hequr ose të mbajtur është se mesazhi shkon klasik - status quo para kësaj veçori - në vend që një mesazh hibrid të zbresë në diçka të falsifikueshme.
E kundërta gjithashtu mban dhe ka më shumë rëndësi: një klient dërgon hibrid Vetëm kur ajo mban një çelës, dhe mbajtja e çelësit është prova që marrësit mund të decapsulate.Nuk ka asnjë gjendje në të cilën një mesazh është dërguar post-quantum për dikë që nuk mund ta lexojë atë.
6Ndërtimi hibrid
Nymchat nuk zëvendëson NIP-44. Ajo e mbështjell atë.Një tekst i koduar NIP-44 i pandryshuar është shtresa e brendshme, dhe ML-KEM çel një AEAD të jashtëm rreth saj:
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)
Të dyja sekretet ende duhet të shërohen për të lexuar mesazhin: shtresa e jashtme jep vetëm një tekst cifer NIP-44, dhe hapja që ka nevojë për ECDH klasike. Një kundërshtar kuantik që thyen secp256k1 merr çelësin e brendshëm dhe ende përballet me ML-KEM; një thyerje e ML-KEM prerë shtresën e jashtme dhe lë NIP-44 në këmbë.
kem_ssAsgjë në këtë derivat nuk prek prodhimin e papërpunuar ECDH, e cila është ajo që Section 6.1 kthehet në.kem_ct,recip_kem_pkdhe të dy çelësat e identitetit janë të lidhura si të dhëna të lidhura, kështu që shtresa e jashtme është e angazhuar për transkriptimin e saktë që e ka prodhuar atë.
Çelësi ML-KEM i marrësit është i gjatë, por çdo mesazh mbart një tekst të pavarur të kodimit dhe për këtë arsye një çelës të pavarur.
kem_ssKjo është ajo që e bën derivimin e nonce në vend të randomizimit të tingëllon:
XhaCha20-Poly1305 Përshkrimi
është thyer nga përdorimi i një çifti (key, nonce), dhe këtu çelësi vetë është i ri për çdo mesazh, kështu që asnjë palë nuk mund të përsëritet.
6.1 Pse shtresat mbeten të ndara
Alternativa është që të përzieni të dyja sekretet në një çelës të vetëm të bisedës dhe ta dorëzoni atë në NIP-44:
ck = HKDF-Extract(salt = "…",
IKM = ecdh_x || kem_ss || …) // do not do this
Kjo strukturë tingëllon si kriptografia.Kjo ka një problem strukturor: ajo ka nevojë për
ecdh_x, koordinatën e papërpunuar x të prodhimit ECDH, si material kyç - dhe një zgjerim shfletuesi (NIP-07) ose një nënshkrim i largët (NIP-46Ajo kryen NIP-44 në emër të thirrësit dhe kthehet një tekst encryption, e cila është e gjithë pika e mbajtjes çelësin diku ku aplikacioni nuk mund të arrijë.
Përzierja e sekreteve prandaj përjashton çdo login që mban çelësin e identitetit në një nënshkrues, që është, përdoruesit më të kujdesshëm, dhe asnjë sasi e punës në derivatin e çelësit nuk mund ta ndryshojë atë.Layering heq varësinë: NIP-44 mbetet i tërë dhe prodhohet nga çfarëdo që mban çelësin e identitetit, nënshkruesi përfshirë, ndërsa gjysma e KEM llogaritet nga kodi i rimëkëmbjes që klienti mban direkt.
Kostoja është gjatësia e bandës, dhe nuk është e vogël. Teksti i kriptimit ML-KEM është 1,088 bytes dhe kalon në çdo mesazh, base64url-koduar në 1,451 karaktere; AEAD e jashtme shton një tag 16-byte Poly1305 dhe zgjeron ngarkesën e dobishme NIP-44 që e mbështjell me një të tretën. Një mesazh 50-karakteri rritet nga 176 bytes në 1,712, dhe një mesazh 2000-karakteri nga 2,820 në 5,238. Toka është përafërsisht 1.5 KB për mesazh pavarësisht se sa i shkurtër është mesazhi, që është çmimi i kapsulimit të freskët çdo herë në vend se të ripërdorimit të një sekreti të përbashkët.
6.2 Përshkrimi i vetëpërmbajtjes
të pq2. Prefiksi e bën vendosjen incrementale: është vetë-përshkruese, kështu që një klient zgjedh rrugën e dekriptimit duke inspektuar ngarkesën e dobishme në vend që të besojë një etiketë ose duke kujtuar se çfarë mbështet një shok. Një lexues që nuk njeh një prefiks dështon të hapë atë ngarkesë të dobishme në vend që ta lexojë gabimisht atë, dhe mesazhet e vulosura para secilës anë mund të bëjnë post-quantum të qëndrojnë të lexueshme si NIP-44 e zakonshme pa migrim.
Dekapsulimi ML-KEM është projektuar për të mos dështuar kurrë: duke pasur parasysh një tekst të keqformuar të kodimit, transformimi Fujisaki-Okamoto kthen një sekret determinist pseudo-rastësor në vend të një gabimi. Një çelës i gabuar, pra, nuk shfaqet fare në shtresën KEM – ai shfaqet si një dështim HMAC brenda NIP-44, e cila është në të njëjtën mënyrë si një sipërfaqe e gabuar klasike e çelësave. Thirrësit i trajtojnë të dyja njësoj, kështu që dështimi nuk mbart asnjë sinjal dallues. Kjo është gjithashtu ajo që e bën listën e kandidatëve të Seksionit 9.1 të funksionojë: një klient provon secilën çelës në radhë dhe lejon NIP-44 të thotë se cila ishte e drejtë.
6.3 Të dy shtresat e mbështjelljes së dhuratës
A NIP-17 Mesazhi privat është një NIP-59 Wrap dhuratë: një thashetheme e papërshkruar, e vulosur nën çelësin e identitetit të dërguesit (lloj 13), pastaj e mbështjellë nën një çelës të hedhur të gjeneruar për mesazh (lloj 1059).
Një login nënshkrues merr vetëm shtresën e jashtme. Vula prodhohet nga nënshkruesi si NIP-44 e zakonshme - aplikacioni kurrë nuk e sheh çelësin që e bën atë - kështu që nuk mund të hibridizohet në vend. Kjo nuk kushton asgjë kundër sulmit në fjalë: vula është e arritshme vetëm nëpërmjet mbështjelljes, dhe mbështjellja është ajo që një regjistrues ruan. Një kundërshtar që mban trafikun e regjistruar duhet të thyejë ML-KEM para se një vula të jetë edhe e dukshme për të sulmuar.
7Mesazhet e grupit dhe mbulimi i pjesshëm
Një mesazh i grupit nuk është një tekst i koduar. Është i njëjti tekst i thjeshtë i dërguar për secilin anëtar, çdo kopje e kapsuluar në çelësin e vet ML-KEM të atij anëtari. Një anëtar që ka botuar një çelës merr një mbështjellje hibride; një anëtar që nuk ka marrë një mbështjellje klasike.
Kjo krijon një problem kontabiliteti që një zbatim naiv merr gabim.Nëse tetë nga dhjetë anëtarët marrin një kopje hibride, mesazhi është jo Një kundërshtar ka nevojë për një kopje klasike të një teksti të thjeshtë që është i njëjtë në të gjitha dhjetë, kështu që mesazhi është i mbrojtur vetëm nëse çdo është kopje
Nymchat për këtë arsye gjurmon mbulimin e mesazheve gjatë fan-out-it - numri është i njohur vetëm ndërsa mbështjelljet janë duke u ndërtuar - dhe badge raporton “rezistente ndaj kuantike në 8 nga 10 anëtarët” në vend që të pretendojë se mesazhi është i mbrojtur. pranuar Mesazhi i grupit (vetëm dërguesi numëron fan-out), ndërfaqja raporton mbrojtje të pjesshme dhe jo të plotë.
7.1 Çfarë raportojnë mburojat
Mburoja thotë të vërtetën për Mesazhi, jo për softuerin që e dërgoi atë:
- Mbrojtje e plotë: çdo kopje e këtij teksti të thjeshtë doli hibride.
- Pjesërisht: disa kopje të një mesazhi të grupit dolën klasikisht.Drawn degraduar në vend të plotë, sepse një kopje klasike e një teksti të thjeshtë identike në të gjithë ata është një nevojë e kundërshtarit.
- Klasike është deklaruar drejtpërdrejt në vend që të tregohet si asnjë badge, sepse një tregues i munguar është i paqartë midis “unprotected”, “broken”, dhe “kjo ndërtim i mungon karakteristikës”.
Vendimi regjistrohet kur mesazhi është i vulosur në vend që të ricontohet nga ajo që një koleg reklamon më vonë.Teksti i kripës që ekziston tashmë nuk mund të bëhet më i mbrojtur se sa ishte, dhe një ndërfaqe që rishikonte mesazhet e vjetra në forcën e një njoftimi të ri do të pretendonte diçka të rreme rreth bajteve në një relay.
Rregullat e grupit mbi grumbull në krye të kësaj në vend që ta zëvendësojë atë: një mesazh i grupit është plotësisht i mbrojtur vetëm kur kopja e secilit anëtar ishte, dhe një mesazh i grupit të marrë pa numërimin e mbulimit tregon pjesërisht.
8Kopje të drejtuara për veten
Disa gjëra që klientët ruajnë janë të koduara në identitetin e përdoruesit: cilësimet e sinkronizuara, lista e bisedave, çelësat e grupit dhe arkivi i mesazheve. Këto mbajnë më shumë rreth një përdoruesi sesa shumica e mesazheve të vetme, kështu që duke i lënë ato klasike do t'i bënte ato artefaktin më të dobët të ruajtur pavarësisht se sa me kujdes mesazhet vetë u vulosën. nymchat-pq-root kategorinë e vet, e cila nuk mund të vuloset nën një çelës që vetëm ajo mund të prodhojë.
Një setings blob ose një rresht arkivi qëndron në një vend për vite, e cila është pikërisht forma e një gjëje që një kundërshtar mbledh – shumë më shumë se çdo mesazh i vetëm, i cili është të paktën efemer në mendjen e vetë përdoruesit.
Një kufizim rregullon formatin këtu dhe jo çelësin. çdo pajisja në llogari, kështu që secili pajisje reklamon atë që mund të hapë në listën që mban njoftimi i saj, dhe llogaria shkruan vetëm atë që të gjithë ata mund të lexojnë.
Një pajisje që mban identitetin, por jo rrënjën, nuk mund të hapë asgjë të vulosur në çelësin e rrënjës, duke përfshirë cilësimet e veta.Kjo është një pasojë e qëllimshme, jo një mbikëqyrje, dhe kjo është arsyeja pse Seksioni 3.3 ka një urdhër të tillë të pajisjes për lidhjen në vend të hedhjes së një rrënje të freskët: një rrënjë e dytë nuk do ta bënte blobin të lexueshëm, do të ndajë vetëm materialin kyç të identitetit në dy.Deri sa përdoruesi ta lidhë atë, pajisja vazhdon të punojë – lexon atë për të cilën ka çelësat dhe dërgon në mënyrë klasike.
Një pajisje që drejton një zgjerim të shfletuesit ose një nënshkrues të largët (NIP-46) nuk mban asnjë nsec për të rrjedhur nga, por mban kodin e rimëkëmbjes, dhe nën ndërtimin e shtresuar të Seksionit 6.1 që është e gjitha gjysma post-kuantike ka nevojë: nënshkruesi prodhon shtresën NIP-44 siç ka gjithmonë, dhe klienti çel vetë shtresën e jashtme.
9Rrotullimi
të epoch Numërimi në derivat është ajo që e bën të mundur rrotullimin pa material të ri kyç. Rritja e tij jep një çifti të ri çelësash nga e njëjta rrënjë dhe një njoftim të ripublikuar; kolegët marrin çelësin e ri nga regjistrimi i zëvendësueshëm.
9.1 Epokat e vjetra mbahen, dhe asgjë nuk ri-kriptohet
Asgjë nuk rishkruhet kur një çelës rrotullohet.Një klient ndërton kandidatët e dekriptimit nga epoka aktuale deri në epokë − 3, kështu që një mesazh i vulosur pak para një rrotullimi ende hapet kundër palës së çelësave që ishte aktuale kur u dërgua.
Kjo dritare është ajo që e bën rrotullimin të sigurt për të bërë në të gjitha: pa të, çdo rrotullim do të shkatërronte çfarëdo që ishte në fluturim. Çdo gjë tashmë e vulosur mbetet e lexueshme për jetën e identitetit, sepse një mesazh që përdoruesi nuk mund të hapë më është rreptësisht më keq për ta se një mbrojtje e të cilit nuk mund të përmirësohet retroaktivisht (Seksioni 10.5).
10Çfarë nuk mbron
Një letër që liston vetëm atë që realizon një dizajn nuk përshkruan një sistem, dhe mbivlerësimi i një pronësie të sigurisë në një ndërfaqe është më keq se sa përjashtimi i saj.
10.1 Rrënja është një sekret i dytë, dhe humbja e saj është e pazgjidhshme
Ky është çmimi i vërtetë i dizajnit. Kufizimi në Seksionin 2 se një përdorues duhet të ketë saktësisht një gjë për të mbajtur nuk mund të përmbushet: vetëm nsec nuk e rindërton çelësin post-quantum, sepse e gjithë pika është se asnjë vlerë publike dhe asnjë sekret tjetër nuk e ekspozon atë. Nëse asnjë pajisje nuk mban rrënjë dhe asnjë nga mbështjelljet e Seksionit 3.2 nuk mund të hapet, materiali i vulosur në çelësin e rrënjë-derivat nuk është i rimarrshëm.
Me transferimin manual rrugën e vetme, kjo është më e mprehtë se ajo mund të lexohet së pari. nympq1… Kodi kudo ka saktësisht një kopje të saj, në një pajisje, dhe duke humbur atë pajisje humbet çdo mesazh post-kuantik, cilësimet blob dhe rreshtin e arkivimit të vulosur në të.
nsec nuk ndihmon; kjo është pronësia mbi të cilën mbështetet e gjithë dizajni.
Një sulmues sulmon rrugën më të lirë në dispozicion, kështu që një skemë vlen sa rruga e saj më e dobët e rimëkëmbjes është e vlefshme - një fjalëkalim i paharrueshëm, për shembull, do të vinte të gjithë gjënë në çfarëdo që fjalëkalimi është i vlefshëm, dhe rreshti i mbështjellë është pikërisht artefakti që një kundërshtar i korrjes-tani-dekript-më vonë mbledh dhe mullitet offline në kohë të lirë.
10.2 Autentikimi, si i ndarë nga konfidencialiteti
Çdo nënshkrim në Nostr është Schnorr mbi secp256k1, dhe kjo është e pandryshuar këtu. Një kundërshtar me një kompjuter kuantik mund të falsifikojë nënshkrime dhe të pretendojë një përdorues në kohë reale. Çfarë humb shkëmbimi i çelësave hibride është korrja-tani-decrypt-më vonë: një sulmues që regjistron trafikun sot nuk mund ta lexojë atë më vonë. Kjo nuk e bën një mesazh të pafalshëm kundër një kundërshtari që tashmë ka makinën. Kjo dallim është transportuar në aplikacionet me qëllim - treguesi i padlock raporton autentifikim, mburoja raporton konfidencialitet, dhe ato janë glyphs të ndara sepse një mesazh mund të ketë një pa tjetrin.
Ajo gjithashtu kufizon atë që mund të premtojë njoftimi në Seksionin 4.Bindja midis një npub dhe një çelësi ML-KEM është një nënshkrim secp256k1, kështu që një kundërshtar që mund t'i falsifikojë ato mund të zëvendësojë një çelësin e tyre.
10.3 Metodatë
Dhurata fsheh dërguesin, marrësin përtej një p tag, lloji, dhe timestamp i mesazhit të brendshëm. Ajo nuk fsheh se një ngjarje ekziston, madhësia e saj, ose kur një transmetues e ka marrë atë.
10.4 Mesh offline
Transporti i rrjetit Bluetooth i Nymchat është një protokoll i veçantë me dorën e vet, dhe nuk mbulohet nga kjo punë.
10.5 Mesazhet e dërguara tashmë
Ciphertext regjistruar ndërsa të dyja palët ishin ende klasike mbetet klasike përgjithmonë. Ajo tashmë ekziston dhe nuk mund të rihapet. Mbrojtja fillon në mesazhin ku të dyja palët mbajtën çelësat post-quantum, jo në momentin që funksioni u ndez.
11Alternativa të konsideruara
| Qasja | Pse jo |
|---|---|
| Të nxjerrësh çelësin post-quantum nga çelësi i identitetit | Derivimi është një algoritëm publik mbi nsec, dhe një kundërshtar kuantik rikuperon nsec nga npub-i i botuar, kështu që thyen gjysmën klasike të dorës mbi gjysmën post-kuantik me të. |
| Dërgo rrënjë në pajisjet e tjera të përdoruesit nëpërmjet NIP-44 | Një rrënjë e transmetuar nën encryption klasike-vetëm është e rimarrshme nga kushdo që ka regjistruar atë mesazh dhe thyen çelësin e saj më vonë, që është kundërshtari rrënjë ekziston për të ndaluar. |
| Një çifti ML-KEM i gjeneruar veçmas në çdo pajisje | Pajisjet do të mbajnë çelësat e ndryshme të dekapsulimit, dhe një njoftim i zëvendësueshëm për identitet nuk mund t'i mbajë të gjitha. Pjesëmarrësit do të enkriptojnë në cilindo çelës u botua së fundmi, dhe çdo pajisje tjetër nuk do të jetë në gjendje të lexojë rezultatin. |
| Mbylli rrënjën nën një PIN | Një PIN me katër shifra është rreth 13 bit kundër një sulmuesi offline që mban rreshtin e mbështjellë. |
| Zgjeroni npub për të mbajtur të dy çelësat | 1,184 bytes nuk është një identifikues i përbashkët, dhe do të thyejë çdo analizë ekzistuese të klientit Nostr të një adrese që është e përcaktuar si 32 bytes. |
| Shërbimi Key Directory | Reintroduces autoritetin që rrjeti ekziston për të shmangur. kushdo që i përgjigjet kërkimit vendos se kush mund të lexojë mesazhin. |
| Vendosni çelësin në çdo mesazh | Nuk zgjidh asgjë: transmetuesi ka nevojë për Marrësit e kyç para mesazhit të parë, që është pikërisht rasti me asnjë mesazh të mëparshëm për ta mbajtur atë. |
| Kapaciteti i negociatave në bandë | Krijon një sipërfaqe të ulët.Një sulmues që mund të heqë një flamur aftësie detyron rrugën klasike. |
| Post-quantum vetëm, asnjë këmbë klasike | Heq dekadat e analizës së secp256k1 në këmbim të një primitive shumë më të re. të dyja të dështuar. |
12Paritet i zbatimit
Nymchat ofron dy implementime të pavarura të këtij ndërtimi - një në JavaScript për aplikacionin e internetit, një në Dart për aplikacionet celulare, duke përfshirë një port nga zero ML-KEM-768.
Zbatimi i Dart ML-KEM validohet kundër zyrtarit
Niveli i ACVP
Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje: Përgjigje:ML-KEM-*-FIPS203) — 25 gjenerata kyçe, 25 raste encapsulation dhe 10 raste decapsulation, drejtohen si suite e tyre. Këto janë vektorët që NIST publikon për të validuar një zbatim, kështu që kalimi i tyre është dëshmi se porta është e saktë, jo thjesht dëshmi se të dy klientët pajtohen me njëri-tjetrin. Përveç kësaj, një fiksurë e përbashkët e vektorëve të testimit – derivimi i farës, encapsulation, të dy formatet e ngarkesës të dobishme dhe të dhënat e plota të dhuratave – gjenerohet nga referenca JavaScript dhe kontrollohet nga të dy suitet e testimit. Sekreti rrënjë zgjeron atë fixture në vend që ta zëvendësojë atë: rrënjë për farë, rrënjë për çelës
nympq1… Një divergence në të dyja zbatimet dështon ndërtimin në vend që të prodhojë një mesazh që klienti tjetër nuk mund të hapë.
Kjo është ajo që tregon një pajisje “ kjo është rrënja që unë mbaj” nga “ kjo është një tjetër, dhe një klient që nuk mund të riprodhojë gjurmën e gishtit të një klienti tjetër do të lexonte një rekord të përkryer si asnjë rekord në të gjitha - dhe pastaj, pas Seksionit 3.3, min një rrënjë të dytë dhe të ndajë identitetin.
Nymchat është Burimi i hapur nën AGPL-3.0. Bërthama kriptografike e përshkruar këtu është
js/nym-crypto.js dhe js/modules/pq.js në faqen e internetit, dhe
lib/core/crypto/ me lib/features/identity/pq_registry.dart në klientët celularë.
Për një shpjegim më të shkurtër, jo-teknik, shih Faqja e bazës së njohurive në encryption kuantike-rezistente.