Tietopohja: Quantum Resistant Encryption

Nymchat tekninen whitepaper

Post-Quantum Key -sopimus Nymchatissä

ML-KEM-768:n julkisten avainten jakaminen Nostrin kautta ilman hakemistoa tai rekisteriä, ja niiden kylväminen salaisuudesta, jota mikään julkinen arvo ei paljasta.

versiota 1.0 Elokuussa 2026 Soveltuu Nymchat 3.74+

Post-quantum-avainvaihdon lisääminen messengerille ei yleensä ole salausongelma.Primitiivit on standardoitu ja kirjastoja on olemassa.Vaikea osa on, että jokainen osallistuja tarvitsee nyt Toiseksi Tämä paperi kuvaa, miten Nymchat vastaa siihen - mistä toinen avain tulee, miten se tavoittaa ihmiset, jotka tarvitsevat sitä, ja mitä käyttöliittymä saa vaatia tuloksesta - ja viimeisessä osassa, mitä tämä tulos ei suojaa.

1Ongelma on

Meidän yksityiset viestit on salattu NIP-44, jossa on kaksi erotettavissa olevaa puolta. Puoli, joka sekoittaa yksinkertaisen tekstin – ChaCha20 HMAC-SHA256-tunnisteella, joka on avautunut hkkkkkk (RFC 5689 Käyttöohje) — ei ole merkityksellisesti uhattuna kvanttitietokoneella; Groverin algoritmi maksaa neliöjuuritason kiihdyttämisen symmetristä avainta vastaan, ja 256 bittiä imee sen. Hyväksytään Avaimen päällä on elliptinen käyrä Diffie-Hellman yli Tyyppi 256K1, ja Shorin algoritmi ratkaisee erillisen logaritmin täysin.Palauttamalla yksi yksityinen avain julkiselta vastaajaltaan paljastaa taannehtivasti jokaisen yhteisen salaisuuden, jonka avain on koskaan tuottanut.

Uhka, jonka tämä luo, ei ole lykätty, kunnes tällainen kone on olemassa. Vastustaja, jolla on tallennus, voi tallentaa salaustekstin tänään ja purkaa sen aina, kun kyky saapuu. Kaikki, mikä lähetetään nyt, joka vielä on tärkeää, on jo vaarantunut. Tämä on tietty hyökkäys post-quantum-avainvaihto tappaa, ja siksi työ ei voi odottaa koneen rakentamista.

1.1 Kysymykset, joihin tämä artikkeli vastaa

Tällöin on tärkeää varmistaa, että laitteen laitteen laitteen laitteen laitteen laitteen laitteen laitteen laitteen laitteen laitteen laitteen laitteen laitteen laitteen laitteen laitteen laite (Pihapiiri 203Tämä aiheuttaa välittömästi jakeluongelman:

Kysymys

Lisää post-quantum vaihto ja tarvitset toisen - hänen ML-KEM julkinen avain. Missä se avain elää, ja miten saat sen ennen kuin voit lähettää hänelle mitään?

Voit kirjoittaa sen paperille, lukea sen ääneen tai skannata sen näytöltä, ja se on kaikki, mitä kukaan tarvitsee salata sinulle. ML-KEM-768 julkinen avain on 1,184 baittia. Sitä ei voi lukea ääneen, se ei sovi käyttäjänimeen, eikä se kuulu QR-koodiin identiteetin lisäksi, joka on vain 32 baittia.

Vaikeampi osa on, että toinen avain tuo kolme erillistä ongelmaa, ja loput tästä paperista on suurelta osin vastaus niihin:

2Suunnittelun rajoitukset

Neljä rajoitusta muodostivat vastauksen, ja ne sulkevat pois suurimman osan ilmeisistä malleista ennen koodin kirjoittamista.

  1. mahdollisimman vähän salaisuuksia. Jokainen ylimääräinen salaisuus on toinen tapa menettää historiasi, ja joku, joka osaa varmuuskopioida nsecin, ei osaa varmuuskopioida mitään muuta. 3.1 jakso osoittaa, että tätä ei voida täyttää suoraan - nsecistä peräisin oleva post-kvanttiavain ei tarjoa post-kvantti suojaa ollenkaan - joten suunnittelu käyttää täsmälleen yhtä salaisuutta eikä enempää: yksittäinen avainmateriaali, joka on luotu kerran identiteetissä, esitetään samassa muodossa kuin nsec ja samassa paikassa, jotta jokainen, joka tietää, miten säilyttää yksi, tietää, miten säilyttää toinen.
  2. Ei mitään auktoriteettia. Ei ole palvelinta, jota voidaan luottaa kertomaan, kumpi avain kuuluu kenelle tahansa.
  3. Monta laitetta, yksi identiteetti Minkä tahansa avainmateriaalin on oltava samankaltainen kaikissa, ja polut, jotka kantavat sitä sinne, eivät itse saa olla luettavia vastustajalle, jota vastaan ominaisuus puolustaa.
  4. Ei mitään neuvotteluja. Mikä tahansa &ldquo: n kaistanvaihto “mitä salauksia tuet?” on pinta, jonka hyökkääjä voi poistaa pakottaakseen heikomman vaihtoehdon.

3Riippumaton salaisuus

Kuormittava päätös on se, että ML-KEM-dekapsulaatioavain on kylvetty avainmateriaalista, jota mikään julkinen arvo 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)

