Ezaintza-basea: kuantiko-resistentzia duen enkriptazioa

Nymchat whitepaper teknikoa

Post-kuantiko gako-akordioa Nymchat-en

ML-KEM-768 gako publikoak direktoriorik edo erregistro baterik gabe Nostrren bidez distribuitzea, eta haien iturria ez duen balio publiko batenak ere agerian utzi dezakeen sekretu batetik sortzea.

1.0 bertsioa Agustua 2026 Nymchat 3.74+rentzat aplikatzen da

Post-kuantiko gako-truke baten gehitzea mezular batean gehienbat ez da kriptografia arazo bat. Elementu primarioak estandarizatuak dira eta liburutegiak existentegunak dira. Zailena, partekatzaile bakoitzak orain ... bat behar duela da. bigarren gako publikoa, eta sare deszentralizatu batek ez duzu jartzeko toki argi bat. Paper honek Nymchat-ek nola erantzuten duen azaltzen du — non datorren bigarren gakoa, nola iristen den behar duten pertsonengana eta interfazeak emaitzari buruz zer esateko baimena duen — eta, azken atalean, emaitza horrek ez duen babesten.

1Problema

Nostr mezu pribatuak ...-rekin enkriptatuta daude NIP-44, bi parte separagarri dituena. Testu-planua nahaste duen parteak — HMAC-SHA256 etiketa batekin ChaCha20, bidez... HKDF (RFC 5869) — ez da kuantiko baten arrisku esanguratsuan dagoen; Groverren algoritmoak gako simetriko baten aurka enraiz eskuarraren abiadura-abisua kostatzen du, eta 256 bitek hori absorbatzen du. Zati erdi hori adostatzen du gakoan elipsatiko kurba Diffie-Hellman da gainean secp256k1, eta Shorren algoritmoak logaritmo diskretua zuzenean kondezkatzen du. Gako pribatu bat bere alderdi publikutik berreskuratzeak, gako horrek bildu zuen sekretu partekatua guztia atzeragoan agerian utzi egiten du.

Honek sorttzen duen mehatxua ez da horrenko makina bat ezdatzen arte atzeratuta geratzen. Biltegiratza duen aurkari batek gaur egun kriptografia-testua grabatu dezake eta, gaitasuna iritsi bezain pronto, dekriptatu dezake. Gaur bidalitakoak, geroera garrantzitsua izango bada, jada konprometituta dago. Honek da kuantiko-osteko giltza-trukeak menderatzen duen erasoia, eta horregatik ezin da lanak makina eraiki arte itxaron.

1.1 Paper honek erantzuten duen galdera

Konponbidea ondo ulertuta dago: post-kuantiko izurrizketa-mekanismo bat truke klasikoaren ongi aldetik erabiltzea, arrebatziari zerbait irakurtzeko biak hauts egin behar diostela. Nymchat-ek ML-KEM-768 erabiltzen du (FIPS 203). Horrek berehala banaketa arazo bat sortzen du:

Galdera

Gaur Aliceri mezu bat bidaltzeko, gauza bat behar duzu: bere npub. Txantza post-kuantiko bat gehituz, bigarren bat behar duzu — bere ML-KEM gako publikoa. Non dago gako hori, eta nola lortu dezakezu zerbait bidali baino lehen?

Npub bat autonomoa da. Paperean idatzi dezakezu, oihukatu dezakezu edo pantailatik eskaneatu, eta hori da guztia norbaitek zuretzat enkriptatzeko behar duena. ML-KEM-768 gako publikea 1.184 bytekoa da. Ezin da oihukatu, ez da erabiltzaile izen batera sartuko, eta ez dago QR kode batean 32 byteko identifikazio baten ondoan jartzeko egokia.

Tamaina zati erraza da. Zailagoa dena, gako bigarren batek arazo hiru ezberdin ekartzen dituela da, eta paper honen gainerakoa gehienbat horien erantzuna da:

2Diseinu-mugak

Lau mugak erantzuna moldatu zuten, eta diseinu agerragarri gehienak kanporatzen dituzte kodea idatzi baino lehen.

  1. Sekretu gutxi ahal litezan. Nostr erabiltzaileek sekretu bakarra dute jada, nsecra. Sekretu osagarri bakoitza zure historia galtzeko beste bide bat da, eta nsec bat babestzea dakien pertsona batek ez du beste ezer babestzea dakiko. 3.1 atalean erakusten denez, hau ez da zuzenean bete daitekeela — nsec tik ateratutako post-kuantiko-gako batek ez du post-kuantiko-babeserik ematen — beraz, diseinuak sekretu bakarra erabiltzen du eta ez gehiago: identitate bakoitzeko behin sortzen den material gako bakarra, nsec bezalako formatuan eta leku berean aurkezten dena, beraz, bat gordetzen jakiten duenak beste bat ere gordetzen jakiten baitu. 10.1 atalak zintzoa da horrek oraindik zer kostatzen dion esatean.
  2. Ez du agurretasunik. Ez dago urtea norren dena esateko fidagarri den zerbitzuerarik. Hala ere motako zerbitzuerak mezuak bideratu daitezkeen puntua bihurtzen da.
  3. Gailu anitz, identitate bat. Nostr identitate bat ohikoan klient bat baino gehiagotan erabiltzen da aldi berean. Ez dagoenako giltz-materiala guztia guztietan berdin amaitu behar da, eta bertara eramaten dituzten bideak ez dira defendatzen ari den funtzioaren aurkariak irakurri ahal izango dituen moduan izan behar.
  4. Ez negoziaziozerik. 'Zein kriptografia-metodoak dituzu biltzen?' bidezko kanala bertan egiten den truke guztia, higatzaile batek aukera ahulagoa behartzeko kendu dezakeen estaldia da. Diseñak ez du behentzeko ezer izan behar.

