Nymchati tehniline whitepaper
Post-Quantum võtme kokkulepe Nymchatis
ML-KEM-768 avalike võtmete levitamine Nostri kaudu ilma kataloogita või registrita ning nende külvamine saladusest, mida ükski avalik väärtus ei paljasta.
Post-quantum võtmevahetuse lisamine sõnumitoojale ei ole enamasti krüptograafia probleem. primitiivid on standardiseeritud ja raamatukogud on olemas. Teine See artikkel kirjeldab, kuidas Nymchat vastab sellele - kust teine võti pärineb, kuidas see jõuab inimesteni, kes seda vajavad, ja mida liidesel on lubatud tulemuse kohta nõuda - ja viimases osas, mida see tulemus ei kaitse.
See leht on mugavuse huvides masintõlgitud. Kohaldatav on ingliskeelne originaalversioon.
1Probleem
Meie privaatsõnumid on krüpteeritud NIP-44, millel on kaks eraldatavat poolteed. pool, mis kõverdavad lihtsat teksti — ChaCha20 koos HMAC-SHA256 märgiga, klõpsatud läbi HKÜD (RFC 5869 kohta) — ei ole kvantarvuti poolt tähenduslikult ohustatud; Groveri algoritm maksab sümmeetrilise võtme vastu ruudukujulise kiirenduse ja 256 bitti neelab seda. Nõustun võti on elliptiline kõver Diffie-Hellman üle Tüdrukud256k1, ja Shori algoritm lahendab diskreetse logaritmi otse.Ühe privaatvõti taastamine avalikust kolleegist tagasiulatuvalt paljastab iga jagatud saladuse, mida võti kunagi tekitas.
Selle tekitatud oht ei ole edasi lükatud, kuni selline masin eksisteerib. Vaenlane, kellel on salvestus, võib täna salvestada krüpteerimisteksti ja dekodeerida seda iga kord, kui võime saabub. Kõik, mis nüüd saadetakse, mis on veel tähtis, on juba ohustatud.
1.1 Küsimusele, millele see artikkel vastab
Mõistmine on hästi mõistetav: käivitage klassikalise vahetuse kõrval post-kvantvõtme kapslimehhanism, nii et ründaja peab mõlema lugemiseks murdma.Põltsamaa 203See tekitab kohe jaotusprobleemi:
Lisage post-kvantvahetus ja vajate teist – tema ML-KEM avaliku võtme.
NPUB on iseseisev. Võite kirjutada paberile, lugeda seda valjusti või skannida ekraanilt ja see on kõik, mida keegi vajab teie jaoks krüpteerimiseks. ML-KEM-768 avalik võti on 1,184 baiti. Seda ei saa lugeda valjusti, see ei sobi kasutajanimesse ja see ei kuulu QR-koodi peale identiteedi, mis on ainult 32 baiti.
Raskem osa on see, et teine võti toob kolm erinevat probleemi ja ülejäänud see paber on suures osas neile vastus:
- Seda saab asendada. Võti, mida keegi ei saa silmapilgul lugeda, on täpselt selline asi, mida ründaja oma enda eest vahetab.
- See peab ühinema kasutaja seadmetega. Sama konto telefoni ja sülearvuti peab esitama sama võtme, või sõnumeid, mis on suletud üks ei saa avada teisel.
- Seda saab kaotada. Avalik võti avalikustatakse saladusest, nii et see, mis tegelikult peab ellu jääma, on see saladus – ja ehitusega ei rekonstrueeri midagi muud.
2Disaini piirangud
Vastust kujundasid neli piirangut ja need välistavad enamiku ilmselgetest kujundustest enne koodi kirjutamist.
- Nii vähe saladusi kui võimalik. Meie kasutajad kannavad juba täpselt ühte saladust, nsec. Iga täiendav saladus on teistsugune viis oma ajaloo kaotamiseks ja keegi, kes teab, kuidas nsec-i varundada, ei tea, kuidas midagi muud varundada. jaotis 3.1 näitab, et seda ei saa täita otse – nsec-ist tuletatud post-kvantvõti ei paku mingit post-kvantkaitset üldse – nii et disain kulutab täpselt ühte saladust ja mitte rohkem: üksiku võtmaterjali tükk, mis on genereeritud üks kord identiteedi kohta, esitatud samal kujul kui nsec ja samas kohas, nii et igaüks, kes teab, kuidas hoida ühte, teab, kuidas hoida teist. jaotis 10.1 on aus, kui palju see veel maksab.
- Ei mingit autoriteeti. Ei ole ühtegi serverit, mida saab usaldada, et öelda, milline võti kuulub kellele.
- Mitmed seadmed, üks identiteet Ükskõik milline peamine materjal eksisteerib, peab lõppema kõigil nendel, ja teed, mis seda seal kannavad, ei tohi ise olla loetavad vastasele, kelle vastu funktsioon kaitseb.
- Ei ole läbirääkimisi. Igasugune bändi vahetus “milliseid kriteeriume te toetate?” on pind, mida ründaja saab lõigata, et sundida nõrgemat võimalust.
3Sõltumatu root saladus
Koormust kandev otsus on see, et ML-KEM-i dekapsulatsiooni võti on külvatud peamistest materjalidest, mida ükski avalik väärtus ei paljasta.
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)
Juur esitatakse kasutajale nii, nagu nsec on: Tüdrukud32 Inimese loetav prefix
nympqNii et see loeb nagu nympq1…, näidatud kõrval nsec identiteedi ekraanil sama paljastada interaktsiooni, kopeeritud sama kontrolli, ei ole kunagi logitud ja ei ole kunagi saadetud kuhugi selge.
Sool on eesmärgipäraselt domeenist eraldatud, nii et ükski teine saladus ei saa kunagi sama võtmepaari. epoch Ümberpaigutamine rotatsiooniga (punkt 9 )
3.1 Miks võti ei saa pärineda identiteedi võtmest
Ilmselge disain on külvata võtmepaar saladusest, mida kasutajal juba on:
seed = HKDF(salt = "…", IKM = nsec) // do not do this
See on atraktiivne neljal põhjusel, kõik need on reaalsed: midagi uut varundada, sest nsec on juba varundus; iga seade, mis nõustub ehitusega, ilma sünkroonimisprotokollita, et see läheb valesti; üks asendatav teade identiteedi kohta on ilmselgelt õige, sest seadmed ei saa võtmega nõustuda; ja olemasolev võti, enne kui see kunagi avaldatakse, nii et klient saaks midagi endale esimest korda sulgeda.
Kõik neli kasu on ühel põhjusel väärtusetu. Shori algoritm, mis töötab avaldatud npubi vastu, annab nsec-i. Seemne derivaat on nsec-i üle avalik algoritm. Nii et vastane, kes katkestab klassikalise poole, rekonstrueerib postkvantilise poole, käivitades sama HKDF-i, mida kõik teised käitavad.
ML-KEM dekapsulatsiooni võti peab pärinema entropiast, mis ei ole pärit nsecist ega edastatud kunagi ainult klassikalise krüpteerimise all.
Iseseisvalt loodud saladus, mis seejärel sünkroniseeritakse kasutaja seadmete vahel tavalise NIP-44 sõnumi sees, on sama ebaõnnestumine täiendavate sammudega: vastane registreerib selle sõnumi täna ja taastab oma klassikalise võtme hiljem ja juur langeb välja.
3.2 Juurdepääs kasutaja teistele seadmetele
Osa 2 piirang 3 - üks identiteet, mitu seadet - ei saa siin aritmeetiliselt rahuldada, sest kogu asi on selles, et võti ei ole midagi, mida seadmed juba jagavad. nympq1… Kood iseenesest
Root on näidatud kui nympq1… See on kogu mehhanism.Seade, kellele ei ole koodi antud, ei saa osaleda, mida kirjeldab lõik 4.2.
3.1 reegel ütleb, et juur ei pruugi kunagi reisida klassikalise ainult krüpteerimise all ja iga mehhanism, mis muudab selle automaatseks – sünkroonides selle edastuse kaudu, pakendades selle identiteedi võtmele – rikub täpselt seda.
Formaat jätab ruumi ümbritsetud teele: rekord võib kanda ümbritsete nimekirja, igaüks AEAD blob all võtme all, mida kasutaja saab teisele seadmele reprodutseerida - näiteks passkey PRF väljund. nympq1… Kood on ainus viis läbi. jaotis 10.1 ütleb, kui palju see maksab.
Rekord ise elab oma seadete kategoorias, nymchat-pq-rootIsegi ühtegi pakendit kandes ei tee see vajalikku tööd: selle olemasolu on see, kuidas teine seade õpib, et sellel identiteedil on juba juur, mis peatab selle rivaali (punkt 3.3).
OÜ nymchat-pq-root Kategooria peab mitte See rida kannab ainult koopiat juurest, nii et selle sulgemine juurest tuletatud võtme all on lukk, mille võti on kasti sees: ükski seade ei saa seda kunagi avada, kaasa arvatud see, kes seda kirjutas.
Kõik teised seadete kategooriad võivad ja peaksid kasutama juure tuletatud võtmet.See on ainus erand ja see on erand ringikujulisuse, mitte tugevuse kohta.
3.3 Põlvkond ja lapsendamine
Bootil, millel on püsiv identiteet, töötab klient järgmises järjekorras:
- Otsige olemasolevat
nymchat-pq-rootVõi rekord. - Leitud rekord ja see seade võib selle lahti keerata - võtke see vastu ja kuulutage see identiteet postkvantiliseks võimeks.
- Leitud rekord ja see seade ei saa seda lahti - ärge genereerige uut juurt ja ärge avaldage üldse ühtegi teadaannet.
nympq1…Kood, mis pärineb juba olemasolevast seadmest. - Ei rekordit - luua root, avaldada rekord, kuulutada ja näidata
nympq1…kood kasutajale üks kord, et nad saaksid seda salvestada.
3. samm on samm, mida on lihtne eksida, ja see on põhjus, miks tellimus on kirjutatud, mitte jäänud iga rakenduse juurde.Kaks seadet, millest igaüks otsustab tekitada root, toodavad ühe identiteedi all kaks sõltumatut juurt ja see on ebaõnnestumine, mida see tellimine eksisteerib, et vältida.
4Võimekuse avaldamine
Avalik pool tuletatud võtmepaarist avaldatakse adresseeritavana
Tüdrukud-01
sündmus — tüüp 30078, märgitud 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": [ ... ]
}
}
Adresseeritav tähendab, et edasimüüja hoiab ühe sündmuse (kind, pubkey, d-tag), nii et vabariik asendab eelmise teadaande kohapeal.
Allkiri on siduv. Sündmus on allkirjastatud identiteedi võtmega, nii et väide “see ML-KEM võtm kuulub sellele npub” on täpselt sama tugev kui npub ise.Erineva kapseldamise võtme asendamine nõuab secp256k1 allkirja võltsimist.Ründaja, kes suudab seda teha, ei pea KEM-iga muretsema.
Teated on lõppenud. Seitsmepäevane NIP-40 aegumine, mis avaldatakse iga 24 tunni järel, hoiab rekordis avalduse kliendi kohta, mis ikka veel töötab, mitte seda, mis varem oli.
Kaotatud teade loetakse täpselt nagu see, mis ei kandnud kunagi võtit: eakaaslased saadavad tavalise NIP-44, mida iga sisselogimine saab lugeda, ja klient jätkab oma järgmisel ühendusel post-kvantvahetust, kui see taas avaldatakse. Nii et enam kui nädala jooksul vaikimine maksab vaheajal saadetud sõnumite kaitsmise eest - nad on klassikaliselt krüpteeritud, mitte kvantvastased - ja ei maksa midagi muud.
Ilma selleta ületab rekord võtme, mida ta nimetab: seade, mis on kustutatud, taastatud või mille juur on asendatud, jätab püsiva juhise, et see sisestataks võtmele, mida keegi enam ei hoia, ja selle all saadetud sõnumid kaovad ilma vigadeta mõlemal poolel.
Võtmevälja nimi on selle formaat. Valdkond on pk2, ja number on lepingu osa, mitte kaunistamine: see nimetatakse kasuliku koormuse vorminguks, millega võti võib kasutada. Lugeja, kes ei tunne seda valdkonda, lõpetab “Nymchat kliendi, ei ole post-kvant-võti” ja saadab tavalise NIP-44, mida iga sisselogimine saab lugeda. See on õige ebaõnnestumise suund, ja tasub öelda reeglina, et vormingus on olemas numeratsioon: mittetunnustatud võimekuse nõue peab maksma kaitset, mitte kunagi kohaletoimetamist. Peer ei saa kasutada võti on halvem kui ükski võti üldse, sest sõnum, mida see toodab, on kadunud ilma veata mõlemal poolel.
4.1 Puudumine on tähendusrikas ja kolmekordne
Subtilne, kuid oluline detail: kuulutust avaldab iga Nymchati klient, mitte ainult post-kvant-võimelised kliendid, ja võtmevälja valik on vabatahtlik.
| Vaadeldakse | Tähendab | Saada käitumine |
|---|---|---|
| Teade võtmega | Nymchat, post-kvantiline võimeline | hübriid |
| Märksõnad: ei võti üldse | Nymchat, klassikaline ainult - post-quantum välja, või seade, mis ei ole veel seotud identiteedi juurega | Klassikaline NIP-17 |
| Mitte mingit kuulutust | Tundmatu klient. Võib olla iga Nostr või Bitchat kasutaja | Klassikaline, pluss ühilduvuspakett |
Märksõnatu teade on allkirjastatud avaldus, et saatja käitab Nymchatit, mis võimaldab saatjatel ületada spekuleeriva ristprotokollipõhise pakendi, mida ta muidu oleks pidanud lisama kõigile, keda ta ei suuda tuvastada.
4.2 Seade, mis ei suuda juurt avada, jääb vaikima
Teade on asendatav: üks sündmus identiteedi kohta, viimane kirjutamine võidab.See on see, mis muudab ühe salvestuse disaini tööks, ja see on ka see, mis muudab ühendamata seadme ohtlikuks, kui see avalikustatakse.Seade, mis teatas võtmest, mille ta oli ise välja mõelnud, piitsutab tegelikku salvestust ja saadab iga eakaaslase krüpteerimiseks võtme all, mida teised seadmed ei saa avada.
Seega on olemas seade, mis teab juurt, kuid ei suuda seda avada, ei avalda see üldse ühtegi teadaannet.See ei ole katki ega ole rakendusest välja lukustatud: see loeb endiselt iga sõnumi, mille jaoks on võtmed, ja saadab endiselt klassikaliselt, kutsudes kasutajat seda linkima.
5Avastamine ja saatmise otsus
Kliendid õpivad eakaaslaste võtmeid kahel viisil. püsiv tellimus hõlmab inimesi, kellega kasutaja tegelikult vastab - avatud vestlused ja rühma liikmed - nii et nende teadaanded tulevad tavaliste sündmuste kujul.
Kasutaja, kes ühendab uue seadme või kes liigub brauseri laienduse sisselogimisest kohalikule võtmele, muutub post-kvantlikuks suutlikuks vestluse keskel ja püsivalt vahemälestatud “no” hoiab neid klassikalise krüpteerimise ajal reklaami eluks.
5.1 Miks ei ole allalaadimise rünnakut
Reisiotsus vähendatakse ühele küsimusele:
pq = (we hold a signed, unexpired ML-KEM key for this recipient)
Puuduvad võimete läbirääkimised, toetatud algoritmide nimekiri ja ründaja ei suuda nõrgemale teele sundida. on Ebaõnnestumise režiim eemaldatud või peatatud teade on, et sõnum läheb klassikaline - status quo enne seda funktsiooni - selle asemel, et hübriid sõnum on alandatud midagi võltsitav.
Ka vastupidine hoiab ja on tähtsam: klient saadab hübriidi Ainult kui see hoiab võtme ja võtme hoidmine on tõendusmaterjal, et vastuvõtja saab selle dekapsuleerida. Ei ole mingit seisundit, kus sõnum saadetakse post-kvantiline keegi, kes ei saa seda lugeda.
6Hübriidkonstruktsioon
Muudetud NIP-44 krüpteerimise tekst on sisemine kiht ja ML-KEM võtab selle ümber välise AEAD-i:
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)
Mõlemad saladused tuleb veel sõnumi lugemiseks taastada: väliskiht annab ainult NIP-44 krüpteerimise teksti ja avamine, mis vajab klassikalist ECDH-d. Kvantvastane, kes murrab secp256k1, saab sisemise võtme ja seisab ikka ML-KEM-i ees; ML-KEM-i purunemine lõikab väliskihti ja jätab NIP-44 seisma.
kem_ssMitte miski selles derivaadis ei puuduta toores ECDH väljundit, mis on see, mida lõik 6.1 muudab.kem_ct,recip_kem_pkja mõlemad identiteedi võtmed on seotud seotud andmetena, nii et väliskiht on pühendunud täpsele transkriptile, mis selle tekitas.
Vastuvõtja ML-KEM-võti on pikaajaline, kuid igal sõnumil on sõltumatu krüpteerimisteksti ja seega sõltumatu
kem_ssSee on see, mis muudab nonce'i tuletamise selle asemel, et seda juhuslikult hääldada:
ChaCha20-Poly1305 tüüp
on katki, kasutades uuesti (võti, nonce) paari, ja siin on võti ise iga sõnumi jaoks uus, nii et ükski paar ei saa korrata.
6.1 Miks kihid jäävad eraldi
Alternatiiviks on segada mõlemad saladused ühte vestlusvõti ja anda see NIP-44-le:
ck = HKDF-Extract(salt = "…",
IKM = ecdh_x || kem_ss || …) // do not do this
See ehitus kõlab nagu krüptograafia.Sellel on üks struktuurne probleem: see vajab
ecdh_x, toor x-koordinaat ECDH väljund, kui peamine materjal - ja brauseri laiendus (NIP-07) või eemaldatud allkiri (NIP-46See täidab kõneleja nimel NIP-44 ja tagastab krüpteerimise teksti, mis on kogu võtme hoidmise punkt, kuhu rakendus ei saa jõuda.
Saladuste segamine välistab seega iga sisselogimise, mis hoiab identiteedivõtit allakirjutajas, see tähendab kõige ettevaatlikumaid kasutajaid, ja mitte mingisugune töö võtme tuletamisel ei saa seda muuta.Layering eemaldab sõltuvuse: NIP-44 jääb tervikuks ja seda toodab kõik, mis hoiab identiteedivõtit, allakirjutaja kaasas, samas kui KEM pool arvutatakse kliendi poolt otseselt hoitavast taastamiskoodist.
ML-KEMi krüpteerimistekstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstikstiks
6.2 Enese kirjeldamine
OÜ pq2. Eesliide muudab kasutuselevõtmise järkjärguliseks: see kirjeldab ennast, nii et klient valib dekodeerimisstiili, kontrollides kasuliku koormuse asemel, et usaldada märgistust või meeles pidada, mida kolleeg toetab. lugeja, kes ei tunne eelmäära, ei ava seda kasuliku koormuse selle asemel, et seda valesti lugeda, ja sõnumid, mis on suletud enne mõlemat poolt, võiksid teha post-kvantse jääda loetavaks nagu tavaline NIP-44 ilma migratsioonita.
ML-KEMi dekapsulatsioon on mõeldud selleks, et mitte kunagi ebaõnnestuda: võttes arvesse ebaõigeid krüpteerimiskirju, tagastab Fujisaki-Okamoto ümberkujundamine deterministilise pseudo-juhusliku saladuse, mitte vea. Seetõttu ei paista KEMi kihil üldse vale võtme – see paistab välja nagu HMACi ebaõnnestumine NIP-44 sees, mis on sama, mis vale klassikalise võtme pinnal. Helistajad kohtlevad mõlemat ühesugusel viisil, nii et ebaõnnestumine ei kanna eristavat signaali.
6.3 Mõlemad kinkekaardi kihid
A NIP-17 Isiklik sõnum on a NIP-59 kingituspakend: allkirjastamata kuulujutt, mis on suletud saatja identiteedi võtme alla (tüüp 13), seejärel pakendatud iga sõnumi kohta genereeritud heitva võtme alla (tüüp 1059).
Allakirjutaja sisselogimine saab ainult väliskihti. Sisselogija toodab pitseri nagu tavaline NIP-44 - rakendus ei näe kunagi seda teevad võtmeid - nii et seda ei saa kohapeal hübriidida. See ei maksa midagi kõnealuse rünnaku vastu: pitser on kättesaadav ainult pakendi kaudu ja pitser on see, mida salvestaja hoiab. Vastane, kes hoiab salvestatud liiklust, peab katkestama ML-KEM-i enne, kui pitser on isegi nähtav rünnata.
7Grupisõnumid ja osaline katvus
Rühma sõnum ei ole üks šifreeriv tekst. See on sama lihttekst, mis väljastatakse igale liikmele, iga koopia, mis on kapseldatud selle liikme oma ML-KEMi võtmega. Liikmele, kes on võtme avaldanud, antakse hübriidpakend; liikmele, kes seda ei ole, antakse klassikaline pakend.
See tekitab raamatupidamisprobleemi, et naiivne rakendus läheb valesti.Kui kaheksa kümnest liikmest saab hübriidkoopia, on sõnum mitte Vastane vajab ühte klassikalist koopiat lihtsast tekstist, mis on identsed kõigis kümnes, nii et sõnum on kaitstud ainult siis, kui iga See on koopia.
Nymchat seega jälgib fan-out ajal sõnumi katvust - arv on teada ainult siis, kui pakendid on ehitatud - ja märgi aruanded “kvant-resistentne 8i 10i liikmetele” selle asemel, et väita, et sõnum on kaitstud. Saadud rühma sõnum (ainult saatja loeb fan-out), liides teatab osaliselt, mitte täielikku kaitset.
7.1 Mida kilp teatab
kilp ütleb tõde Sõnum, mitte selle tarkvara kohta, mis selle saatis:
- Täielik kaitse: iga selle teksti koopia läks hübriidiks.
- Osaline: mõned rühma sõnumi koopiad läksid välja klassikaliselt. joonistatud langenud, mitte täis, sest üks klassikaline koopia lihtsast tekstist, mis on kõigis neist identsed, on kõik vastase vajadused.
- Klassikaline on väljendatud otsekoheselt, selle asemel et näidata ilma märgita, sest puuduv näitaja on ebaselge “ kaitsmata”, “ purunenud” ja “see ehitus puudub funktsioon”.
Otsus salvestatakse, kui sõnum on suletud, mitte taasarvutatud sellest, mida kolleeg hiljem reklaamib. juba olemasolev tekst ei saa olla paremini kaitstud, kui see oli, ja liides, mis vanu sõnumeid uue teadaande tugevusele ümber lülitas, väidaks midagi vale baitide kohta edastamisel.
Ülaltoodud rühma reeglid on selle asemel, et seda asendada: rühma sõnum on täielikult kaitstud ainult siis, kui iga liikme koopia on olemas, ja vastuvõetud rühma sõnum, millel puudub katvuse arv, on osaline.
8Koopiad, mis on suunatud endale
Mitmed kliendi salvestatud asjad on kasutaja enda identiteediga krüpteeritud: sünkroonitud seaded, vestlusloend, rühma võtmed ja sõnumite arhiiv.Need kannavad kasutaja kohta rohkem kui enamik üksikuid sõnumeid, nii et nende klassikaline jätmine muudaks need kõige nõrgemaks salvestatud artefaktiks, olenemata sellest, kui hoolikalt sõnumeid ise suleti. nymchat-pq-root Kategooria ise, mida ei saa sulgeda võtme all, mida ainult see suudab toota.
Seaded blob või arhiivi rida istub ühes kohas aastaid, mis on täpselt kuju asi saagi-nüüd-dekodeeritud-hiljem vastane kogub - palju rohkem kui ükskõik milline sõnum, mis on vähemalt efemeraalne kasutaja enda meeles.
Üks piirang reguleerib siin vormi, mitte võtit. iga seade kontol, nii et iga seade reklaamib seda, mida ta saab avada oma teate kandes, ja konto kirjutab ainult seda, mida kõik nad saavad lugeda.
Seade, millel on identiteet, kuid mitte juur, ei saa avada midagi, mis on suletud juurest tuletatud võtmele, kaasa arvatud selle enda seaded.See on tahtlik tagajärg, mitte järelevalve, ja sellepärast on jaotises 3.3 selline seade, mis soovib seostada värske juure asemel: teine juur ei teeks blobi loetavaks, vaid jagaks identiteedi võtmematerjali kaheks.Kuni kasutaja seda ühendab, töötab seade jätkuvalt – see loeb, mille jaoks on võtmed olemas ja saadab klassikaliselt.
Seade, mis juhib brauseri laiendust või kaugallkirja (NIP-46) ei hoia nsec pärit, kuid see hoiab taastamise koodi, ja lõike 6.1 kihiline konstruktsioon, mis on kõik post-kvantiline pool vajab: allkirjajaja toodab NIP-44 kiht nagu see on alati, ja klient klõpsab väliskiht ise.
9rotatsioon
OÜ epoch Arvuti tuletamisel on see, mis muudab pöörlemise võimalikuks ilma uue võtme materjalita.Incrementing see annab värske võtmepaari samast juurest ja uuesti avaldatud teadaandest; kolleegid võtavad uue võtme asendatavast rekordist.
9.1 Vanad ajastud on säilinud ja midagi ei ole uuesti krüpteeritud
Klient ehitab dešifreerimiskandidaadid praegusest ajast kuni ajastuni − 3, nii et sõnum, mis on suletud vahetult enne pöörlemist, avaneb ikka veel võtmepaari vastu, mis oli praegune, kui see saadetakse.
See aken on see, mis muudab pöörlemise üldse ohutuks: ilma selleta katkestaks iga pöörlemine mis iganes oli lennul.Mis iganes juba suletud jääb identiteedi eluks loetavaks, sest sõnum, mida kasutaja ei saa enam avada, on nende jaoks rangelt halvem kui see, mille kaitset ei saa tagasiulatuvalt parandada (punkt 10.5).
10Mida see ei kaitse
Paber, mis loetleb ainult seda, mida disain saavutab, ei kirjelda süsteemi ja liideses turvaomaduse ülehinnamine on hullem kui selle väljajätmine.
10.1 Juur on teine saladus ja selle kaotamine on taastumatu
See on disaini tegelik hind. 2. peatüki piirang, et kasutajal peaks olema täpselt üks asi, mida säilitada, ei saa täidetud: nsec üksi ei rekonstrueeri post-kvantilist võtmet, sest kogu asi on selles, et ükski avalik väärtus ja ükski teine saladus ei paljasta seda.
Kui käsitsi ülekandmine on ainus tee, on see teravam, kui see esmakordselt lugeda võib. nympq1… kood igal pool on täpselt üks koopia sellest, ühes seadmes, ja kaotades selle seadme kaotab iga post-kvantilise sõnumi, seade blob ja arhiivi rida suletud.
nsec See ei aita, see on omadus, millele kogu disain tugineb.
Ründaja ründab kõige odavamat võimalikku teed, nii et skeem on väärt seda, mida selle nõrgim taastamisviis on väärt - meeldejääv passfrase, näiteks, paneks kogu asja, mida passfrase on väärt, ja wrapped rida on täpselt artefakt saagi-nüüd-dekodeeritud-hiljem vastane kogub ja jahvatab offline vaba aja jooksul.
10.2 Autentimine erineb konfidentsiaalsusest
Iga allkiri Nostris on Schnorr üle secp256k1 ja see on siin muutumatu. Vastane kvantarvutiga võiks allkirju võltsida ja kasutajat reaalajas teeselda. Mis hübriid võtmevahetus kaotab, on saagi-nüüd-dekodeeritud-hiljem: ründaja, kes salvestab täna liiklust, ei saa seda hiljem lugeda. See ei tee sõnumit andmatuks vastasele, kellel juba on masin. See eristamine viiakse rakendustesse tahtlikult - padlock indikaator teatab autentimisest, kilp teatab konfidentsiaalsusest ja need on eraldi glüfid, sest sõnum võib olla üks ilma teiseta.
See piirab ka seda, mida paragrahvi 4 teade võib lubada.Nppubi ja ML-KEMi võtme vaheline seos on secp256k1 allkiri, nii et vastane, kes suudab neid võltsida, võib asendada oma võtme.
10.3 Metadata andmed
Kingituspakend peidab saatja, vastuvõtja üle ühe p See ei varja, et sündmus on olemas, selle suurus, või kui edastaja sai selle.
10.4 Offline võrgustik
Nymchati Bluetooth-võrgu transportimine on eraldi protokoll, millel on oma käepide, ja see ei ole selle tööga hõlmatud.
3.5 Sõnumid, mis on juba saadetud
Ciphertext salvestatud ajal, kui mõlemal poolel oli ikka klassikaline püsib klassikaline püsivalt. See on juba olemas ja ei saa uuesti sulgeda. Kaitse algab sõnum, kus mõlemad pooled hoidnud post-kvantiline võtmed, mitte hetkel funktsiooni sisse lülitatud.
11Kaalutud alternatiivid
| lähenemine | Miks mitte |
|---|---|
| Pärit post-kvantiline võti identiteedi võti | Tagasilükkamine. tuletamine on avalik algoritm üle nsec, ja kvant vastane taastab nsec avaldatud npub, nii katkestades klassikaline pool käed üle post-kvant pool sellega. |
| Saada root kasutaja teistele seadmetele NIP-44 kaudu | Klassikalise ainult krüpteerimise all edastatud juure saab taastada igaüks, kes selle sõnumi salvestas ja murrab selle võtme hiljem, mis on vastane, mille juure eksisteerib peatada. |
| Eraldi genereeritud ML-KEM võtmepaar igal seadmel | Keeldutud. Seadmetel oleks erinevad dekapsulatsiooni võtmed ja üks asendatav teade iga identiteedi kohta ei saa neid kõiki kanda. Peers krüpteeriks, kuhu viimati avaldati võti, ja iga teine seade ei saaks tulemust lugeda. |
| Pange root PIN-i alla | Nelja numbri PIN-kood on umbes 13 bitti võrra võrreldes ründajaga, kes hoiab pakendatud rida. |
| Laiendage npub mõlema võtme kandmiseks | 1,184 baiti ei ole jagatav identifikaator ja see katkestaks iga olemasoleva Nostr kliendi 32-baidiga määratletud aadressi analüüsimise. |
| Key Directory teenus | Taastab võrgustiku olemasoleva autoriteedi, et vältida.Kes vastab otsingule, otsustab, kes saab sõnumit lugeda. |
| Lisage iga sõnumi võti | ei lahenda midagi: saatja vajab Vastuvõtja võtme enne esimest sõnumit, mis on täpselt nii, et eelnevat sõnumit ei tohi kanda. |
| In-band läbirääkimisvõime | Loob alandatud pinna.Ründaja, kes suudab võime lippu eemaldada, sunnib klassikalist teed. |
| Ainult post-kvant, mitte klassikaline jalg | Jätab aastakümneid analüüsitud secp256k1 vastutasuks palju noorema primitiivse. mõlemad Ebaõnnestunud |
12Rakendamise pariteet
Nymchat laevad kaks sõltumatut rakendusi selle konstruktsiooni - üks JavaScript veebirakenduse, üks Dart mobiilirakenduste, sealhulgas nullist ML-KEM-768 porti.
Dart ML-KEM rakendamine on kinnitatud ametliku
NIST ACVP
Testid, millel on teadaolev vastus ML-KEM-768 (ML-KEM-*-FIPS203NIST avaldab vektorid rakenduse valideerimiseks, nii et nende läbimine on tõendusmaterjaliks, et port on õige, mitte lihtsalt tõendusmaterjaliks, et kaks klienti on üksteisega nõus. Lisaks sellele on testvektorite ühine fikseerimine – seemne derivaat, kapslimine, mõlemad kasuliku koormuse vormingud ja täielik kingituspakend – loodud JavaScript-i viitest ja kontrollitud mõlema testpakendi poolt. Root-saladus laiendab seda fikseerimist selle asemel, et seda asendada: root-seemne, root-keypair, root-i avaliku sõrmejälje ning väliskihti tuletatud võti, nonce ja sellega seotud andmed on nende enda vektorid, nii et kaks klienti ei saa selle kohta erimeelsust avaldada.
nympq1… Mõlema rakenduse lahknevus ebaõnnestub ehituses selle asemel, et toota sõnumit, mida teine klient ei saa avada.
See on see, mis ütleb, et seade “see on juurt, mida ma hoian” alates “see on teine üks” ja klient, kes ei suutnud reprodutseerida teise kliendi sõrmejälge, loeks täiesti hea rekord kui ükski rekord üldse - ja seejärel, järgides jaotist 3.3, mindi teine juur ja jagada identiteet.
Nymchat on Avatud allikas all AGPL-3.0. Siin kirjeldatud krüptograafiline tuum on
js/nym-crypto.js ja js/modules/pq.js Veebipõhise kliendi ja
lib/core/crypto/ koos lib/features/identity/pq_registry.dart Mobiilsete klientide jaoks.
Lühema, mitte-tehnilise selgituse saamiseks vaadake Teadmistebaas kvantvastase krüpteerimise kohta.