Juuret esitetään käyttäjälle nsecin tavoin: Tyyppi 32 Inhimillisesti luettavissa oleva prefix nympqSiksi se lukee kuin nympq1…, joka näkyy nsec: n vieressä identiteettivälitteessä saman paljastavan vuorovaikutuksen takana, kopioitu samalla ohjaimella, ei koskaan kirjautunut sisään eikä koskaan lähetetty missään selvässä.

Suola on tarkoituksellisesti erotettu toimialueelta, joten mikään muu salaisuus ei voi koskaan johtaa samaan avainpariksi. epoch Vääntömomentti on kierrätysjärjestelmä (Section 9).

3.1 Miksi avainta ei voi johtaa identiteettivaihtoehdosta

Ilmeinen muotoilu on kylvää avainparia salaisuudesta, joka käyttäjällä on jo:

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

Se on houkutteleva neljästä syystä, kaikki ne ovat todellisia: mitään uutta varmuuskopioida, koska nsec on jo varmuuskopio; jokainen laite, joka suostuu rakentamiseen, ilman synkronointiprotokollaa mennä vikaan; yksi korvattava ilmoitus identiteetistä on ilmeisesti oikea, koska laitteet eivät voi olla eri mieltä avaimesta; ja avain, joka on olemassa ennen kuin se julkaistaan, jotta asiakas voi sinetöidä jotain itselleen ensimmäistä kertaa.

Kaikki neljä hyötyä ovat arvottomia, jostain syystä. Shorin algoritmi, joka toimii julkaistua npubia vastaan, tuottaa nsec. Siemenjohdannainen on julkinen algoritmi nsec:ää vastaan. Niinpä vastustaja, joka rikkoo klassisen puolen, rakentaa uudelleen post-kvanttisen puoliskon suorittamalla saman HKDF:n, jota kaikki muut käyttävät. Vastassa sadonkorjuu- nyt-dekrypti-myöhemmin - yksi uhka, jonka ominaisuus on olemassa lopettaa - näin johdettu avain ei lisää mitään.

Sääntö kaikki seuraa

ML-KEM:n dekapselointiavaimen on oltava peräisin entropiasta, joka ei ole johdettavissa nsec:stä eikä koskaan lähetetty klassisen vain salauksen alla.

Itsenäisesti luotu salaisuus, joka synkronoidaan sitten käyttäjän laitteiden välillä tavallisen NIP-44-viestin sisällä, on sama vika ylimääräisten vaiheiden kanssa: vastustaja tallentaa tämän viestin tänään ja palauttaa sen klassisen avaimen myöhemmin, ja juuret putoavat pois.

3.2 Juurin siirtäminen käyttäjän muihin laitteisiin

Kohdan 2 rajoitus 3 - yksi identiteetti, useita laitteita - ei voi täyttää aritmeettisesti täällä, koska koko asia on, että avain ei ole toiminto mitään laitteiden jo jakaa. nympq1… Koodi itsessään

Juuret esitetään kuten nympq1… nsec:n vieressä, ja toinen laite hyväksyy sen liitetyn samaan paneeliin.Tämä on koko mekanismi. Laite, jolle ei ole annettu koodia, ei voi osallistua, mikä on kuvattu kohdassa 4.2.

Manuaalinen siirto on tarkoituksellinen askel sen sijaan, että se olisi ensimmäinen askel.Osa 3.1:n sääntö sanoo, että root ei voi koskaan matkustaa vain klassisen salauksen alla, ja jokainen mekanismi, joka tekisi tämän automaattiseksi – synkronoimalla sen välittäjän kautta, käärien sen identiteettivaihtoehtoon – rikkoo täsmälleen tätä.

Muoto jättää tilaa pakattuun polkuun: tietue voi sisältää luettelon pakkauksista, joista kukin on AEAD blob avaimen alla, jonka käyttäjä voi toistaa toisella laitteella - esimerkiksi passkey PRF-tulostus. nympq1… Osa 10.1 kertoo, kuinka paljon se maksaa.

Tiedosto itsessään elää omassa asetusluokassaan, nymchat-pq-rootVaikka se ei kanna kääreitä, se tekee tarvittavan työn: sen läsnäolo on, miten toinen laite oppii, että tällä identiteetillä on jo juuret, mikä estää sitä huijaamasta kilpailijaa (3.3 kohta).