3Errotze sekretu independente bat

Erabaki oinarrizkoa da ML-KEM decapsulazio gakoa ez duen balio publiko batek erakutsiko ez duen gako materialetik sortzen dela. Identitate bakoitzak sekretu oinarri bat jasotzen du, behin sortua:

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)

Oinarria usuarioari nsec bat bezala aurkezten zaio: bech32 gizakiarako irakurgarriko prefixoarekin nympq, beraz, honela irakurtzen da nympq1…, identitate pantailan nsec alboan agertzen dena, erakusteko interakzio beraren atzetik, kontrol berairekin kopiatua, inoiz ez da erregistroetan gordetzen eta inoiz ez da testu garbian beste toki batera bidaltzen. Ez da pasarte bat eta ez da sarrera bat. Gako materiala da erabiltzaileak gorde dezakeena, nsec bezala.

Saltak deliberatuki domain-separate egiten da, beraz, ez dagoen beste sekreturik gako-parea lortu dezakeena. The epoch Kontagailuak biraketa bultzatzen du (9. atala).

3.1 Zergatik ezin den gakoa identitate gakoaren ondorioz lortu

Diseinu argia erabiltzaileak jada duen sekretutik gako-parea hazitzea da:

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

Arrazoi lauengatik erakargarria da, guztiak benikoak direnak: ez dago babesgarri berriik, nsec dena babesa dena delako; gailde bakoitza eraikuntzaren arabera ados dagoena, sinkronizazio protokolo ezentzorekin; identitate bakoitzeko jakinarazpen ordezkatzaile bat zuzena dela nabarmena delako, gaildeek ez duelakoan giltzarako ezadokeria izan dezakeen; eta giltza argitaratu baino lehen existitzen dela, bezeroak lehenengo exekutazioan bere buruari zerbait sigilatu dezake ablean.

Onura lau guztiak baliogabeak dira, arrazoi bakarrengatik. Argitaratutako npub bati aurre egiten dion Shorren algoritmoak nseca ematen du. Haziaren dedukzioa nsecan oinarritzen den algoritmo publiko bat da. Beraz, parte klasikoa hausten duen etxekidoreak, beste guztiek bezala HKDF bera erabiltzean, post-kuantikoa berreskuratzen du. "Oraindik bildu eta gero desdekatu" (harvest-now-decrypt-later) —ezaugarriak bertan amaiera emateko dagoen arrisku bakarra— modu honetan deduztu den gakoak ez du ezer gehitzen.

Denak jarraitzen duen araua

ML-KEM decapsulazio gakoak nsec-etik deduziblea ez den eta inoiz soilik klasikoen enkriptaziopean transmititua ez den entropi batetik etorri behar du.

Araua horren bigarren klausulak lehenaren adinako lana egiten du. NIP-44 mezu ohiko baten barruan erabiltzailearen gailuen artean sinkronizatzen den sekretu independente batek, urrats gehigarri batzuekin egiten den huts berri dena da: adversario batek gaur mezu horri erregistroa egiten dio eta gero bere gako klasikoa berreskuratzen badu, oina erortzen da. Hori dela eta hurrengo ataleko bideak bide horiek dira, eta horregatik ez dago bide horien artean “bidali zure beste gailura” biderik.

3.2 Root-a erabiltzailearen beste gailuetara eramatea

2. ataleko 3. baldintza — identitate bakarra, gailu hainbat — ez da aritmetika bidez bete ahal hona hemen, sineburua giltza ez dela gailuek jada partekatzen duten ezerren funtzio bat izatea baitela. Horren ordez, garraio bidez bete behar da, eta bide bakarra dago: erabiltzaileak mugitzen du... nympq1… beren burua kodeatu

Errauna honela erakusten da: nympq1… nsec-ren ondoan, eta gailu segundu batek panele berean jartzen duenean onartzen du. Mekanismo osoa da hori. Kodea ez izan duen gailuak ez du parte hartu ahal, hori 4.2. atalak deskribatzen duen.

Transferentzia manuala leheneko urrats bat baino oinarri deliberatu bat da. 3.1. ataleko arauak dioen bezala, erroa inoiz ere ezin du soilik klasikoen enkripziopean bidali, eta hau automatiko egiteko mekanismo bakoitzak — erreleiaren bidez sinkronizatzea edo identitate-gakoarekin esturtzea — hori bertan urratzen du. Erabiltzaileak egiten duen urratsa da babesa benetakoa izateko arrazoia.

Formatuak estututako bide baterako aukera uzten du: erregistro batek estutze zerrenda bat ekarri dezake, bakoitza erabiltzaileak beste gailu batean berreproduzitu dezakeen gako baten azpian dagoen AEAD blob bat dena — adibidez, passkey PRF irteera bat. Gaur egun ez dago horren bat eskuragarri, eta hori gertatu arte, ... nympq1… kodea da zeharkatzeko bide bakarra. 10.1 atalek azaltzen du horren kostua.

Erregistroa berak bere konfigurazio-kategoria propioan aurkitzen da, nymchat-pq-root, eta beste kategoria batzuk egiten duen moduan sinkronizatzen du. Wraps ez dituen arren, lan beharrezkoa egiten du: bere presentzia da bigarren gailuak identitate honek oinarri bat duela jakiten duen modu, eta horrek eragozten du aurkari bat sortzea (3.3. atala).

Diseinu oharra: gako berria erabili ezin duen kategoria bakarra

