Nymchat tehniskais whitepaper
Post-kvantu atslēgas nolīgums Nymchat
ML-KEM-768 publisko atslēgu izplatīšana pār Nostr bez direktorijas vai reģistra un to sēšanas no noslēpuma, ko neviena publiska vērtība neizpauž.
Post-kvantu atslēgu apmaiņas pievienošana ziņotājam lielākoties nav kriptogrāfijas problēma. Otrā Šajā rakstā aprakstīts, kā Nymchat atbild uz to - no kurienes nāk otrā atslēga, kā tas sasniedz cilvēkus, kuriem tas nepieciešams, un ko saskarnei ir atļauts prasīt par rezultātu - un pēdējā sadaļā, ko šis rezultāts neaizsargā.
Ērtības labad šī lapa ir mašīntulkota. Piemērotā versija ir oriģināls angļu valodā.
1Problēma
Mūsu privātās ziņas tiek šifrētas ar NIP-44, kurai ir divas atdalāmas puses. puse, kas šķērso vienkāršo tekstu — ChaCha20 ar HMAC-SHA256 tagu, kas atslēgts caur HKDF (RFC 5869 izstāde) — nav nozīmīgi apdraudēts kvantu dators; Grovera algoritms izmaksā kvadrātveida saknes paātrinājumu pret simetrisko taustiņu, un 256 biti to absorbē. piekrīt uz atslēgas ir elpceļu līkne Diffie-Hellman pār Pēteris256k1, un Shora algoritms atrisina diskrētu logaritmu tieši.Atgūstot vienu privāto atslēgu no tās publiskā kolēģa, tas atpakaļejoši atklāj katru kopīgo noslēpumu, ko atslēga jebkad ir radījusi.
Draudi, ko tas rada, netiek atlikti, kamēr šāda mašīna nepastāv. Pretinieks ar glabāšanu var ierakstīt šifrēšanas tekstu šodien un atšifrēt to, kad spējas ierodas. Viss, kas nosūtīts tagad, kas joprojām ir svarīgi, tad jau ir apdraudēts. Tas ir konkrētais uzbrukums pēc kvantu atslēgu apmaiņas zaudē, un tas ir iemesls, kāpēc darbs nevar gaidīt, kamēr mašīna tiks uzcelta.
1.1 Jautājums, uz kuru šis raksts atbild
Tādējādi, lai izvairītos no jebkādām problēmām, jums ir jāizvairās no jebkādām problēmām, kas var rasties, ja jums ir alerģiskas reakcijas, piemēram, alerģiskas reakcijas. (FIPS 203Tas nekavējoties rada sadales problēmu:
Lai paziņotu Alise šodien, jums ir nepieciešama viena lieta: viņas npub. Pievienojiet post-kvantu apmaiņu un jums ir nepieciešama otrā - viņas ML-KEM publiskā atslēga.
NPUB ir pašpietiekams. Jūs varat to uzrakstīt uz papīra, lasīt to skaļi, vai skenēt to no ekrāna, un tas ir viss, kas jums ir nepieciešams šifrēt. ML-KEM-768 publiskā atslēga ir 1,184 baiti. To nevar lasīt skaļi, tas netiks iekļauts lietotājvārdā, un tas nepieder QR kodam papildus identitātei, kas ir tikai 32 baiti.
Sarežģītākā daļa ir tāda, ka otrā atslēga rada trīs atšķirīgas problēmas, un pārējā šī raksta daļa lielā mērā ir atbilde uz tām:
- To var aizstāt. Atslēga, kuru neviens nevar izlasīt no vienas acu uzmetiena, ir tieši tāda lieta, ko uzbrucējs apmainās ar savu.
- Tam ir jāvienojas visās lietotāja ierīcēs. Tajā pašā kontā tālrunī un klēpjdatorā ir jābūt vienai un tai pašai atslēgai, vai arī ziņojumus, kas noslēgti vienam, nevar atvērt otram.
- To var zaudēt. Publiskā atslēga tiek atjaunota no noslēpuma, tāpēc tas, kas faktiski ir jāizdzīvo, ir šis noslēpums - un ar būvniecību nekas cits to neatjauno.
2Dizaina ierobežojumi
Četri ierobežojumi veidoja atbildi, un tie izslēdz lielāko daļu acīmredzamo dizainu pirms jebkura koda rakstīšanas.
- Pēc iespējas mazāk noslēpumu. Katrs papildu noslēpums ir cits veids, kā zaudēt savu vēsturi, un kāds, kurš zina, kā dublēt nsec, nezinās, kā dublēt neko citu. 3.1. iedaļa parāda, ka šo vienu nevar izpildīt pilnībā – pēckvantu atslēga, kas iegūta no nsec, vispār nesniedz pēckvantu aizsardzību – tāpēc dizains tērē tieši vienu noslēpumu un ne vairāk: viens atslēgas materiāla gabals, kas ģenerēts vienu reizi par identitāti, tiek prezentēts tādā pašā formā kā nsec un tajā pašā vietā, lai ikviens, kurš zina, kā saglabāt vienu, zinātu, kā saglabāt otru.
- Nav nekādas autoritātes. Nav servera, kuram var uzticēties, lai pateiktu, kura atslēga pieder kādam.
- Vairākas ierīces, viena identitāte Nostr identitāte parasti tiek izmantota no vairākiem klientiem vienlaicīgi. neatkarīgi no tā, kāds galvenais materiāls pastāv, tam jābūt identiskam visās no tām, un ceļiem, kas to tur nes, nav jābūt lasāmiem pretiniekam, pret kuru funkcija aizstāv.
- Bez sarunām Jebkura apmaiņa joslā ar “kurus ciparus jūs atbalstāt?” ir virsma, ko uzbrucējs var noņemt, lai piespiestu vājāko opciju.
3Neatkarīgs saknes noslēpums
Galvenais lēmums ir tas, ka ML-KEM dekapsulācijas atslēga ir sēta no atslēgvārdu materiāla, ko neviena sabiedriskā vērtība neizpauž.
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)
Sakne tiek parādīta lietotājam tādā veidā, kādā ir nsec: Beļģija 32 Cilvēka lasāmā prefikss
nympqTātad tas lasāms kā nympq1…, parādīts blakus nsec identitātes ekrānā aiz tās pašas atklāt mijiedarbību, kopēts ar to pašu kontroli, nekad neierakstīts un nekad nosūtīts nekur skaidrā.
Sāls ir mērķtiecīgi atdalīts no domēna, tāpēc neviens cits noslēpums nekad nevar iegūt to pašu atslēgu pāri. epoch Rotaļlietas rotācijas režīms (9. nodaļa)
3.1 Kāpēc atslēgu nevar iegūt no identitātes atslēgas
Acīmredzamais dizains ir sēt atslēgvārdu no lietotāja jau esošā noslēpuma:
seed = HKDF(salt = "…", IKM = nsec) // do not do this
Tas ir pievilcīgs četru iemeslu dēļ, visi no tiem ir reāli: nekas jauns, kas jāaizsargā, jo nsec jau ir rezerves; katra ierīce, kas piekrīt pēc konstrukcijas, bez sinhronizācijas protokola, lai iet nepareizi; viens aizstājams paziņojums par identitāti, kas ir acīmredzami pareizi, jo ierīces nevar nepiekrist par atslēgu; un atslēga, kas pastāv pirms tā jebkad tiek publicēta, lai klients varētu apzīmēt kaut ko sev pirmo reizi.
Visi četri ieguvumi ir bezjēdzīgi, viena iemesla dēļ. Shora algoritms, kas darbojas pret publicētu npub, rada nsec. Sēklu atvasinājums ir publisks algoritms par nsec. Tātad pretinieks, kurš pārtrauc klasisko pusi, rekonstruē postkvantu pusi, palaist to pašu HKDF, ko darbojas visi pārējie.
ML-KEM dekapsulācijas atslēga ir jānāk no entropijas, kas nav ne atvasināma no nsec, ne jebkad pārraidīta klasiskā tikai šifrēšanas veidā.
Neatkarīgi ģenerēts noslēpums, kas pēc tam tiek sinhronizēts starp lietotāja ierīcēm parastā NIP-44 ziņojumā, ir tāda pati neveiksme ar papildu soļiem: pretinieks ieraksta šo ziņojumu šodien un atgūst savu klasisko atslēgu vēlāk, un sakne izkrīt.
3.2 Iegūt saknes uz lietotāja citām ierīcēm
3. nodaļas ierobežojums – viena identitāte, vairākas ierīces – šeit nevar tikt apmierināts aritmētiski, jo viss galvenais ir tas, ka atslēga nav funkcija kaut kam, kas jau ir kopīgs ierīcēm. nympq1… Kods pats par sevi
Saknes tiek parādītas kā nympq1… blakus nsec, un otrā ierīce pieņem to ielīmēts tajā pašā panelī. tas ir viss mehānisms. ierīce, kas nav dota kodu nevar piedalīties, kas ir aprakstīts sadaļā 4.2.
Manuālā pārsūtīšana ir apzināta grīda, nevis pirmais solis.3.1. iedaļas noteikums saka, ka sakne nekad nevar pārvietoties saskaņā ar klasisko tikai šifrēšanu, un katrs mehānisms, kas to padarītu automātisku – sinhronizējot to caur releju, iesaiņojot to ar identitātes atslēgu – pārkāpj tieši to.
Formāts atstāj vietu iesaiņotajam ceļam: ierakstam var būt iesaiņojumu saraksts, katram ir AEAD blob zem atslēgas, ko lietotājs var reproducēt citā ierīcē - piemēram, passkey PRF izeja. nympq1… Tas ir vienīgais veids, kā to pārvarēt.10.1 sadaļa norāda, cik tas maksā.
pats ieraksts dzīvo savā iestatījumu kategorijā, nymchat-pq-rootPat nesot iesaiņojumus, tas veic nepieciešamo darbu: tā klātbūtne ir tas, kā otrā ierīce uzzina, ka šai identitātei jau ir sakne, kas ir tas, kas pārtrauc to no konkurenta (3.3. iedaļa).
Tās nymchat-pq-root Kategorijas MUST nē Šī rinda nes vienīgo saknes kopiju, tāpēc to noslēdzot zem atvasinātas saknes atslēgas ir atslēga, kuras atslēga atrodas kastē: neviena ierīce to nekad nevarēja atvērt, ieskaitot to, kas to rakstīja.
Katra cita iestatījumu kategorija var un vajadzētu izmantot sakņu atvasināto atslēgu.
3.3 Dzimšana un adopcija
Uzsākot, turot pastāvīgu identitāti, klients darbojas šādā secībā:
- Meklējiet esošo
nymchat-pq-rootReģistrācija . - ieraksts atrasts, un šī ierīce to var atbloķēt - pieņemt to un paziņot šo identitāti kā post-kvantu spējīgu.
- ieraksts atrasts, un šī ierīce to nevar atbloķēt - neradīt jaunu sakni, un vispār nepublicēt nekādus paziņojumus. mudināt lietotāju saistīt šo ierīci, ievadot
nympq1…kods no ierīces, kurai tas jau ir. - Nav rekordu — izveidot sakni, publicēt ierakstu, paziņot un parādīt
nympq1…lietotājam vienu reizi, lai viņi varētu to saglabāt.
3. solis ir solis, kas ir viegli kļūdīties, un tas ir iemesls, kāpēc pasūtījums tiek uzrakstīts, nevis atstāts katrai īstenošanai.Divas ierīces, kuras katra nolemj ģenerēt sakni, rada divas neatkarīgas saknes zem vienas identitātes, un tas ir neveiksme šī pasūtījuma pastāv, lai novērstu.
4Iespēju paziņojums
Publiskā puse no atvasinātā atslēgvārdu pāra tiek publicēta kā adresējama
Nīderlande-01
notikums — veids 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": [ ... ]
}
}
Adresējams nozīmē, ka pārraide saglabā vienu notikumu par (kind, pubkey, d-tag), tāpēc republikas aizstāj iepriekšējo paziņojumu vietā.
Paraksts ir saistošs. Pasākums ir parakstīts ar identitātes atslēgu, tāpēc apgalvojums “šis ML-KEM atslēga pieder šim npub” ir tieši tikpat spēcīgs kā npub pats.
Paziņojumi ir beigušies. Septiņas dienas NIP-40 Izbeigšanās, kas tiek atkārtoti publicēta ik pēc 24 stundām, saglabā ierakstu paziņojumu par klientu, kas joprojām darbojas, nevis to, kas agrāk bija.
Izlaists paziņojums tiek izlasīts tieši tāpat kā tas, kas nekad nesēja atslēgu: kolēģi nosūta parasto NIP-44, ko katrs pieteikšanās var izlasīt, un klients atsāk post-kvantu apmaiņu savā nākamajā savienojumā, kad tas atkārtoti publicē.Tātad klusēšana ilgāk par nedēļu maksā aizsardzību ziņojumiem, kas nosūtīti starpību laikā - tie ir klasiski šifrēti, nevis kvantu izturīgi - un maksā neko citu.
Bez tā ieraksts pārdzīvo to, ko tas sauc par atslēgu: ierīce, kas tiek izdzēsta, atkārtoti iestatīta vai ir nomainījusi sakni, atstāj stāvus norādījumus, lai ieslēgtu atslēgu, kuru neviens vairs neuztur, un zem tā nosūtītie ziņojumi tiek zaudēti bez kļūdām nevienā pusē.
Atslēgvārdu lauka nosaukums ir tā formāts. Lauks ir pk2, un cipars ir līguma daļa, nevis dekorācija: tas nosauc lietderības slodzes formātu, ar kuru atslēgu var izmantot. Lasītājs, kurš neatzīst lauku, noslēdz “Nymchat klientu, nav post-kvantu atslēgu” un nosūta parasto NIP-44, kuru katra pieteikšanās var izlasīt. Tas ir pareizais neveiksmes virziens, un ir vērts norādīt kā noteikumu, ka formāta numurēšana pastāv, lai izpildītu: neatpazīstama spēja prasība ir jāmaksā aizsardzība, nekad piegāde. atslēga, ko peer nevar izmantot, ir sliktāka par nevienu atslēgu vispār, jo ziņojums, ko tas rada, tiek zaudēts bez kļūdām abās pusēs.
4.1 Nepilnība ir nozīmīga un trīsvērtīga
Subtila, bet svarīga detaļa: paziņojumu publicē katrs Nymchat klients, ne tikai tie, kas spēj post-kvantu, un atslēgvārdu lauks ir fakultatīvs.
| novērotāji | Līdzekļi | Sūtīt uzvedību |
|---|---|---|
| Paziņojums ar atslēgu | Nymchat, post-kvantu spējīgs | Hibrīds |
| Paziņojums, nav atslēgas | Nymchat, tikai klasisks - pēc kvantu izslēgšanas, vai ierīce, kas vēl nav saistīta ar identitātes sakni | Klasiskais NIP-17 |
| Bez paziņojuma | Nezināms klients. varētu būt jebkurš Nostr vai Bitchat lietotājs | Klasisks, plus saderības vāciņš |
Paziņojums bez atslēgas ir parakstīts paziņojums, ka sūtītājs darbojas Nymchat, kas ļauj sūtīšanas ceļam izlaist spekulatīvu krustojuma protokola iesaiņojumu, kas citādi būtu jāiekļauj ikvienam, ko tas nevar identificēt.
4.2 Ierīce, kas nespēj atvērt sakni, paliek klusa
Paziņojums ir aizstājams: viens notikums par identitāti, pēdējais rakstīšana uzvar.Tas ir tas, kas padara vienu ierakstu dizainu darbību, un tas ir arī tas, kas padara nesaistītu ierīci bīstamu, ja tā publicē. Ierīce, kas paziņoja par atslēgu, ko tā bija minējusi par sevi, apgrūtinātu reālo ierakstu un nosūtītu katru peer uz šifrēšanu zem atslēgas, ko citas ierīces nevar atvērt.
Tātad ierīce, kas zina sakni, pastāv, bet nevar to atvērt, vispār neizsūta paziņojumu.Tā nav salauzta un tā nav izslēgta no lietojumprogrammas: tā joprojām lasa katru ziņu, kurai ir atslēgas, un joprojām nosūta klasiski, vienlaikus mudinot lietotāju to saistīt.
5Atklāšana un nosūtīšanas lēmums
Klienti mācās līdzcilvēku atslēgas divos veidos. pastāvīgs abonements aptver cilvēkus, ar kuriem lietotājs faktiski atbilst – atvērtas sarunas un grupas locekļi – tāpēc viņu paziņojumi ierodas kā parastie notikumi. Pirmo reizi, kad līdzcilvēks tikās, vienreizējs vaicājums darbojas sūtīšanas laikā, kas ir ierobežots ar 2,5 sekundēm; ja tas netiek atrisināts, ziņojums kļūst par klasisku, kas ir uzvedība, kas pastāvēja pirms post-kvantu tika pievienots, nevis jauns neveiksmes režīms.
Lietotājs, kurš savieno jaunu ierīci, vai kurš pāriet no pārlūkprogrammas paplašinājuma pieteikšanās uz vietējo atslēgu, kļūst par post-kvantu spējīgu sarunu vidū, un pastāvīgi cached “no” saglabātu tos klasiskajā šifrēšanā paziņojuma mūža garumā.
5.1 Kāpēc nav lejupielādes uzbrukuma
Maršruta lēmums tiek samazināts līdz vienam jautājumam:
pq = (we hold a signed, unexpired ML-KEM key for this recipient)
Nav spēju sarunu, nav atbalstīto algoritmu saraksta, un nav lauka, ko uzbrucējs var atbrīvot, lai piespiestu vājāku ceļu. ir Neveiksmes režīms noņemts vai aizturēts paziņojums ir tas, ka ziņojums iet klasisks - status quo pirms šīs funkcijas - nevis ka hibrīda ziņojums tiek pazemināts uz kaut ko maldinošu.
Pretējais arī tur un ir svarīgāks: klients nosūta hibrīdu Tikai kad tas tur atslēgu, un atslēgas turēšana ir pierādījums, ka saņēmējs var dekapsulēt.Nav stāvokļa, kurā ziņojums tiek nosūtīts post-kvantu kādam, kurš to nevar izlasīt.
6Hibrīda būvniecība
Nymchat neaizstāj NIP-44. Tas to iesaiņo.Nemodificēts NIP-44 šifrēšanas teksts ir iekšējais slānis, un ML-KEM atslēdz ārējo AEAD ap to:
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)
Abiem noslēpumiem joprojām ir jāatgūst, lai izlasītu ziņojumu: ārējais slānis rada tikai NIP-44 šifrēšanas tekstu, un atvērumam, kas vajadzīgs klasiskajam ECDH. Kvantālais pretinieks, kurš pārtrauc secp256k1, saņem iekšējo atslēgu un joprojām saskaras ar ML-KEM; ML-KEM pārtraukums sagriež ārējo slāni un atstāj NIP-44 stāvoklī.
kem_ssNekas šajā atvasinājumā neietekmē neapstrādāto ECDH izeju, kas ir tas, kas notiek 6.1. iedaļā.kem_ct,recip_kem_pkUn abas identitātes atslēgas ir saistītas kā saistītie dati, tāpēc ārējais slānis ir saistīts ar precīzu transkriptu, kas to radīja.
Saņēmēja ML-KEM atslēga ir ilgstoša, bet katrs ziņojums nes neatkarīgu šifrēšanas tekstu un līdz ar to neatkarīgu
kem_ssTas ir tas, kas padara nonce atvasināšanu, nevis izlases to izklausās:
ChaCha20-Poly1305 pārklājums
tas tiek pārtraukts, atkārtoti izmantojot (slēgu, nons) pāri, un šeit atslēga pati ir jauna katram ziņojumam, tāpēc neviena pāri nevar atkārtot.
6.1 Kāpēc slāņi paliek atsevišķi
Alternatīva ir sajaukt abus noslēpumus vienā sarunu atslēgā un nodot to NIP-44:
ck = HKDF-Extract(salt = "…",
IKM = ecdh_x || kem_ss || …) // do not do this
Šī konstrukcija izklausās kā kriptogrāfija. tai ir viena strukturāla problēma: tai ir nepieciešama
ecdh_x, neapstrādātu x-koordinātu ECDH izejas, kā galveno materiālu - un pārlūkprogrammas paplašinājumu (NIP-07) vai attālā parakstītājs (NIP-46Tas veic NIP-44 zvanītāja vārdā un atgriež šifrēšanas tekstu, kas ir viss punkts, lai turētu atslēgu kaut kur, kur pieteikums nevar sasniegt.
Tāpēc noslēpumu sajaukšana izslēdz katru pieteikšanos, kas saglabā identitātes atslēgu parakstīšanā, tas ir, vispievēršamākie lietotāji, un neviens darbs pie atslēgas atvasinājuma to nevar mainīt.
Izmaksas ir joslas platums, un tas nav mazs. ML-KEM šifrēšanas teksts ir 1,088 baiti un brauc uz katru ziņojumu, base64url kodēts līdz 1,451 rakstzīmēm; ārējais AEAD pievieno 16 baitu Poly1305 tagu un paplašina NIP-44 lietderīgo slodzi, ko tas iesaiņo par trešdaļu. 50 rakstzīmju ziņojums aug no 176 baitiem līdz 1,712, un 2000 rakstzīmju viens no 2,820 līdz 5,238.
6.2 Pašaprakstītie payloads
Tās pq2. Prefikss padara izvietošanu pakāpenisku: tas ir paša aprakstošs, tāpēc klients izvēlas atšifrēšanas ceļu, pārbaudot lietderīgo slodzi, nevis uzticoties tagam vai atceroties to, ko atbalsta peer. lasītājs, kurš nepazīst prefiksu, neizdodas atvērt šo lietderīgo slodzi, nevis to nepareizi izlasīt, un ziņojumi, kas noslēgti pirms abām pusēm, varētu padarīt post-kvantu lasāmus kā parasts NIP-44 bez migrācijas.
ML-KEM dekapsulācija ir izstrādāta tā, lai nekad neizdoties: ņemot vērā nepareizu šifrēšanas tekstu, Fujisaki-Okamoto transformācija atgriež deterministisku pseido-nejaušu noslēpumu, nevis kļūdu. Tāpēc nepareizais atslēga vispār nepārklājas KEM slānī – tā pārklājas kā HMAC kļūda NIP-44 iekšpusē, kas ir tāds pats veids, kā nepareizas klasiskās atslēgas virsmas. Zvanītāji izturas pret abiem vienādi, tāpēc neveiksmei nav atšķirības signāla. Tas ir arī tas, kas padara 9.1. iedaļas kandidātu sarakstu darbspējīgu: klients mēģina katru atslēgu savukārt un ļauj NIP-44 pateikt, kas bija pareizs.
6.3 Abi dāvanu iesaiņojuma slāņi
A NIP-17 Privātais ziņojums ir a NIP-59 dāvanu iesaiņojums: neparakstīts baumas, aizzīmogots zem nosūtītāja identitātes atslēgas (tipa 13), pēc tam iesaiņots zem metināšanas atslēgas, kas ģenerēta katram ziņojumam (tipa 1059). par pieteikšanos, kas tieši tur identitātes atslēgu, Nymchat hibrīdē abus slāņus, katrs ar savu encapsulation.
Parakstītāja pieslēgums saņem tikai ārējo slāni. Zīmi paraksta parasts NIP-44 - lietojumprogramma nekad neredz atslēgu, kas to padara - tāpēc to nevar hibrīdēt vietā. Tas neko nemaksā pret attiecīgo uzbrukumu: zīmi var sasniegt tikai caur iesaiņojumu, un iesaiņojums ir tas, ko ieraksta uzglabā.
7Grupas ziņojumi un daļējs pārklājums
Grupas ziņojums nav viens šifrēšanas teksts. Tas ir tāds pats vienkāršs teksts, kas izgatavots katram dalībniekam, katra kopija, kas iekapsulēta attiecīgā dalībnieka paša ML-KEM atslēgā.
Tas rada grāmatvedības problēmu, ka naiva īstenošana kļūst nepareiza.Ja astoņi no desmit dalībniekiem saņem hibrīda kopiju, ziņojums ir nē Astoņi desmiti aizsargāti. pretinieks vajag vienu klasisku vienkārša teksta kopiju, kas ir identiska visās desmitās, tāpēc ziņojums ir aizsargāts tikai tad, ja katru Tā ir kopija.
Tādējādi Nymchat izsekos katra ziņojuma pārklājums fan-out laikā - skaitlis ir zināms tikai tad, kad iepakojumi tiek uzbūvēti - un badge ziņo “quantum-rezistant 8 no 10 locekļiem” nevis apgalvo, ka ziņojums ir aizsargāts. Saņemt grupas ziņojums (tikai sūtītājs skaitās fan-out), saskarne ziņo daļēju, nevis pilnīgu aizsardzību.
7.1 Ko ziņo vairogs
Aizsardzība stāsta patiesību par Ziņojums, nevis par programmatūru, kas to nosūtīja:
- Pilnīga aizsardzība: katra šī vienkāršā teksta kopija iznāca hibrīds.
- Daļēja: dažas grupas ziņojuma kopijas iznāca klasiski. izvilkts degradēts, nevis pilns, jo viena klasiskā vienkārša teksta kopija, kas ir identiska visās no tām, ir pretinieka vajadzībām.
- Klasisks ir norādīts tieši, nevis parādīts kā nav zīmes, jo trūkst indikators ir neskaidrs starp “neaizsargāts”, “broken”, un “šis būve trūkst funkciju”.
Spriedums tiek ierakstīts, kad ziņojums ir noslēgts, nevis atkārtoti aprēķināts no tā, ko peer reklāma vēlāk. cipherteksts, kas jau pastāv, nevar kļūt labāk aizsargāts, nekā tas bija, un saskarne, kas pārveidoja vecos ziņojumus par jaunas paziņojuma spēku, apgalvo kaut ko nepatiesu par bajtiem pārraidē.
Augšējā grupas noteikumu kaudze atrodas virs tā, nevis to aizstāj: grupas ziņojums ir pilnībā aizsargāts tikai tad, ja katra dalībnieka kopija ir, un saņemtais grupas ziņojums bez seguma skaitīšanas rāda daļēju.
8Kopijas, kas adresētas sev
Vairākas lietas, ko klients glabā, tiek šifrētas lietotāju identitātei: sinhronizētie iestatījumi, sarunu saraksts, grupas atslēgas un ziņojumu arhīvs. Tie nes vairāk informācijas par lietotāju nekā lielākā daļa atsevišķu ziņojumu, tāpēc, atstājot tos klasiskos, tie kļūtu par vājākajiem saglabātajiem artefaktiem neatkarīgi no tā, cik rūpīgi paši ziņojumi tika aizzīmogoti. nymchat-pq-root Kategorija pati par sevi, ko nevar noslēgt ar atslēgu, ko tikai tā var ražot.
Iestatījumi blob vai arhīva rindā sēž vienā vietā gadiem, kas ir tieši tāda veida lieta, ko savākšanas-tagad-decrypt- vēlāk pretinieks apkopo - daudz vairāk nekā jebkura viena ziņa, kas ir vismaz ephemeral lietotāja paša prātā.
Vienu ierobežojumu šeit nosaka formāts, nevis atslēga. katru ierīce uz konta, tāpēc katra ierīce reklamē to, ko tā var atvērt sarakstā tās paziņojums nes, un konts raksta tikai to, ko visi var lasīt.
Ierīce, kurai pieder identitāte, bet nav saknes, nevar atvērt neko, kas noslēgts ar sakņu atvasināto atslēgu, ieskaitot tās pašas iestatījumus.Tas ir apzināta sekas, nevis pārraudzība, un tādēļ 3.3. iedaļā ir šāds ierīces ielūgums saistīšanai, nevis jaunu sakni: otrs saknes neradītu blobu lasāmu, tas tikai sadalītu identitātes atslēgmateriālu divās daļās.
Ierīce, kas darbina pārlūkprogrammas paplašinājumu vai attālo parakstītāju (NIP-46), nesatur nsec, no kura to var iegūt, bet tā patiešām tur atgūšanas kodu, un saskaņā ar 6.1. iedaļas slāņa konstrukciju tas ir viss, kas vajadzīgs pēc kvantu puses: parakstītājs ražo NIP-44 slāni, kā tas vienmēr ir, un klients atslēdz ārējo slāni.
9Rotācija
Tās epoch skaitītājs atvasinājumā ir tas, kas padara rotāciju iespējamu bez jaunā atslēgvārda materiāla. palielinot to, tiek iegūta jauna atslēgvārdu pāra no tā paša saknes un atkārtoti publicēta paziņojuma; vienaudži uzņem jaunu atslēgu no aizvietojamā ieraksta.
9.1 Vecās epoķes tiek saglabātas, un nekas nav atkārtoti šifrēts
Klients izveido atšifrēšanas kandidātus no pašreizējā laikmeta līdz laikmetam − 3, tāpēc ziņojums, kas noslēgts neilgi pirms rotācijas, joprojām atveras pret atšifrēšanas pāri, kas bija pašreizējais, kad tas tika nosūtīts.
Tas ir tas, kas padara rotāciju drošu darīt vispār: bez tā, katra rotācija iznīcinātu visu, kas bija lidojumā. Viss, kas jau ir noslēgts, paliek lasāms identitātes mūža garumā, jo ziņojums, ko lietotājs vairs nevar atvērt, viņiem ir stingri sliktāks nekā tas, kura aizsardzību nevar uzlabot atpakaļejoši (10.5. iedaļa).
10Ko tas neaizsargā
Papīrs, kas uzskaita tikai to, ko sasniedz dizains, neapraksta sistēmu, un pārvērtējot drošības īpašību saskarnē ir sliktāk, nekā to izlaist.
10.1 Sakne ir otrs noslēpums, un zaudēt to nav iespējams atgūt
Tas ir dizaina reālā cena. 2. iedaļas ierobežojums, ka lietotājam vajadzētu būt tieši vienai lietai, kas jāglabā, nevar tikt izpildīts: tikai nsec nepārveido postkvantu atslēgu, jo viss ir tāds, ka neviena publiska vērtība un neviens cits noslēpums to neizpauž. Ja neviena ierīce nesatur sakni un nevienu no 3.2. iedaļas iesaiņojumiem nevar atvērt, materiāls, kas noslēgts ar sakņu atvasināto atslēgu, nav atgūstams.
Ar manuālo pārsūtīšanu vienīgais ceļš, tas ir asāks, nekā tas var vispirms izlasīt. nympq1… kods jebkurā vietā ir precīzi viena kopija no tā, vienā ierīcē, un zaudējot šo ierīci zaudē katru post-kvantu ziņojumu, iestatījumus blob un arhīva rindu, kas noslēgts ar to.
nsec Tas nepalīdz, tas ir īpašums, uz kura balstās viss dizains.
Uzbrucējs uzbrūk lētākajam pieejamajam ceļam, tāpēc shēma ir tā vērta, ko tā vājākais atveseļošanās ceļš ir vērts - neaizmirstama frāze, piemēram, ievietotu visu, kas ir vērtība, un iesaiņotā rindā ir tieši artefakts, ko lietus tagad atšifrē vēlākais pretinieks savāc un mīkstina bezsaistē.
10.2 Autentifikācija, kas atšķiras no konfidencialitātes
Katrs paraksts Nostr ir Schnorr pār secp256k1, un tas šeit nav mainījies. Ienaidnieks ar kvantu datoru varētu vilkt parakstus un izlikties par lietotāju reālajā laikā. Kas hibrīda atslēgu apmaiņas sakāves ir raža-tagad-decrypt- vēlāk: uzbrucējs ierakstot datplūsmu šodien nevar to izlasīt vēlāk. Tas nepadara ziņojumu neatbrīvojamu pret pretinieku, kurš jau ir mašīna. Šī atšķirība tiek veikta lietojumprogrammās apzināti - padlock indikators ziņo par autentifikāciju, vairogs ziņo par konfidencialitāti, un tie ir atsevišķi glifi, jo ziņojums var būt viens bez otra.
Tas arī ierobežo to, ko 4. iedaļas paziņojums var solīt.Savienojums starp npub un ML-KEM atslēgu ir secp256k1 paraksts, tāpēc pretinieks, kurš var tos vilkt, var aizstāt savu atslēgu.
10.3 Metadati
Dāvanu iesaiņošana slēpj sūtītāju, saņēmēju, kas pārsniedz vienu p Iekšējā ziņojuma tag, veids un laika zīmogs. tas neslēpj, ka notikums pastāv, tā lielums, vai kad pārraidītājs to saņēma.
10.4 Offline tīkls
Nymchat Bluetooth tīkla transports ir atsevišķs protokols ar savu roku, un tas nav iekļauts šajā darbā.
10.5 Ziņojumi, kas jau nosūtīti
Ciphertext ierakstīts, kamēr abas puses joprojām ir klasiskās klasiskās pastāvīgi. Tas jau pastāv un to nevar atkārtoti aizzīmogot. Aizsardzība sākas ar ziņojumu, kurā abas puses turēja post-kvantu taustiņus, nevis brīdī, kad funkcija tika ieslēgta.
11Apsveramās alternatīvas
| Pieeja | Kāpēc ne |
|---|---|
| Iegūt post-kvantu atslēgu no identitātes atslēgas | Atteikta. atvasinājums ir publisks algoritms par nsec, un kvantu pretinieks atgūst nsec no publicētā npub, tādējādi pārtraucot klasisko pusi rokas pār post-kvantu pusi ar to. |
| Sūtīt sakni uz lietotāja citām ierīcēm, izmantojot NIP-44 | Sakne, kas tiek pārraidīta klasiskā tikai šifrēšanas režīmā, ir atgūstama ikvienam, kurš ierakstījis šo ziņu un iznīcina tās atslēgu vēlāk, kas ir pretinieks sakne pastāv, lai apturētu. |
| Atsevišķi ģenerēts ML-KEM taustiņu pāris katrā ierīcē | Ierīces turētu atšķirīgas dekapsulācijas atslēgas, un viens aizstājams paziņojums par identitāti nevar tos visus pārnest. Peers šifrētu, lai kura atslēga tiktu publicēta pēdējo reizi, un katra cita ierīce nevarētu izlasīt rezultātu. |
| Ielieciet sakni zem PIN | Atteikta. četru ciparu PIN ir aptuveni 13 biti pret bezsaistes uzbrucēju, kas tur iesaiņoto rindu. |
| Paplašiniet npub, lai pārvietotu abas atslēgas | 1,184 baiti nav koplietošanas identifikators, un tas pārtrauks katru esošo Nostr klientu analīzi par adresi, kas definēta kā 32 baiti. |
| Galvenais direktorijas pakalpojums | Atjauno autoritāti, ko tīkls pastāv, lai izvairītos.Tas, kurš atbild uz meklēšanu, izlemj, kurš var izlasīt ziņojumu. |
| Pievienojiet atslēgu katram ziņojumam | Nekas neatrisina: nosūtītājam ir nepieciešams Saņēmēja atslēgu pirms pirmā ziņojuma, kas ir tieši tas gadījums bez iepriekšējā ziņojuma, lai to pārvadātu. |
| In-band spējas sarunas | Izveido lejupslīdes virsmu. uzbrucējs, kurš var noņemt spēju karogu, piespieda klasisko ceļu. |
| Tikai post-kvantu, bez klasiskās pēdas | Atmet gadu desmitiem secp256k1 analīzes apmaiņā pret daudz jaunāku primitīvu. gan Fails ir. |
12Īstenošanas paritāte
Nymchat piegādā divas neatkarīgas šīs konstrukcijas īstenošanas — vienu JavaScript tīmekļa lietojumprogrammai, vienu Dart mobilajām lietojumprogrammām, tostarp no nulles ML-KEM-768 portu.
Dart ML-KEM īstenošana ir validēta pret oficiālo
Nīderlandes ACVP
Iepazīstieties ar to, kas jums ir nepieciešams, lai izvairītos no ādas iekaisuma (ML-KEM-*-FIPS203) — 25 atslēgu ģenerācijas, 25 encapsulācijas un 10 dekapsulācijas gadījumi, kas darbojas kā to pašu komplektu. Tie ir vektori, ko NIST publicē, lai apstiprinātu īstenošanu, tāpēc to nodošana ir pierādījums tam, ka ports ir pareizs, nevis tikai pierādījums tam, ka divi klienti ir vienisprātis viens ar otru. Turklāt testēšanas vektoru kopīga fiksācija — sēklu atvasināšana, encapsulācija, gan lietderīgās slodzes formāti, gan pilnīgi dāvanu iesaiņojumi — tiek ģenerēta no JavaScript atsauces un pārbaudīta ar abiem testēšanas kompleksiem. Sakņu noslēpums paplašina šo fiksāciju, nevis to aizstāj: sakne uz sēklu, sakne uz atslēgu, saknes publiskā pirk
nympq1… Atšķirība abos īstenojumos neizdodas izveidot, nevis radīt ziņojumu, kuru otrs klients nevar atvērt.
Tas ir tas, kas stāsta ierīce “tas ir sakne es tur” no “tas ir atšķirīgs viens”, un klients, kas nevar reproducēt cita klienta pirkstu nospiedumu, izlasītu perfekti labu ierakstu kā neviens ieraksts vispār - un pēc tam, sekojot 3.3. iedaļai, pieminot otro sakni un sadalot identitāti.
Nymchat ir Atvērtā avota saskaņā ar AGPL-3.0. šeit aprakstītais kriptogrāfiskais kodols ir
js/nym-crypto.js un js/modules/pq.js tīmekļa vietnē klients, un
lib/core/crypto/ ar lib/features/identity/pq_registry.dart Mobilais klients ir.
Lai iegūtu īsāku, ne-tehnisku skaidrojumu, skatiet Zināšanu bāzes lapa par kvantu izturīgu šifrēšanu.