Suunnitteluhuomautus: yksi luokka, joka ei voi käyttää uutta avainta

Sillä nymchat-pq-root Luokka MUST ei Tämä rivi sisältää ainoan kopion juuresta, joten sen sinetöiminen juuresta johdetun avaimen alla on lukko, jonka avain on laatikon sisällä: mikään laite ei voisi koskaan avata sitä, mukaan lukien se, joka kirjoitti sen. Se on sinetöity klassisesti - NIP-44 itsessään - tai ei ollenkaan.

Jokainen muu asetusluokka voi ja pitäisi käyttää root-johdannaista avainta.Tämä on ainoa poikkeus, ja se on poikkeus pyöreydestä pikemminkin kuin vahvuudesta.

3.3 Sukupolvi ja adoptio

Käynnistyksessä, jolla on pysyvä identiteetti, asiakas toimii tässä järjestyksessä:

  1. Etsi olemassa oleva nymchat-pq-root ja ennätys.
  2. Tiedosto löytyi, ja tämä laite voi irrottaa sen - hyväksyä se ja julistaa tämän identiteetin post-kvanttiseksi kyvyksi.
  3. Tiedosto löytyi, ja tämä laite ei voi irrottaa sitä - älä luo uutta juurta, äläkä julkaise mitään ilmoitusta ollenkaan. Pyydä käyttäjää linkittämään tämä laite kirjoittamalla nympq1… laitteesta, jolla se on jo käytössä.
  4. Ei ennätystä - luoda root, julkaista ennätys, ilmoittaa ja näyttää nympq1… Käyttäjä saa koodin kerran, jotta hän voi tallentaa sen.

Vaihe 3 on askel, joka on helppo saada väärin, ja se on syy, miksi järjestys on kirjoitettu alas eikä jätetty jokaiseen toteuttamiseen. Kaksi laitetta, jotka kukin päättävät tuottaa juuren, tuottavat kaksi itsenäistä juurta yhden identiteetin alla, ja se on epäonnistuminen, jota tämä järjestys on olemassa estämään.

4Mahdollisuuksien ilmoittaminen

Julkinen puolet johdetusta avainparista julkaistaan osoitettavana Tyyppi 01 tapahtuma — tyyppi 30078, tagged nym-pq:

{
  "kind": 30078,
  "tags": [
    ["d", "nym-pq"],
    ["t", "nym-pq"],
    ["expiration", "<unix seconds>"]
  ],
  "content": {
    "v":     2,
    "alg":   "mlkem768",
    "nym":   1,
    "epoch": 0,
    "pk2":   "<base64url ML-KEM-768 encapsulation key>",
    "exp":   <unix seconds>,
    "devices": [ ... ]
  }
}

Addressable tarkoittaa, että siirto pitää yhden tapahtuman per (kind, pubkey, d-tag), joten tasavalta korvaa edellisen ilmoituksen paikallaan.

Allekirjoitus on sitova. Tapahtuma on allekirjoitettu tunnusavaimella, joten väite &ldquo;tämä ML-KEM-avain kuuluu tälle npubille&rdquo; on täsmälleen yhtä vahva kuin npub itsessään. Toisen kappulaatioavaimen korvaaminen edellyttää secp256k1 allekirjoituksen luomista. Hyökkääjä, joka voi tehdä sen, ei tarvitse vaivata KEM:tä.

Ilmoitukset päättyvät Seitsemän päivää NIP-40 Päivämäärä, joka julkaistaan uudelleen 24 tunnin välein, pitää kirjaa lausunnon asiakkaasta, joka on edelleen käynnissä sen sijaan, että se olisi aiemmin ollut.

Kadonnut ilmoitus luetaan täsmälleen kuten sellainen, joka ei koskaan kantanut avainta: vertaisryhmät lähettävät tavallisen NIP-44: n, jonka jokainen kirjautuminen voi lukea, ja asiakas jatkaa post-quantum-vaihtoa seuraavalla yhteydellä, kun se julkaistaan uudelleen.

Ilman sitä tietue ylittää nimensä avaimen: laite, joka on pyyhitty, palautettu tai jonka juuret on korvattu, jättää pysyvän ohjeen lukita avain, jota kukaan ei enää pidä, ja sen alla lähetetyt viestit menetetään ilman virhettä kummallakin puolella.

Avainkentän nimi on sen muoto. Kenttä on pk2, ja numero on osa sopimusta pikemminkin kuin sisustus: se nimittää avaimen käytettävän hyötykuorman muodon. Lukija, joka ei tunnista kenttää, päättää &ldquo;Nymchat-asiakas, ei post-kvanttiavainta&rdquo; ja lähettää tavallisen NIP-44, jota jokainen kirjautuminen voi lukea. Se on oikea epäonnistumissuunta, ja on syytä mainita säännön muodon numerointi on täytäntöönpantava: tunnistamaton kykyvaatimus on maksettava suojaa, ei koskaan toimitusta. Avain, jota vertaisryhmä ei voi käyttää, on pahempi kuin mikään avain lainkaan, koska viesti, jonka se tuottaa, on kadonnut ilman virhettä kummallakaan puolella.