-a nymchat-pq-root kategoria behar du ez errotutik eratorritako ML-KEM gakoaren bidez enkriptatuta. Erline horrek errotuaren kopia bakarra darama, beraz, errotutik eratorritako gako baten bidez sigilatzea, kutxa barruan dagoen gako baten bezalako trinxketa baten bezalakoa da: ez dago gailorik hori irekituko, idatzitakoa izan ez den arren. Klasikoki sigilatuta dago — NIP-44 bere buruari — edo ez du sigilurik. Diseinu honek babes klasiko bakarrik onartzen duen lehen lekua hau da, eta hori egin dezake: erline horrek gaur egun ez du erroturik, soilik bat dagoela esaten.

Aukera/Kategoria ezberdin guztiek erabili dezakete eta erabili beharko lukete errotatik datorren gakoa. Hau salbuespen bakarra da, eta salbuespena sirkularitateari buruzkoa da, ez indarriari buruzkoa.

3.3 Generazioa eta adoptzioa

Abiarazten denean, identitate iraunkorra helduz, bezero batek honako ordenan lan egiten du:

  1. Existente bat bilatu nymchat-pq-root errekordoa
  2. Erregistroa aurkitu da, eta gailu honek despakatu dezake — hartu eta iragutsi identitate hau kuantiko-osteko gaitasuna duena bezala.
  3. Erregistroa aurkitu da, eta gailu honek ezin du despaketatu. — ez generoitu raiz berri bat, eta ez publizatu sein anuntzio bat ere. Esan erabiltzaileari gailu hau lotzeko, honako hau sartuz nympq1… hori jada duen gailu batetik datorren kodea
  4. Ez dago erregistrorik — errotua sortu, erregistroa argitaratu, jakinarazi eta erakutsi... nympq1… kodea erabiltzaileari behin, gordetzeko agarri.

3. urrats oker egiteko urrats erraza da, eta horregatik da ordena idatzita dagoena, implementazio bakoitzari uzten zaion bezala ez. Erro bat sortzea erabakitzen duten bi gailuek, identitate baten azpian, erro independente bi sortuko dituzte, eta ordenak hori saihesteko existitzen duena da.

4Gaitasun jakinarazpena

Deduzitutako gako parraren parte publikoa helbidezkoa bezala argitaratzen da. NIP-01 ekidea — mota 30078, etiketatua 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": [ ... ]
  }
}

Direzionagarria esan nahi du relay-ak (mota, pubkey, d-tag) bakoitzeko ekitaldi bakar bat gordetzen duela, beraz, berriro argitaratze batek aurreko iragarpena bere tokian ordezkatzen du. Identitate bakoitzak erregistro egungoa bakarrik du, eta horrek "Alice-ren gakoa bilatzea" hertsiko eta zehaztoreko datuen eskuraketa bat bihurtzen du, konpondutu beharreko zerrenda bat baino.

Sinadura lotura da. Ekidea identitate-gakoarekin sinadu da, beraz, “hona ML-KEM gako hau honako npub honengoa da” deklarazioak npub bera bezalako indarra du. Enkapsulazio-gako ezberdin bat ordezkatzeak secp256k1 sinadura bat faltsatzea eskatzen du. Horin egin ahal duen erasotzaileak ez du KEMarekin kezkatu behar.

Iragarriak amaitzen dira. Zazpi eguneko NIP-40 24 ordu bakoitzetan berrialdu egiten den espeirazioak, erregistroa bezero baten inguruko adierazpen bat mantentzen du, dena oraindik dabilena, lehenako baten ordez. Erraiz bera ez da inoiz amaitzen; bere inguruko deklarazioa bakarrik amaitzen da.

Huts egin duen abisua, ez zuenegiako baten bezala irakurtzen da: pareak NIP-44 arrunteak bidaltzen dituzte, sarritze guztiek irakurri ditzaketena, eta bezeroak post-kuantiko trukea bermatu egiten du hurrengo konexioan, berriro argitaratzen duenean. Beraz, astegatik baino gehiago isiltasuneko egotea haseriak hutsunean bidalitako mezuak babestea galtzea eskatzen du — mezu horiek klasiko moduan kriptatuta daude kuantiko-erresistenteak izan beharrean — eta ez du beste ezer kostatzen. Bidalketa ez da eragin, jasoak diren ez daiteke irakurri gabe, eta ez da ezer egin behar itzultzen denean.

Asimetria hori da expirazioaren arrazoia, ez kasualitatea. Bategik gabe, erregistro batek izendatzen duen gakoaren iraupena pasatzen du: ezabatua, resetatua edo bere oinarria aldatu du den gailuak, jada inork ez duen gako batera enkapsulatzeko instruktzio jardungunean bat uzten du, eta horren bidez bidalitako mezuak galdu egiten dira bi aldeetan errore bat ere izan gabe. Zazpi egunek mugatzen du janela hori, eta relay-ek erregistroa kendu eta beraiek erasik dezaten ahalbidetzen du, bezeroen kontzientearen zain egon beharrean.

Gako-aldiak bere formatua izendatzen du. Zelaia da pk2, eta digitua dekorazioa izan beharrean kontratxaren parte da: gakoak erabil daitekeen karga formatua izendatzen du. Eremua ez ezagutzen duen irakurleak "Nymchat klientea, ez du post-quantum gakoa" erabakitzen du eta NIP-44 arrunta bidaltzen du, login guztiek irakurri daitekeena. Hori ezan da huts egiteko bidea zuzena, eta formatuaren zenbaketak ezartzeko existitzen den arau gisa esateko meritu du: gaitasun-deklarazio ez ezagutzak babesa galtzea behar du, ez entrega. Taldekideak erabili ezin duen gako bat ere askoz txarragoa da gako bat ez izatekoa ere, mezua galtzen delako bi aldeetan ere ez dago errore batzuk.

4.1 Absentzia esanguratsua da, eta hiruan baliozkoa.

Xehetasun arin baina garrantzitsua: jakinarazpena Nymchat bezero guztiek argitaratzen dute, ez soilik kuantiko-postean gai direnek, eta gako-kalea aukerakoa da. Horrek bi keadaan baino hiru egoera bereizgarri sortzen ditu:

BehatuaBitartekoakBidaltzeko portaera
Iragarpena giltza batekin Nymchat, post-kuantiko gaitasuna duen Hibrido
Iragarpena, ez du giltzarik ere. Nymchat, soil klasikoa soilik — post-kuantikoa desligatuta, edo identitatearen oinarriarekin oraindik lotu ez den gailu bat. NIP-17 klasikoa
Ez dago jakinarazpenik Bezero ezaguna ez. Nostr edo Bitchat erabiltzaile edozein izan daiteke. Klasikoa, eta konpatibilitateko envoltorio bat

Hirugarren zorrota lauarekin bat egitea galera beniko bat izango litzateke. Gako gabeko anunsio bat bidaltzaileak Nymchat erabiltzen duela frogatzen duen adierazpen sinatua da; horrek bidalketa bideari protokolo-arteko enkapsulazio espekulatibo bat saihesti ahal izten dio, bestela identifikatu ezin dituen edozeinentzat sartu beharko litzatekeena.

4.2 Roota ireki ezin duen gailu bat isilik geratzen da

Anuncioa ordezkatzailea da: identitate bakoitzerako ekitalo bat, azken idatzia irabazten du. Hori da erregistro bakarraren diseinuak funtzionatzen duentzat, eta hori ere da lotura gabe dagoen gailu batak argitaratzen badu arriskutsua egiten duena. Berarentzat sortu zuen gako bat anunziatu duen gailuak erregistro benarra txikariko zuen eta pare guztiak gailu besteak ireki ezin dituzten gako baten kriptatzen bidaliko lirateke.

Beraz, erradiz bat dagoela jakiten duen baina ezin duen ireki gailuak ez du oharren bat ere argitaratzen. Ez dago hondatuta, ezta aplikaziotik blokeatuta ere: giltzak dituen mezu guztiak irakurtzen jarraitzen du eta modu klasikoan bidaltzen jarraitzen du, erabiltzaileari lotzeko eskatuz. Isiltasuna da jokabide egokia identitateagatik hitz egin ezin duen gailu batentzat.

5Deskubritzea eta bidaltzeko erabakia

Bezeroek laguneko loteak bi modutan lortzen dituzte. Harpidetza egonkor batek erabiltzaileak benetan harremanetan dagoen pertsonak hartzen ditu — elkarrizketa irekiak eta talde kideak — beraz, haien jakinarazpenak ekintza arrunten gisa iristen dira. Lehenengo aldiz ezagutzen den lagun baten kasuan, bidalketa unean, behiniko kontsulta bat egiten da, 2,5 segundoko muga batekin; konpondu ez bada, mezuak modu klasikoan doa, kuantiko-ostekoak gehitu aurretik existitzen zuen portaera dena, ez akats-modu berri bat baizik.

Emaitza negatiboa betiko baino hamar minutuz gordetzen da cachean. Gailu berri bat lotzen duen erabiltzaileak, edo nabigatzaileko luzatzailearen bidezko sarritze mote batetik gako lokal batera aldatzen dena, elkarrizketa baten erdian post-kuantiko gaitasuna lortzen du, eta betiko cachean gordetutako “ez” batek enkripzio klasikoan mantenduko luke abisuaren iraupena artean.

5.1 Zergatik ez dago downgrade attackik

Bideraketa erabakiak galdera bakarrera erreduzitu egiten da:

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

Ez dago gaitasun negoziaziorik, ez dago algoritmo laguntzaileetako zerrendarik, eta ez dago erasotzaileak bide aholetxiago bat behartzeko garbitu dezakeen erremarik. Anuncioa gordetzen... da negoziazioa, eta sinatuta dago. Anunzioa kenditu edo gordearen akats modua da mezua klasikoa izatea —ezaugarri honen aurretiko egoera—, mezua hibrido bat forgeagarri batera jaitsi daitekeen ordez.

Harkia ere zuzena da eta garrantzitsuagoa da: bezero batek hibridoa bidaltzen du soilik gako bat duenean, eta gakoak izatea frogatza da hartzaileak desenkapsulatu dezakeela. Ez dago egoikerarik mesaje bat post-kuantiko moduan bidaltzen den, ezin irakurtzeko norbaiti.

6Eraikuntza hibridoa

Nymchat ez da NIP-44 ordezkatzen. Mantaltzen du. NIP-44 modifikatu gabeko kriptografia-testua barneko geruza da, eta ML-KEM-ek bere inguruan AEAD kanpoko geruza bat enkriptatzen du:

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)

Mezua irakurtzeko bi sekretuak berreskuratu behar dira oraindik: kanpoko geruzak NIP-44 ciphertekstu soilik ematen du, eta hori irekitzeko ECDH klasikoa behar da. secp256k1 hausten duen aurkari kuantikoak barne-gakoa eskuratzen du eta ML-KEM oraindik aurre egin behar dio; ML-KEM haustekoak kanpoko geruza kentzen du eta NIP-44 geratzen da. Sarrera bakoitzak bere lekua irabazten du:

Enkapsulazioa mezularoi bakoitzean berri egiten da. Hartzailearen ML-KEM gakoa denbora luzerako da, baina mezularoi bakoitzak kriptotextu independente bat darama eta, beraz, independente bat kem_ss. Hori da noncea alokiko izate baino eratorri izatea egokia egiten duena: ChaCha20-Poly1305 (gako, nonce) par bat berreusing erragatik hauts daiteke, eta hemen gako bera mezugalerako berria da, beraz ez dago parik irrepetitu daitezkeenik.

6.1 Zergatik estalak aparte geratzen diren