4.1 Poissaolo on merkityksellistä ja kolminkertaista

Tyylikäs mutta tärkeä yksityiskohta: ilmoituksen julkaisee jokainen Nymchat-asiakas, ei vain post-quantum-kykyiset, ja avainkenttä on valinnainen.

tarkkaillaKeinotLähetä käyttäytyminen
Ilmoitus avaimella Nymchat, post-quantum kykenevä Hybridiä
Ilmoitus, ei avainta ollenkaan Nymchat, klassinen vain - post-quantum pois, tai laite, joka ei ole vielä kytketty identiteetin juurelle Tyylikäs NIP-17
Ei ilmoitusta Tuntematon asiakas. Voi olla mikä tahansa Nostr- tai Bitchat-käyttäjä Klassinen, plus yhteensopivuus

Avaimeton ilmoitus on allekirjoitettu lausunto, että lähettäjä käyttää Nymchatia, jonka avulla lähettäjän polku ohittaa spekuloivan ristiprotokollan pakkauksen, joka muutoin olisi sisällytettävä kenellekään, jota se ei voi tunnistaa.

4.2 Laite, joka ei pysty avaamaan juurta, pysyy hiljaa

Ilmoitus on korvattavissa: yksi tapahtuma identiteettiä kohden, viimeinen kirjoitus voittaa.Tämä tekee yksittäisen tallennuksen suunnittelusta toimivan, ja se on myös se, mikä tekee linkittämättömästä laitteesta vaarallisen, jos se julkaisee. Laite, joka ilmoitti avaimen, jonka se oli valinnut itselleen, murtaisi todellisen tallennuksen ja lähettää jokaisen vertaisryhmän salaamaan avaimen alla, jota muut laitteet eivät voi avata.

Joten laite, joka tietää juuret, on olemassa, mutta ei voi avata sitä, ei julkaise ilmoitusta ollenkaan.Se ei ole rikki eikä se ole lukittu pois sovelluksesta: se lukee edelleen jokaisen viestin, johon sillä on avaimet, ja lähettää silti klassisesti, samalla kun käyttäjä linkittää sen. Hiljaisuus on oikea käyttäytyminen laitteelle, joka ei voi puhua identiteetistä.

5Löytö ja lähetyspäätös

Asiakkaat oppivat vertaisavaimia kahdella tavalla. Pysyvä tilaus kattaa ihmiset, joiden kanssa käyttäjä todella vastaa - avoimet keskustelut ja ryhmän jäsenet - joten heidän ilmoituksensa saapuvat tavallisina tapahtumina. Vertaisryhmän tapaamisessa ensimmäistä kertaa yhden laukauksen kysely käynnistyy lähettämisaikana, rajoitettu 2,5 sekuntiin; jos se ei ratkaise, viesti menee klassiseksi, joka on käyttäytyminen, joka oli olemassa ennen post-quantumin lisäämistä eikä uutta epäonnistumista.

Käyttäjä, joka yhdistää uuden laitteen, tai joka siirtyy selaimen laajennuksesta sisäänkirjautumisesta paikalliseen avaimeen, tulee post-kvantti kykenee keskellä keskustelua, ja pysyvästi välimuisti &ldquo;no&rdquo; säilyttäisi ne klassisella salauksella ilmoituksen eliniän ajan.

5.1 Miksi ei ole alaspäin hyökkäys

Reitityspäätös vähenee yhdeksi kysymykseksi:

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

Ei ole kykyneuvotteluja, ei tuettujen algoritmien luetteloa, eikä hyökkääjä voi selvittää kenttää pakottaakseen heikomman polun. on Poistetun tai pidättyneen ilmoituksen epäonnistumistapa on se, että viesti menee klassiseksi - status quo ennen tätä ominaisuutta - sen sijaan, että hybridiviesti alennetaan johonkin väärennettävään.

Myös vastakkainen pitää ja merkitsee enemmän: asiakas lähettää hybridiä Vain Kun se pitää avaimen, ja pitää avaimen on todiste vastaanottaja voi dekapseloida. Ei ole tilaa, jossa viesti lähetetään post-quantum jollekin, joka ei voi lukea sitä.

6Hybridirakentaminen

Muuttamaton NIP-44-salaustekstti on sisäkerros, ja ML-KEM avaa ulkoisen AEAD: n sen ympärille:

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)

Molemmat salaisuudet on vielä palautettava, jotta viesti voidaan lukea: ulkoinen kerros tuottaa vain NIP-44: n salaustekstin, ja avaaminen, joka tarvitsee klassisen ECDH: n. Quantum-vastustaja, joka rikkoo secp256k1: n, saa sisäisen avaimen ja on edelleen ML-KEM: n edessä; ML-KEM: n rikkoutuminen katkaisee ulkoisen kerroksen ja jättää NIP-44: n seisomaan.