Alternatiboa bi sekretuak elkarrizketa-gako bakani batera nahastea eta hori NIP-44-ri ematea da:

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

Konstrukzio hori kriptografia gisa egokia da. Problema egiturazko bat du: behar du ecdh_x, ECDH irteeraren x-koordinatu gordin, gako material gisa — eta browser-eko luzatzaile bat (NIP-07) edo sinatzaile urrutiko bat (NIP-46) ez du balio hori itzultzen. NIP-44 egiten du dei egikarizalearen ordez eta kriptogramaren bat itzultzen du, eta hori da eskulua aplikazioak ezin duen leku batean gordetzearen helburu nagusia.

Secretuen nahasteak, beraz, sinatzaile batean identitate-gakoa gordetzen duen login guztia kanpoan utzi egiten du, eta horrek erabiltzaile arretatsuenak esan nahi du, eta gako-deribazioan egiten den lan ez batek ere ezin du hori aldatu. Estratifikazioak menedezkotasuna ezabatzen du: NIP-44 oso mantentzen da eta identitate-gakoa gordetzen duen zerbaitak ekoizten du, sinatzailea barne, bitartean KEM zatia bezeroak zuzenean duen berreskizun-kodearen bidez kalkulatzen da. Sinatzailearen loginak bi norabidetan post-kuantiko ohiko parte-hartzaileak dira.

Kostua banda-zolana da, eta ez da txikia. ML-KEM kriptogramak 1.088 byte ditu eta mezu bakoitzean badoa, base64url formatuan 1.451 karakterrako bihurtuta; kanpoko AEAD-ak 16-byteko Poly1305 etiketa bat gehitzen du eta biltzen duen NIP-44 karga hirutz parte batez handitu egiten du. 50 karakteretako mezu bat 176 byteetatik 1.712etara hazten da, eta 2.000 karakteretako bat 2.820etatik 5.238etara. Gutxienez 1,5 KB inguruko kopurua da mezu bakoitzeko, mezuak zein laburra den arren; hori da sekretu partekatua berriro erabiltze ordez, bakoitzeko berriro enkapsulatzeko ordainaria.

6.2 Bere deskribapena duten kargak

-a pq2. Prefixak instalazioa urrezta egiten du: berez deskribatzailea da, beraz, bezeroak dekriptatzeko bidea hautatzen du payloada aztertuz, etiketa bati konfiantza emotuz edo mitra baten laguntza gogoratzen baino. Prefix bat ez ezagutzen duen irakurleak payload hori ez du ireki egingo, irakurtze okerrez baino, eta alderdi baten edo bestearenak post-kuantikoak egin baino lehen sinestutako mezuak, migrazioik gabe, NIP-44 arrunts gisa irakurgarri jarraituko dute.

Onartu ez izte inplizitua

ML-KEM decapsulazioa ez da huts egiten izateko diseinatuta: kriptogramaren egitura oker bat ematen denean, Fujisaki-Okamoto transformazioak errore bat baino, sekretu pseudo-aldizkor determinista bat ematen du. Beraz, gako oker batek ez du KEM azaletan agertzen; NIP-44 barruan HMAC huts egite gisa agertzen da, gako klasiko oker bat agertzen den modetik beretik. Erabiltzaileek biak modu berdinarekin tratatzen dituzte, beraz, hutseak ez du ezberdinti-seinalerik ekarri. 9.1 ataleko hautagai-zerrenda funtzionagarria egiten duena ere hori da: bezero batek gako bakoitza sai bakoitzeko probatzen ditu eta NIP-44k zein izan den egokia esaten duen bitartean.

6.3 Opakako estaldiaren bi estaldiak

A NIP-17 mezu pribatu bat da NIP-59 opakadura: sinadura gabeko erriomina bat, bidaltzailearen identitate-gakoaren (mota 13) bidez sigilatua, eta gero, mezu bakoitzeko sortutako behin erabiltzeko gakoaren (mota 1059) azpian opakaturik. Identitate-gakoa zuzenean duen login batean, Nymchat-ek bi estalaplak hibridatzen ditu, bakoitzak bere enkapsulazioa duela.

A hybrid NIP-59 gift wrap: the rumor sealed under the sender's key, that seal wrapped under a per-message ephemeral key, both layers carrying a NIP-44 ciphertext inside a post-quantum AEAD. kind 1059 — wrap  ·  signed by a per-message ephemeral key content = pq2.<kem_ct>.<aead>   inner = NIP-44(eph, recip)   outer key = ML-KEM(recip) kind 13 — seal  ·  signed by the sender's identity key content = pq2.<kem_ct>.<aead>   inner = NIP-44(sender, recip)   outer key = ML-KEM(recip) rumor — unsigned the message: kind, content, tags, author pubkey unsigned on purpose — a signature would be portable proof
Bi enkriptazio geruza hibridoak dira, bakoitza ML-KEM enkapsulazio independente batekin. Geruza kanpokoa sekretu erabilera-behinako batekin lotuta dago, beraz, enkapsulazioak bidalkaria ez erakusten du.

Sinatzaile baten sarrerak kanpoko geruza bakarrik jasotzen du. Zigilua sinatzaileak NIP-44 ordinarri bezala sortzen da — aplikazioak ez du inoiz ere hori egiten duen giltza ikusten — beraz, ezin da toki berean hibridatu. Honek ez du ezinbestekorik galdetzen eskatutako erasoiaren aurrean: zigilua enkapsulazioaren bidez soilik lortu daiteke, eta enkapsulazioa da grabatzaileak gordetzen duena. Trafiko grabatua duen aurkari batek ML-KEM hauritu behar du zigilua erasoitzeko ikusgarri izan baino lehen.

7Mezu taldeak eta estaldia partziala

Mesaje talde bat ez da kriptogramatika bakarra. Testu garbi bera da kide bakoitzari banatuta dagoena, kopia bakoitza kide horren ML-KEM gako propioari enkapsulatuta. Gako bat argitaratu duen kideak enkapsulazio hibrido bat jasotzen du; ez duena, enkapsulazio klasiko bat.

Honek kontabilitate arazo bat sortzen du, implementazio naibo batek oker egiten duena. Hamar kideetatik zortzek kopia hibrido bat jasotzen badute, mezuak da ez zortzi hamar parteetatik zortziak babestuta. Adversario batek hamar parta guztietan berdin den testu garbi baten kopia klasiko bat behar du, beraz mezuak babestuta dago soilik... bakoitzean kopia da.

Nymchat-ek, beraz, mezu bakoitzaren estaldia jarraiki egiten du fan-outaren bitartean — zenbaketa eraikitzen ari diren envoltorioak eraikitzen ari diren bitartean soilik jakin daiteke — eta etiketak “10 kideren 8rentzat kuantiko-resistentzia du” dio, mezu hori babestuta dagoela esaten beharrean. Zenbaketa ez tersedia denean, eta hori batentzat kasu normala bada... jasotua taldeko mensajua (bidaltzaileak bakarrik kontatzen du zabalkapena), interfazeak babes partziala jakinarazten du, ez babes osoa. Bere kopia bakarrik oinarrituta babes osoa esatea, mensajearen guztialako izaerari buruz gehiegizko adierazpena izango litzateke.

7.1 Escuduak informatzen duena

Eskudiak ...ren buruzko egia adierazten du. mezua, ez bidal zuen softwareari buruz:

Erabakia mezuak zigilututa egiten denean erregistratzen da, ez eta geroago pareako batek iragartzen duenaren premian berriro kalkulatzen. Jada existitzen dagoen kriptotextua ez da inoiz baino hobeto babestuta egondaikela, eta iragarki berri baten indarrez mezu zaharrak berriro irudikitzen dituena ezinbesteko faltsotasun bat esango litzateke errerelako byteei buruz.

Goiko talde-arauak honen gainera etorri egiten dira ordezkoa hartu beharrean: talde-mezua guztiz babestuta dagoela esateko, kide bakoitzaren kopia babestuta egon behar du, eta babes-kopura ez duen jaso den talde-mezua "partziala" erakutsiko du.

8Zuretzat zuzendutako kopiak

Klienteak gordetzen dituen gauza batzuk erabiltzailearen identitatearekin enkriptatuta daude: sinkronizatutako konfigurazioak, elkarrizketa zerrenda, talde-gakoak eta mezu-arkiboa. Honek erabiltzaile baten buruz informazio gehiago dakar mezu bakarren maioria baino, beraz, modu klasikoan uzteak gordetako artifaktu ahulena egingo luke mezuak zein arretaz zigilatu ziren ere. Bide hibrido bera erabiltzen dute, erabiltzailearen errotatik datorren gakoarekin kapsulatuta — 3.2. atalean deskribatutako kasu berezia izan ezik, nymchat-pq-root kategoria bera, bera soilik gai den giltza baten azpian ezin dela zigilatu.

Artefaktu hauek dira diseinuak gehien garrantzia duen lekua. Konfigurazioen blok bat edo arkiboko rileta urteetan bertan egon ohi dira, eta hori da 'orain bilatu eta gero desdekratatu' atakezaleak biltzen duen gauza mota zehatza — mezu bakoitz baino askoz gehiago, mezuak erabiltzailearen gogoan, gutxienez, ezaurrezkoak izan bezala.

Hona hemen, formatua gakoaren ordez erregulatzen duen baldintza bat dago. Bere norberari zuzendutako kopia bat irakurgarri izan behar da... bakoitzean kontuan dagoen gailua, beraz, gailde bakoitzak bere jakinarazpenaren zerrendan zer ireki dezakeen iragartzen du, eta kontuak guztiek irakurri dezakeen zerbait bakarrik idazten du. Beste ezer idazteak gailua bere konfigurazioetatik kanpo blokeatuko luke — 3.2 atalek beste modu batzuen bidez saihesten duen hutsagen isilen bera, aldetik desberdin batetik iristen dena.

Aipatzea merezi duen mugatza bat

Identitatea duen baina erreuna ez duen gailde batek ezin du ireki erreunetik datorren giltzari batekin sigillatutako ezer, bere konfigurazioak barne. Ondorio deliberatua da hori, ez z\u00adara akats bat, eta horregatik 3.3 atalean loturatzeko gailde-abiendaria dagoela, erreun berri bat sortu beharrean: erreun bigarren batek ez luke 'blob'a irakurgarri bihurtuko, identitatearen giltzari materiala bi parte banatuko luke bakarrik. Erabiltzaileak lotu arte, gaildeak funtzionatzen jarraituko du — giltzak dituen gauzak irakurtzen ditu eta modu klasikoan bidaltzen ditu.

Web browserko luzatzaile bat gidatzen duen gailuak edo sinatzaile remoto batek (NIP-46) ez du deribatzeko nsecik, baina erreku-kodea du, eta 6.1. ataleko estalkatutako erailearen barruan, hori da post-kuantiko zatiaren behar guztia: sinatzaileak NIP-44 estalapozkoa beti egin duen bezala egiten du, eta bezeroak kanpoko estalapozkoa berak kargatzen du. Modu horretako sarrera bi norabideetan ere partekatzaile arrunta bat da.

9Rotazioa

-a epoch Dedukzioan dagoen kontagailua da rotazioa gako material berri gabe egitea ahalbidetzen duena. Hura igotzeak errotze bera baino talde gako berri bat eta berriro argitaratutako jakinarazpen bat sortzen ditu; taldekideek gako berria ordezkatzeko erregistroaren bidez hartzen dute. Beraz, rotazioak ez dio erabiltzaileari ezer bigarren aldiz idaztea eskatzen: errotzea identitate bakoitzeko behin sortzen da eta epokak egiten du biraketa.