Vastaanottajan ML-KEM-avain on pitkäikäinen, mutta jokaisella viestillä on riippumaton salaustekstti ja siten riippumaton salaustekstti. kem_ssTämä on se, mikä tekee johdosta nonce sen sijaan satunnaistaminen se kuulostaa: Kaukolämpöpumppu 1305 on rikki uudelleenkäyttämällä (avain, nonce) pari, ja tässä avain itsessään on uusi jokaiselle viestille, joten mikään pari ei voi toistaa.

6.1 Miksi kerrokset pysyvät erillään

Vaihtoehtona on sekoittaa molemmat salaisuudet yhteen keskusteluavaimeen ja lähettää se NIP-44: lle:

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

Tämä rakenne kuulostaa kryptografialta. sillä on yksi rakenteellinen ongelma: se tarvitsee ecdh_x, raaka x-koordinaatti ECDH-tuloksesta, keskeisenä materiaalina - ja selainlaajennus (NIP-07) tai kauko allekirjoittaja (NIP-46Se suorittaa NIP-44 soittajan puolesta ja palauttaa salaustekstin, joka on koko piste pitää avainta jonnekin, missä sovellus ei pääse.

Salaisuuksien sekoittaminen sulkee siksi pois jokaisen kirjautumisen, joka pitää identiteettivaihtoehdon allekirjoittajan sisällä, eli kaikkein varovaisimmat käyttäjät, eikä mikään työ avaimen johdannaiseen voi muuttaa sitä.Layering poistaa riippuvuuden: NIP-44 pysyy kokonaisena ja tuotetaan mitä tahansa, joka pitää identiteettivaihtoehdon, allekirjoittaja mukaan lukien, kun taas KEM-puoli lasketaan asiakkaan suoraan pitämästä palautuskoodista.

Kustannukset ovat kaistanleveys, ja se ei ole pieni. ML-KEM: n salaustekstit ovat 1088 merkkiä ja kulkevat jokaisella viestillä, base64url-koodattu 1,451 merkkiin; ulkoinen AEAD lisää 16-bittisen Poly1305 -tunnisteen ja laajentaa NIP-44: n hyödyllistä kuormitusta kolmanneksella. 50-merkkinen viesti kasvaa 176 merkistä 1,712: een ja 2000 merkkiäinen yksi 2,820: sta 5,238: een.

6.2 Itse kuvailevat payloads

Sillä pq2. Etuliite tekee käyttöönotosta lisääntyvän: se on itsensä kuvaava, joten asiakas valitsee salauksen polun tarkastamalla hyötykuormaa sen sijaan, että luottaisi tunnisteeseen tai muistaisi, mitä vertaisryhmä tukee. lukija, joka ei tunnista etuliitettä, ei avaa tätä hyötykuormaa sen sijaan, että se lukisi sitä väärin, ja molempia osapuolia edeltävät sinetöidyt viestit voisivat tehdä post-kvantti pysyä luettavana kuin tavallinen NIP-44 ilman siirtymää.

implisiittinen hylkääminen

ML-KEM:n dekapselointi on suunniteltu niin, että se ei koskaan epäonnistu: kun otetaan huomioon väärin muotoillut salaustekstit, Fujisaki-Okamoto-muuntaja palauttaa deterministisen pseudo-satunnaisen salaisuuden virheen sijaan. Väärä avain ei näin ollen näy KEM-kerroksessa ollenkaan – se ilmestyy HMAC:n epäonnistumisena NIP-44:n sisällä, mikä on samalla tavalla kuin väärä klassinen avainpinta. Soittajat käsittelevät molempia samalla tavalla, joten epäonnistumisella ei ole erottavia signaaleja.

6.3 Lahja-aukon molemmat kerrokset

A NIP-17 Yksityinen viesti on a NIP-59 lahjapakkaus: allekirjoittamaton huhu, joka on sinetöity lähettäjän henkilöllisyysavaimen (tyyppi 13) alle, ja sitten kääritty viestiä kohti tuotetun heitetyn avaimen alle (tyyppi 1059).

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
Molemmat salauskerrokset ovat hybridejä, joista jokaisella on riippumaton ML-KEM-kapselointi. Ulkoinen kerros on lukittu heitetylle salaisuudelle, joten pakkaus ei paljasta lähettäjää.

Allekirjoittajan kirjautuminen saa vain ulkoisen kerroksen. Allekirjoittajan tuottama sinetti on tavallinen NIP-44 -sovellus ei koskaan näe avainta, joka tekee sen - joten sitä ei voi hybridisoida paikan päällä. Tämä ei maksa mitään kyseistä hyökkäystä vastaan: sinetti on saavutettavissa vain kääreen kautta, ja sinetti on se, mitä tallentaja varastoi. Vastustajan, joka pitää tallennettua liikennettä, on rikottava ML-KEM ennen kuin sinetti on näkyvissä hyökkäämiseen.

7Ryhmäviestit ja osittainen kattavuus

Ryhmän viesti ei ole yksi salaustekstti. Se on sama yksinkertainen teksti, joka annetaan jokaiselle jäsenelle, jokainen kopio kapselitettynä kyseisen jäsenen omaan ML-KEM-avaimeen. Jäsen, joka on julkaissut avaimen, saa hybridi-pakkauksen; yksi, joka ei ole saanut klassista pakkausta.

Tämä luo kirjanpito-ongelman, että naiivi toteutus menee pieleen. Jos kahdeksan kymmenestä jäsenestä saa hybridikopion, viesti ei Vastustaja tarvitsee yhden klassisen kopion yksinkertaisesta tekstistä, joka on identtinen kaikissa kymmenessä, joten viesti on suojattu vain, jos joka Se on kopio.

Nymchat seuraa näin ollen viestikohtaista kattavuutta fan-outin aikana - laskenta on tiedossa vain, kun kääreitä rakennetaan - ja tunniste raportoi &ldquo;quantum-resistantista 8: een 10 jäsenestä&rdquo; sen sijaan, että väittäisi viestin olevan suojattu. vastaanotettu ryhmäviesti (vain lähettäjä laskee fan-out), käyttöliittymä raportoi osittainen pikemminkin kuin täydellinen suoja.

7.1 Mitä kilpi raportoi

Kilpi kertoo totuuden viestiä, ei siitä ohjelmistosta, joka lähetti sen:

Tuomio tallennetaan, kun viesti suljetaan sen sijaan, että se lasketaan uudelleen siitä, mitä vertaisryhmä mainostaa myöhemmin.Siferteksti, joka jo on olemassa, ei voi tulla paremmin suojattu kuin se oli, ja käyttöliittymä, joka uudelleen vanhoja viestejä uuden ilmoituksen vahvuudesta, väittäisi jotain vääriä byteistä siirrossa.

Yllä olevat ryhmän säännöt ovat tämän yläosassa sen sijaan, että se korvaisi sen: ryhmän viesti on täysin suojattu vain, kun jokaisen jäsenen kopio oli, ja vastaanotettu ryhmän viesti, jolla ei ole kattavuutta, näyttää osittaisen.

8Kopiot, jotka on osoitettu itsellesi

Useat asiakkaan tallennukset on salattu käyttäjän omaan identiteettiin: synkronoidut asetukset, keskusteluluettelo, ryhmäavaimet ja viestiarkisto. Nämä sisältävät enemmän käyttäjää kuin useimmat yksittäiset viestit, joten jättämällä ne klassiseksi tekisi niistä heikoimman tallennetun esineen riippumatta siitä, kuinka huolellisesti viestit itse suljettiin. nymchat-pq-root luokkaa, jota ei voida sulkea avaimen alle, jonka ainoastaan se voi tuottaa.

Asetusten blob tai arkistorivi istuu yhdessä paikassa vuosia, mikä on täsmälleen se muoto, mitä sadonkorjuu- nyt-dekrytoitu-myöhemmin vastustaja kerää - paljon enemmän kuin mikään yksittäinen viesti, joka on ainakin käyttäjän omassa mielessä.

Yksi rajoitus säätelee muotoa täällä avaimen sijasta. joka jokainen laite mainostaa sitä, mitä se voi avata ilmoituksensa sisältämässä rosterissa, ja tili kirjoittaa vain sen, mitä kaikki heistä voivat lukea.

Rajoitus, joka kannattaa mainita

Laite, jolla on identiteetti, mutta ei juurta, ei voi avata mitään, joka on sinetöity root-johdannaiseen avaimeen, mukaan lukien sen omat asetukset.Tämä on tarkoituksellinen seuraus, ei valvonta, ja siksi kohdassa 3.3 on tällainen laite, joka kehottaa linkittämään tuoreen juuren sijasta: toinen root ei tekisi blobista luettavaa, se vain jakaisi identiteetin avainmateriaalin kahteen osaan.

Laite, joka ajaa selaimen laajennusta tai etäallekirjoittajaa (NIP-46) ei pidä nsec: tä peräisin, mutta se pitää palautuskoodia, ja osion 6.1 kerrostuneen rakenteen alla se on kaikki post-kvanttisen puolen tarpeet: allekirjoittaja tuottaa NIP-44-kerroksen kuten se aina on, ja asiakas avaa ulkoisen kerroksen itse.

9Pyöräily

Sillä epoch Laskuri johdannossa on se, mikä mahdollistaa kierron ilman uutta avainmateriaalia. Kasvattamalla se tuottaa uuden avainparin samasta juuresta ja uudelleen julkaistusta ilmoituksesta; vertaisryhmät poimivat uuden avaimen korvattavasta tietueesta.

9.1 Vanhoja aikakausia säilytetään, eikä mitään salaa uudelleen

Mikään ei kirjoiteta uudelleen, kun avain pyörii. Asiakas rakentaa salauksen ehdokkaita nykyisestä aikakaudesta &minus; 3-aikaan, joten viesti, joka on sinetöity vähän ennen kierrosta, avautuu edelleen avainparia vastaan, joka oli nykyinen, kun se lähetettiin.

Tämä ikkuna on se, mikä tekee kierrosta turvallisen: ilman sitä jokainen kierros hävittäisi mitä tahansa, mikä oli lennossa. Mikä tahansa jo sinetöity pysyy luettavana identiteetin eliniän ajan, koska viesti, jota käyttäjä ei voi enää avata, on heille ehdottomasti huonompi kuin sellainen, jonka suojaa ei voida parantaa taannehtivasti (Sektio 10.5).

10Mitä tämä ei suojaa

Paperi, jossa luetellaan vain, mitä muotoilu saavuttaa, ei kuvaile järjestelmää, ja käyttöliittymän turvallisuusominaisuuden yliarviointi on pahempaa kuin sen laiminlyönti.

10.1 Juuri se on toinen salaisuus, ja sen menettäminen on palautumatonta.

Tämä on suunnittelun todellinen hinta. Kohdassa 2 oleva rajoitus, jonka mukaan käyttäjällä pitäisi olla täsmälleen yksi asia säilytettäväksi, ei voi täyttyä: nsec yksinään ei rakenna uudelleen post-quantum-avainta, koska kokonaisuutena on, että ei ole julkista arvoa eikä muuta salaisuutta, joka paljastaa sen. Jos mikään laite ei pidä juurta eikä yksikään Kohdassa 3.2 olevista kääreistä voi avata, materiaalia, joka on suljettu root-johdannaiseen avaimeen, ei voi palauttaa.

Kun manuaalinen siirto on ainoa polku, tämä on terävämpi kuin se voi ensin lukea. nympq1… Koodi missä tahansa on täsmälleen yksi kopio siitä, yhdellä laitteella, ja menettää tämän laitteen menettää jokaisen post-quantum viestin, asetukset blob ja arkistorivi sinetöity siihen. nsec ei auta; se on omaisuus, johon koko muotoilu perustuu.

Hyökkääjä hyökkää halvimpaan käytettävissä olevaan polkuun, joten järjestelmä on sen arvoinen, mitä sen heikoin palautusreitti on sen arvoinen - ikimuistoinen salasana, esimerkiksi, laittaisi koko asian mihin salasana on arvoinen, ja pakattu rivi on täsmälleen esine, jonka sadonkorjuu- nyt-dekrytoitu-myöhempi vastustaja kerää ja jauhat offline-tilassa.

10.2 Todentaminen erillään luottamuksellisuudesta

Jokainen allekirjoitus Nostrissa on Schnorr yli secp256k1, ja se on muuttumaton täällä. Vastustaja, jolla on kvanttitietokone, voisi väärentää allekirjoituksia ja teeskennellä käyttäjää reaaliajassa. Mitä hybridi avainvaihto tappaa, on sadonkorjuu- nyt-dekrytointi-myöhemmin: hyökkääjä, joka tallentaa liikennettä tänään, ei voi lukea sitä myöhemmin. Se ei tee viestiä anteeksiantamattomaksi vastustajaa vastaan, jolla on jo kone. Tämä erottelu viedään sovelluksiin tarkoituksella - padlock-indikaattori raportoi todentamisesta, kilpi raportoi luottamuksellisuudesta, ja ne ovat erillisiä glyfyjä, koska viesti voi olla yksi ilman toisiaan.

Se rajoittaa myös sitä, mitä kohdassa 4 oleva ilmoitus voi luvata.Nppubin ja ML-KEM-avaimen välinen sitoutuminen on secp256k1-allekirjoitus, joten vastustaja, joka voi väärentää ne, voi korvata oman avaimensa.

10.3 Metatiedot

Lahjapakkaus piilottaa lähettäjän, vastaanottajan yhden p Sisäisen viestin tunnus, tyyppi ja aikaleima. Se ei peitä, että tapahtuma on olemassa, sen koon tai kun välittäjä vastaanotti sen.

10.4 Offline verkko

Nymchatin Bluetooth-verkkoliikenne on erillinen protokolla, jolla on oma kädensija, eikä se kuulu tämän työn piiriin.

10.5 Viestejä jo lähetetty

Ciphertext tallennettu kun molemmat puolet oli edelleen klassinen pysyy klassinen pysyvästi. Se on jo olemassa ja ei voi sulkea uudelleen. Suojaus alkaa viestissä, jossa molemmat puolet pidettiin post-quantum avaimet, ei hetki, kun ominaisuus kytkettiin päälle.

11Harkittuja vaihtoehtoja

lähestymistapaMiksi ei
Post-quantum-avaimen johdattaminen identiteettivaiheesta Johdanto on julkinen algoritmi nsec, ja kvantti vastustaja palauttaa nsec julkaistu npub, joten rikkoen klassinen puoli kädet yli post-kvantti puoli sen kanssa.
Lähetä root käyttäjän muille laitteille NIP-44:n kautta Klassisen vain salauksen alla välitetty root on palautettavissa kenelle tahansa, joka tallensi tämän viestin ja rikkoo sen avaimen myöhemmin, mikä on vastustaja, jonka root on olemassa pysäyttääkseen.
Erikseen luotu ML-KEM-näppäimistö jokaisella laitteella Laitteet pitäisivät eri dekapselointiavaimia, ja yksi korvattava ilmoitus per identiteetti ei voi kantaa niitä kaikkia. Vertaisryhmät salattaisivat, mihin avaimeen viimeksi julkaistiin, ja jokainen muu laite ei pystyisi lukemaan tulosta.
Kääri juuret pinin alle Nelinumeroinen PIN-koodi on noin 13 bittiä offline-hyökkääjää vastaan, joka pitää pakattua riviä. Tarjoamalla sitä kahden 256-bittisen polun vieressä vääristettäisiin sitä, mitä heikoin pakkaus on arvoinen.
Laajenna npub molempien avainten siirtämiseen 1,184 bytejä ei ole jaettavissa oleva tunniste, ja se rikkoisi jokaisen olemassa olevan Nostr-asiakkaan tarkistamisen osoitteesta, joka on määritelty 32 byteiksi.
Avainkirjoittajan palvelut Palauttaa verkoston olemassa olevan auktoriteetin välttämiseksi.Joka vastaa hakutulokseen, päättää, kuka voi lukea viestin.
Liitä avain jokaiseen viestiin Ei ratkaise mitään: lähettäjä tarvitsee vastaanottajan avain ennen ensimmäistä viestiä, mikä on täsmälleen tapaus, jossa ei ole aikaisempaa viestiä, joka kantaa sitä.
In-band kyky neuvotella Luo alennetun pinnan. Hyökkääjä, joka voi riistää kykylippun, pakottaa klassisen polun.
Vain post-quantum, ei klassista jalkaa Hylkää vuosikymmeniä sekp256k1:n analysointia vastineeksi paljon nuoremmasta primitiivistä. molemmat Epäonnistuu

12Täytäntöönpanopariteetti

Nymchat toimittaa kaksi itsenäistä toteuttamista tämän rakenteen - yksi JavaScript web-sovellus, yksi Dart mobiilisovelluksia, mukaan lukien nollasta ML-KEM-768 portti.

Dart ML-KEM -implementaatio on validoitu virallista vastaan NIST ACVP Tiedossa olevien vastausten testaus ML-KEM-768 (ML-KEM-*-FIPS203NIST julkaisee vektorit validoidakseen täytäntöönpanon, joten niiden siirtäminen on todiste siitä, että portti on oikea, ei pelkästään todiste siitä, että kaksi asiakasta ovat keskenään samaa mieltä. Sen lisäksi testivektoreiden yhteinen kiinnitys - siemenjohdannainen, kappale, molemmat hyötykuorma-formaatit ja täydelliset lahjapakkaukset - on luotu JavaScript-viittauksesta ja tarkistettu molemmilla testipakkauksilla. Root-salaisuus laajentaa tätä kiinnitystä sen sijaan, että se korvataan: root-seed, root-keypair, juuren julkinen sormenjälki ja ulkoisen kerroksen johdetut avaimet, nonce ja niihin liittyvät tiedot ovat omia vettoreita, joten kaksi asiakasta eivät voi olla eri mieltä siitä, nympq1… Erimielisyys kummassakin toteutuksessa epäonnistuu rakenteessa sen sijaan, että se tuottaisi viestin, jota toinen asiakas ei voi avata.

Se kertoo laitteelle &ldquo;tämä on juurta pidän&rdquo; alkaen &ldquo;tämä on erilainen yksi&rdquo;, ja asiakas, joka ei pystynyt toistamaan toisen asiakkaan sormenjälkeä, lukisi täydellisen hyvän ennätyksen kuin ei mitään ennätystä ollenkaan - ja sitten, 3.3 jakson jälkeen, minttaa toinen juuri ja jakaa identiteetti.

Nymchat on Avoimen lähdekoodin AGPL-3.0. Tässä kuvattu kryptografinen ydin on js/nym-crypto.js ja js/modules/pq.js Verkkosivustolla oleva asiakas ja lib/core/crypto/ kanssa lib/features/identity/pq_registry.dart ja mobiilikäyttäjille.

Lyhyempiä, ei-teknisiä selityksiä varten katso Tietokanta Quantum Resistant Encryption.