9.1 Epoka zaharkiak mantentzen dira, eta ez da ezer berri-kriptatzen.

Gako bat rotatzean ez da ezer berri idazten. Bezero batek dekriptatzeko kandidatuak eraikitzen ditu egungo epoketik &minus; 3 era digun epokera arte, beraz, rotazio baten aurretik pixka bat lehen siglatutako mezu batzuk, bidali zenean aktiboa zen gako parearen bidez orain ere ireki daitezke.

Leiho horrek da rotazioa seguru izatea ahalbidetzen duena: hura gabe, rotazio bakoitzak prozesuan zegoena atxiki egingo luke. Ixe dagoen guztia irakurgarri jarraituko da identitatearen bizitza osoan, erabiltzaileak ezin duen mezua irekitzea askoz txarragoa delako berarentzat, babesa atzeragoan hobitu ezin da den mezua baino (10.5 atala).

10Honek ez duena babesten

Diseinu batek lortzen duena soilik zerrendatzen duen paper batek ez du sistema bat deskribatzen, eta interfaze baten segurtasun-propiedad bat gehiegi esatea oteztzea baino txarragoa da. Honako hauek ez da eraikuntza honek defendatzen duena.

10.1 Erraia bigarren sekretu bat da, eta hura galtzea ez da berreskuragarri.

Honek da diseinuaren benetako prezioa. 2. atalean duen baldintza, erabiltzaileak mantendutzako gauza bakarra izan beharko duela, ezin da betetzea: nsec bakarrik ez du post-kuantiko gakoa eraikutarik, arrazoia, ez dagoela balio publiko batekin edo beste sekretu batekin esposatuta, hori da funtsezkoa. Ez bada gailu batek erroa gordetzen duen eta 3.2. atalean agertzen diren envoltura guztiak ez bada ireki ahal, erroarengandik esan ditzakeen gakoari lotutako materiala ez da berreskuragarri. Ez dago eskortura eta, helburuarekin, ez dago hori gordetzeko agintarok irudik.

Transferentzia manuala bide bakarra denean, hau lehen irakurritako baino zorrotzagoa da. Ez kopiatzen duen erabiltzaile bat nympq1… edozeako kodeak horretatik kopia zehatz bat du, gailu bakar batean, eta gailu hori galtzeak horrekin sigilatutako mezu post-kuantiko, konfigurazio-blob eta arkibo-lerro guztiak galtzea dakar. Hark nsec ez du laguntzen; diseinu osoa horren oinarrian dagoen propietatea da.

Geroago gehitu den bide enkapsulatutako bakoitzak manualezkoak bezalako deia gainditu behar du. Atakaria disponibileko bide merkatik egiten du erasoa, beraz, esquema bat bere berreskuratze bide indargabekoen balioa du — adibidez, gogorarazteko pasadibide batek dena pasadibidearen balioaren mailan jarriko luke, eta enkapsulatutako fila da ezin ala ez, "oraingoak bilatu eta geroago desdekurtu" deitutako etxekidoak libre dagoenean offline prozesatzen duen artifaktu zehatza.

10.2 Autentikazioa, konfidentzialitategutik ezberdin gisa

Nostr-ko sinadura guztiak secp256k1-ren gainean Schnorr dira, eta hori hemen aldatu gabe dago. Kuantum-ordenagailu bat duen aurkari batek sinadurak faltsifika ditzake eta erabiltzaile bat errealean imitatu dezake. Giltza-truke hibridoak gainditzen duena "oraingo bilketa eta geroago deseskriptatzea" (harvest-now-decrypt-later) da: gaur trafikoa grabatzen duen eraso-egile batek ez du geroa irakurri ahal. Ez du mezu bat faltsifika ezinezkoa egiten makina jada duen aurkari baten aurrean. Bereizgarritasun hau deliberatuki eramaten da aplikazioetara — katekora indikatoreak autentikazioa adierazten du, ezkutua (shield) indikatoreak konfidentzialtasuna, eta glyph bereizgarriak dira mezu batek bat izan dezakeelako ezak ere.

4. ataleko jakinarriak egin ditzakeen promesaak mugatzen ere egiten du. npub eta ML-KEM gakoaren arteko lotura secp256k1 sinadura bat da, beraz, horiek falsifikatu ditzakeen aurkari batek bere gako bat ordezkatzea egin dezake. Etorkizko aurkari baten aurrean konfidentzialtasuna ez da aurkari baten aurrean autentikotasunaren berakoa.

10.3 Metadatuak

Opariak bildefruitatzeak bidallea ezkutatzen du, hartzailea bateraren gainetik p etiketa, mota eta barneko mezuaren denbora marka. Ez du gertaera bat dagoela ezkutatu, bere tamaina, edo relay batek noiz jaso zuen. Diseinu honen zati ez bat ere ez da trafikoaren analisiari jota.

10.4 Sarea linean ez dagoena

Nymchat-en Bluetooth mesh garraioa bere handshake propioa duen protokolo separatu bat da, eta ez da lan honek barne hartzen. Mesh bidezko mezuak klasikoak dira.

10.5 Mezu bidaliak jada

Atzal bakoitzetako bat klasikoz zegoen bitartean grabatutako kodekatutako testua, betiko klasikoz jarraituko du. Dagoeneko existitzen dago eta ez da berriro sigilatu daiteke. Babesa atzal biek kuantez gaineko gakoak zituzten mezuan hasten da, ez funtzioa aktibatzean.

11Alternatibak kontuan hartutakoak

HurbileraZergatik ez?
Eratorri post-kuantikoako gakoa identitateko gakoaren batetik. Ez da onargarria. Deribazioa nsec-en gainean dagoen algoritmo publiko bat da, eta kuantiko-tokitzaile batek argitaratutako npub-etik nsec berreskuratzen du, beraz, parte klasikoa hautsiz, post-kuantikoa ere emango dio. Paper honetako distribuzio-arazo guztiak konpondu ditu eta inorentzat ez du defendatu. 3.1. atala.
Bidali erroa erabiltzailearen beste gailuetara NIP-44 bidez Arrazoi bera, traje desberdinean. Soilik klasikoen enkriptaziopean transmititutako erroa, mezua grabatu eta ondoren bere gakoa hausten duen edozein pertsonak berreskuratu dezake, erroa eragozteko existitzen den aurkari hori baita.
Gaild bakoitzean banakakoan sortutako ML-KEM giltza-parea Baztertu. Gailuek dekapsulazio gako desberdinak izango zituztela, eta identitate bakoitzeko anuntzio orokorra aldatu daitejauna ez luke guztiak ekarri ahal. Peer-ek azkenik argitaratutako gakoari soilik enkriptatuko lituzte, eta gailu guztietako besteak emaitza irakurri ezaitezkeela. Identitate bakoitzeko erro bat bakarrik, 3.2 atalaren bidez mugitatua, da hori saihesten duena.
Biltzu root-a PIN baten azpian Baztertu. Lau zifferatako PIN bat 13 bita ingurukoa da, esturatutako fila duen offlineko erasotzaile baten aurka. Hori bi 256-bitako bideen ondoan eskaintzeak estura erweaksuenak zer balio duen desengainua sortuko litzateke.
Hedatu npub-a giltza biak eramateko 1.184 baita ez da partekatzeko identifikatzaile bat, eta horrek Nostr bezero guztien 32 baitako helbide baten parsea ezenduko luke.
Direktorio zerbitzu gako bat Sareak saihestu nahi duen agintaritza berriro sartu egiten du. Bilaketaari erantzuten dionak erabakitzen du nor izan dadin mezua irakurri dezakeen.
Atxuki gakoa mezu bakoitzari Ez du ezer konpondezten: bidaltzaileak behar du... hartzailearen gakoa lehenengo mezua, eta hori da gertatzen dena, ez dagoelako lehenago mezuak hartzeko.
Banda barneko gaitasunen negoziazioa Beherrera erakusteko eremua sortzen du. Kapasitate flago bat kentzeko gai den erasotzaile batek bide klasikoa behartzen du.
Post-kuantiko soilik, ez dago atal klasikorik. secp256k1-ren hamarkadako azterketak baztertu egiten ditu elementu primatibo askoz berriago baten trukean. Hibrido bat soilik huts egiten du... biak Faltatu.

12Implementazio paritatea

Nymchat-ek eraikuntza honen bi ezimplementazio independente eskaintzen ditu — bat web aplikaziorako JavaScript-en, eta beste bat mobile aplikazioetarako Dart-en, ML-KEM-768 zerotik egindako portazio bat barne urriz. Sustrai baten bi ezimplementazio izatea ohikoena arrisku bat da, beraz, adostasuna konfiantzaz hartu beharrean, elkarren aurka lotu dituzte.

Dart ML-KEM implementazioa ofizialaren aurrean egiaztatuta dago NIST ACVP ML-KEM-768 (entzat erantzun ezagututako testak (ML-KEM-*-FIPS203) — gako-generazio 25, enkapsulazio 25 eta dekapsulazio 10 kasu, haien suite propioan exekutatuta. NIST-ek implementazio bat egiaztatzeko argitaratzen dituen vektoreak dira, beraz, haiek gainditu izatea portatzea zuzena dela frogatzea da, ez soilik bi klientek elkarrekin ados daudela frogatzea. Horretaz gain, test vektoreen fixture partekatua — semillaren derivazioa, enkapsulazioa, bi payload formatuak eta biltzan-formatu osoak — JavaScript erreferentziaren bidez sortzen da eta test suite biak egiaztatzen dituzte. Sekretu oinarrizkoak (root secret) fixture hori luzatzen du ordezkoa hartzen du: oinarrizko sekretutik semillara, oinarrizko sekretutik keypair-era, oinarrizko sekretuaren fingerprint publikoa, eta kanpoko azalaren derivatutako gakoa, nonce-a eta lotutako datuak bere vektoreak dira, beraz, bi klientek ez dute ezkontzatu ezin zer... nympq1… Kodeak mezuak siniltzen diren byteak esan nahi ditu edo haien buruzkoa da. Implementazio bakoitz batean desbiamena badago, eraikuntza huts egiten du, beste bezeroak ireki ezin duen mezu bat sortu beharrean.

Hauetan artean, hatzmarka aipatzea meritatu beharreko da. Gailu bateari “hau nire heldutako arrauna da” eta “hau beste bat da” bereizten egiten diona da, eta bezeroak beste bezero baten hatzmarka erreproduzi ezin badu, erregistro oso on bat ere erregistro bat ez bezala irakuriko izango luke — eta gero, 3.3 atala jarraituz, arraun segundu bat sortuko luke eta identitatea banatuko luke. Horren arrazoi horregatik da vektore bat.

Nymchat da iturri irekia AGPL-3.0 lizentziaren batoriopean. Hemen deskribatutako kriptografiaren nukleoa hau da js/nym-crypto.js eta js/modules/pq.js web klientean, eta lib/core/crypto/ rekin lib/features/identity/pq_registry.dart klient mugikorretan

Azalpen laburragoa eta ez-teknikoagoa ikusteko, ikusi... kuantiko-resistentzia duten enkriptazioari buruzko ezagutza-basearen orria.