Nuxɔnuwo ƒe ɖakpedodo: Kuantɔm dzigbeɖeɖe si dzeɖe ɖe kuantɔm ƒe dɔ me

Nymchat teknikal ɖokpeɖeɖe

Quantum ɖume kpɔkpɔ ƒe ɖokpeɖeɖe le Nymchat dzi

Ɖe ML-KEM-768 public keyswo ɖe Nostr dzi menye directory alo registry aɖe me o, eye wòɖe ɖe dzesi siwo me tso xɔse aɖe me si nu wowɔawo me fia o.

Akpa 1.0 Agusto 2026 Enye Nymchat 3.74+ gbɔna

Mesajĩɖeɖe ɖo post-quantum key exchange ɖeka la, menye kplɔ̃ɖeɖe kplɔ̃ɖeɖe menye o. Primitives siwo le eme la, wogblɔ nu siwo wòkpɔ ɖe nuŋɔŋlɔ me eye librarywo ɖe ɖe anyi. Nu si ƒo la nye be ame sia ame si le kplɔ̃a me la ɖo... eveɖeka public key, eye dɔwɔnu siwo le ɖekae me o (decentralized network) ƒe dɔwɔnuwo me, eɖeawo ƒe taɖi aɖe aɖe me o. Esia ƒe takatakata ɖe nu si Nymchat va ɖe esi be eɖe nu nya sia — nu kae evelia ƒe dɔwɔnu va ɖe, eƒe nɔnɔme ɖe ame siwo ɖo nu sia me la gbɔ, eye nu kae interface la nya be eɖe nu nya si le nu si va vi la dzi — eye le nuƒoƒo gɔme la me, nu kae nu si va vi la me aɖemegbe.

1Nukpɔkpɔ la

Nostr ƒeƒe nuƒowɔwɔwo wɔ nya kpeɖe ɖe NIP-44 ƒe agbalẽ, si ƒe ɖeka me ɖeka ɖeka ɖea ɖeka. Deka si ƒo nu si le ɖeɖe me — ChaCha20 kple HMAC-SHA256 tag, siwo ƒe kadi ƒo ɖe... HKDF (RFC 5869) — quantum computer ɖeka menya ɖe eŋu ɖe nuɖeɖe me o; Grover's algorithm le xɔxɔ si le square-root ƒe dɔwɔwɔ ɖe symmetric key ɖe asi, eye 256 bits la le nu sia ɖe ɖe o. Nu la ƒe laƒe si... eɖoa ɖe xɔƒu la dzi nye elliptic-curve Diffie-Hellman le secp256k1, eye Shor ƒe kplodziɖeɖe la ɖoa discrete logarithm la vɔ vɔ. Ne wòɖeká private key ɖeka eye wòɖo eƒe public counterpart gbɔ la, eɖea shared secret ɖekaɖeka si kplodziɖeɖe la ɖɔ ɖe awɔwɔwo me la ɖe.

Nya si sia wɔna la menye be wòadze egbegbe o be machine si nya la nàɖo ɖe nu o. Nyaɖeaɖaɖu si ƒe dɔwɔla ƒe dɔwɔɖi le esi la, wòavaɖe ciphertext ɖe nu le egbegbe, eye wòavaɖe dzesi la ɖe nu wònye be dɔwɔɖi la nàɖo ɖe nu o. Nu siameɖe ɖe nu le egbegbe siwo le dɔwɔwɔ me le ŋkeke si la me la, dzesiwo la ko le compromised kaba. Esia nye nuɖuɖu si post-quantum key exchange la ɖu ɖe eŋu la, eye esiae nye gbɔgbɔ si ɖe nu le be machine la nàɖo ɖe nu o.

1.1 Nyatakalo si wɔ sia ɖe ŋu

Nu si dzi wòɖea ɖe nu o la, wòɖo nu fɔ: ɖe post-quantum key encapsulation mechanism ɖekae kple classical exchange la ɖekae, be amesi ƒo nu la nèsɔ kple ɖeka siawo avɔ be wòanya nu sia. Nymchat ɖe ML-KEM-768 ɖe dɔ (FIPS 203). Enye nyeɖeɖe ɖea afatuduta dɔmesẽ:

Kpɔkpɔ la

Be èade kplɔ̃lɔ̃ ɖe Alice gbɔ le ŋdi sia, nu ɖeka wònye: eƒe npub. Ka post-quantum exchange ɖe eŋu la, nu eve wònye — eƒe ML-KEM public key. Woe nye be, eƒe key sia ɖe? Eye èƒo ɖe nya sia gbɔ ɖeŋu be èade kplɔ̃ bubu ɖe eŋu gbɔ?

Npub nye nu si ɖeɖe nye nu ɖe. Wòa te ŋu ɖe nu ɖe papɛɖe dzi, ɖe nu ɖe wò ɖe ɖeɖe me, alo mɛkpɔ nu ɖe wò eye ɖe ekran dzi, eye nye nu si ame sia ame ɖo nu ɖe wò be wòadɔ nu ɖe wò me. ML-KEM-768 public key ƒo 1,184 bytes. Wòa te ŋu ɖe wò ɖe ɖeɖe me, wòadɔ nu ɖe username ɖe, eye wòade QR code me le nu si ƒo 32 bytes ko ƒe identity ɖe gbɔ.

Nɔnɔme ƒe gãnyãnu nye nu si ƒoɖo fɔ. Nu si gbɔɖi la nye be, kaba ɖeke aɖe li na nu ɖeɖee etɔ̃ siwo ɖea nu ɖe nɔ, eye nu si le nuŋlɔƒea sia ƒe ɖeka sia me la nye nyagbe si le ɖe nu wo dzi:

2Dɔwɔnu dzigbeɖeɖe nuɖozodziwo

Kpɔkpɔɖeɖe ɖe evelia ɖo eɖeɖe le eɖeɖe siawo me, eye wòɖo nu siwo le ɖeɖe me la gbɔ gbɔ ɖa be kɔɖi (code) aɖe meɖo ɖe mɔ gbã.

  1. Ŋutiɖeɖe mɔɖe si wòkpɔɖe ɖeɖe. Nostr dɔwɔlawo ɖe afiɖeɖe ɖeka ko va ɖe ɖe, nye nsec. Afiɖeɖe ɖeka ɖeɖeka si le ɖe ɖe ɖeka la nye bali ƒe kplɔ̃ bubu si wòawɔ na wòagbe wò ƒe ŋutifafa la, eye ame si xɔ nya be wòava nɔ nsec ƒe ɖokpɔtɔ me la, maseɖea ɖe dzesi bubu ɖeka alo bubu si wòava nɔ ɖe eƒe dzesi la ƒe ɖokpɔtɔ me la. Section 3.1 fia be nusi sia me la meɖe dzesi ɖeka ko — nsela si ƒo nsec ƒe dzesi la ƒe ŋusẽ (post-quantum key) la me, melaɖe dzesi ɖeka ko (post-quantum protection) ɖe ɖe ɖe — eye dziɖiɖi (design) la ɖe afiɖeɖe ɖeka ko eye melaɖe bubu: dzesi ɖeka ko si woxɔna ɖe dzesi ɖeka (identity) ƒe nu me ɖeka, si woxɔna ɖeka ko, si wotiɖe le nsec ƒe dzesi ƒe dzesi kple eƒe taɖeƒe me be ame si xɔ nya be wòava nɔ dzesi ɖeɖe ɖeka me la, wòava nɔ eɖokui me la. Section 10.1 fia be nusi si wòava nɔ ɖe eƒe dzesi me la.
  2. Mɔ ɖeɖe me. Xɔ̃laɖe aɖe si xɔna be eɖe aɖe nye ame nào ƒe xɔ̃ la menye. Xɔ̃laɖe aɖe si le eme siawo le ɣeyiɣi si me wònye mɔ ɖe mɔ bubu ɖe le.
  3. Meɖeɖe geɖe, nyeenye ɖeka. Nostr identity ɖeka wòkpɔ ɖe client geɖe me ɖekea me le nu geɖe me. Ale si nye key material le eme la, eƒe nuɖeɖewo nɔa ɖoɖo ɖeka me le woameɖeɖe ɖeka me la, eye yomeɖeɖe siwo kplɔ e yi ɖem la, ame si ƒo ɖe nu ŋu la kpe ɖe eƒe feature la ŋu la, meɖo nɔna be wòɖe nu le wo me la.
  4. Kpɔkpɔmeɖe o. Ŋɔŋlɔ si woɖoa ɖe kɔkɔ me ɖe ɖe "kɔkɔ (cipher) siwo nàkpɔa ɖe?" la, eɖo nu si amesi ɖu ɖe nàɖe aɖu be wòade kɔkɔ si ƒo la. Dɔwɔwɔ sia ƒe dɔwɔwɔ me meɖo nu si nàɖe ɖe kɔkɔ si ƒo la.

3gbɔgbɔ ŋutinya ɖeɖeɖe

Dzesi si le eŋu la nye be ML-KEM decapsulation key la ƒe seed nye key material si nu si ame katã xɔna la meɖe aɖe aɖe. Identity ɖeka ɖeka ɖoa secret ƒe gɔme ɖeka ɖe eɖokui ŋu, si woɖo ɖe eŋu ɖeka pɛ:

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)

Wòɖoa root ɖe ame si wònye nɔnɔme si nsec ɖea ɖe eƒe ŋu nya: bech32 ɖe gbɔɖe si ame xɔ ɖe eŋu la me nympq, eye wòŋlɔla ɖe nympq1…, si woɖe ɖe nsec ɖome ɖe identity screen la me ɖe reveal interaction la ƒe nɔnɔme me, si woɖo ɖe xɔ ɖe dzesi ɖeyẽ la, si woɖe ɖe dzesi me ene ene o eye womeɖo eƒe dzesi ɖe anyi kɔkɔe me ene ene o. Enye password o eye wònye login o. Enye key material si dɔwɔla la ate ŋu aɖe, si ƒe nɔnɔme ɖekae nye nsec la.

Salt la wɔ ɖe dzesi ɖewo me ɖoɖo me, be xɔɖɔɖewo bubuwo menya kplɔ̃ɖeɖe ɖeka si ɖo ɖeka me o. Nu... epoch Counter ɖua ɖuɖu (Kplenɔme 9).

3.1 Nati kela la meɖe kpe ɖe eŋu o tso identiti kela la me

Dzesi si le anyi nye be wòade kaluɖuɖu ɖua le ɖeka le ɖeka ƒe tso mɔ̃ɖoɖo si dɔwɔla la le eƒe asi me ya ƒe ɖome ya:

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

Enye nu vevi ɖe nuɖatɔ̃ efɔ siwo le nyataklɔ: nu xɔxɔ meɖe siwo ƒe ɖeɖe nava le anyi o, ɖe be nsec la ɖeɖe ko lae nye nuɖeɖe; tɔtrɔ ɖeka ɖeka ɖo be tɔtrɔ ɖeka ɖeka ɖo ɖe dzesi ɖeka dzi, eye nu siwo ɖo dzesiwo la mazu ɖe dzesi ɖeka dzi o; dzesi ɖeka si aɖeɖe nya ɖe ɖeka ɖe ɖeɖe, ɖe be tɔtrɔwo mazu ɖe dzesi ɖeka dzi o; eye dzesi la le anyi ɣe be wòanya ɖe anyi o, ɖe be amesi ɖu nya la ate ɖe nu ɖeka ɖe eɖokui dzi ɖe nɔnɔ ƒe dɔwɔwɔ ƒe ɣeɖe la.

Nu nyui sia ɖotɔ evelia ɖe, ɖe nu ɖeka ta. Shor's algorithm si wofia ɖe npub si wowɔ ɖe public la ŋu la, fia nsec la. Seed ƒe fiaɖeɖe nye algorithm si wowɔ ɖe public ta ɖe nsec la ŋu. Enye ɖɔ, ame si ɖu nu siwo le classical la ƒe ɖeka la, wòazã HKDF ɖeka si amesiame wɔ la be wòawɔ nu siwo le post-quantum la ƒe ɖeka la ɖe ɖeɖe. Deka si wogblɔ be "harvest-now-decrypt-later" — nu xexe ɖeka si wòɖo ɖe nu si sia la ɖe ɖe ɖe — la ƒe gbɔ, key si woxɔ ɖe nusi nya sia ƒe asi la ŋu la, mɔ̃ nu kumba o.

Ɖokpeɖe si adeke gbɔna

ML-KEM decapsulation key la wòava de entropy si wòanya nsec la ɖe eƒe dzesi me o, eye wòaɖu ɖe dzesi si nye classical-only encryption la me o.

Ɖeka sia ƒe nuƒome aɖe si le ɖeka si ƒe nuƒome aɖemegbe la, eƒe dɔwɔwɔ la le ɖeka si ƒe dɔwɔwɔ ɖe. Nusi si wogblɔ ɖekaɖekaɖe eye wofia ɖe xɔ ɖe dɔwɔla ƒe meɖokui ƒe meɖokuiwo dome le NIP-44 nuƒɔƒo si mele ɖeka sia me lã, nye nuɖuhã ɖeka si ɖe dɔ le dɔwɔwɔ geɖe me: ame aɖe aɖe si ɖe nuƒɔƒo sia ɖe dzesi le ŋdi sia eye wofia eƒe kile (key) ƒe dzesi le ŋlater lɛ, la, eyega nu si ƒo le gbãtɔ me la ɖo. Enye nyateƒe ŋutɔ si ta la, viɖeɖe siwo le dɔwɔwɔ ɖeka sia ƒe nuƒome aɖemegbe lawo nye viɖeɖe siwo le ɖe ɖe la, eye wogbe ɖe nuɖuhã “tia ɖe wò ɖe wò meɖokui ƒe meɖokui bubu ɖe” la me.

3.2 Kpɔm root la ɖe dɔmetsɔ ƒe dɔwɔnu bubuwo me

Sekshɔn 2 ƒe ɖekɔɖeɖe 3 — ŋkuɖu ɖeka, meɖeɖe geɖe — menye keteɖewɔwɔ me gbɔna nya sia ƒo gbɔ o le fofonẽ me o, ɖeɖe ɖe be mɔkpɔkpɔ la menye nu si meɖeɖe la ɖu ɖe nu si woɖu ɖe xɔmɔ ɖe xɔmɔ o gbɔ la. Eɖo be nukuɖodzɔɖe la na woɖo nu ɖo gbɔ, eye yia ɖekae ko: ame si ɖu nu la ɖu... nympq1… wɔ kɔɖi ɖe ɖeɖe.

Gɔme la ɖe ŋutɔ be nympq1… nsec gbɔ, eye meƒome bubu ɖeka la ɖoa e ɖe panel la me ɖekea. Enye dɔwɔnu katã. Meƒome si nya kɔɖi la ɖeɖe o la menya dɔ, si Nuƒoa 4.2 ɖe kplɔ̃ la.

Ɖeɖe ɖe ŋutɔ ƒe dɔwɔwɔ me nye dɔ si wowɔ ɖe ŋu ɖe, ve sɔ̃ wu be enye ɖeɖe ɖe gɔmeɖeɖe me. Section 3.1 ƒe nɔnɔmeɖoɖo ɖe be 'root' la menye be wòadɔ ɖe 'classical-only encryption' ƒe kɔƒo me o, eye dɔwɔwɔ ɖekaɖeka siwo aye ɖeɖeɖe sia ɖe be eya nye dɔwɔwɔ ɖeɖeɖe — be wòadɔ e ɖe 'relay' ƒe yɔme, eye wòadɔ e ɖe 'identity key' la me — eɖe be eɖokui la vɔ ɖe nɔnɔmeɖoɖo sia ƒe nuŋutetɔ me. Dɔ si neɖeɖe la wɔ nye eƒe dunya be ɖeɖe si le eme la menye nɔnɔme vɔvɔ̃ ko o.

Format la ɖe gɔme na nu si wowɔna be nuɖodziɖi ɖe ɖe: ɖekpeɖeɖe la ate ŋu ɖo nuɖodziɖi siwo wowɔ na nu ɖe ɖe ɖekaɖeka, eye ɖeka ɖeka nye AEAD blob si woɖo dzesi si nuɖozãla ate ŋu ɖo ɖe ɖekpeɖeɖe le dɔwɔwɔbubue me — be passkey PRF output ene, eye wònye nuɖodziɖi ɖeka. Nu aɖe le gbɔ gbɔ me si wowɔna be nu sia ɖe ɖe o, eye esime nu aɖeɖeɖe ɖe ɖe o, la nympq1… Kɔɖe nye ɖeka ɖea si meɖu ɖe ɖe. Kpɔkpɔ 10.1 ɖo nu dzi kpae ɖe fai si wòɖo nu dzi ŋu.

Ŋtakpɔkpɔ la ɖөө le eƒe tɔtrɔwo ƒe kplɔ̃ ɖokui me, nymchat-pq-root, eyeɖe ɖeka ɖe ɖeka ɖe nɔnɔme bubuwo siwo le nɔnɔme siawo me ɖe. Benɛ ɖe afiɖeɖe aɖe o la, eɖe dɔ si le gbɔ: eɖeɖe la nye nu si ɖe nu be dɔwɔnu aɖe bubu ɖekae xɔa be eƒe dzɔdzɔ la ɖe afiɖeɖe gbɔ ɣe la, eye enye nu si ɖe nu be wòado dɔwɔnu bubu aɖe si ƒo ɖe gbɔ (Section 3.3).

Didi ƒe nuŋuŋu: dɔme ɖeka si meɖo agbe be wòawɔnu kplɔ̃ yeye sia.

La nymchat-pq-root ʋeɖeɖe nye o wòɖe ɖe xɔ̃me ɖe ML-KEM key si wòɖe vi ɖe ŋu vi ɖe root la me. Ame si ƒe ƒeƒe la ɖea root ƒe dzesi ɖeka ko la, ɖeɖe nye kplɔ̃ si ƒe kplɔ̃ le bɔksia me: menye nuɖeɖe siawo meɖe nuɖeɖe si ate ŋu adze e, si nye nu si wòɖe e la menye. Wòɖe e xɔ̃me le kɔm ƒe nɔnɔme me — NIP-44 ɖe ɖ себя me — alo menye ɖe nuɖeɖe me o. Edome ɖeka nye e si dɔwɔnu la ɖoa kɔm ɖoku ɖokui agbetɔsi la, eye e ate ŋu la: ƒeƒe la ɖea root aɖe o egbe, gake eɖe ɖe nu si nye be eɖe ɖe ɖa o la ko.

Kpɔkpɔwo ƒe ƒeƒe nu sia nu ɖo kple nɛla ɖo be wòado xɔkpɔkpɔ si wòɖoasi ɖe gɔme la dzi. Enye ɖeka ɖoɖo ɖesiaɖe, eye enye ɖoɖo si ƒo nu ŋu kple nuɖeɖeɖe eve nu kple kekee gbɔ o.

3.3 ɖeɖiɖi kple kpɔɖeɖi

Wɔ nu gbɔ ɖeɖe me, ɖekui ƒe ŋkɔ si madze o, client la ɖo nya siawo ƒe katã le ɖeka me:

  1. Kpɔ etɔtɔ si le eme nymchat-pq-root ŋutikɔ.
  2. Wòɖae ɖe ɖe, eye gadome sia menya vu nu ɖe eŋu ɖu eŋu eye ɖe nu be esia ƒe nɔnɔme la le kwantum megbe dɔm.
  3. Wɔnu wòɖo, eye meɖeɖe sia menya ɖe eƒe nu me o. — root bubu gblẽ o, eye xɔxɔ kplesi ɖeka o. Ðo nuɖeɖe ɖe dɔwɔla be wòatɔŋlɔna masin sia le dziɖeɖe ƒe nympq1… Kɔɖi tso gadome si le eŋu ya.
  4. Dzesi aɖe o — ɖe gbɔgbɔ ɖe, ɖekpɔ ŋutaɖuɖu ɖe gbɔ, kpata ɖe gbɔ, eye ɖekpɔ eɖe nympq1… Kpɔ kɔɖu ɖe ame si wònye ɖeka be wòɖeɖe.

Akpa etɔ̃̃ nye akpa si ɖea nu si fɔ fɔna wu, eye nye eƒe nɔnɔme si ta gbɔ woti nɔna ɖe dzesi me, eye wode ɖe nu si dɔwɔwɔ ɖeka ɖeka me o. Dɔwɔwɔ ƒe meɖeɖe eve siwo ɖo nu be woadi dzesi ɖeka ɖeka, woabia dzesi eve ɖekaɖeka siwo ɖo ɖe dzesi ɖeka me, eye nye nu si ƒoɖi si nɔnɔme sia ƒoɖi be wòade dzesi ɖekaɖeka siwo ɖo ɖe dzesi ɖeka me o.

4Dɔwɔwɔkpɔ veve la

Keypair si wɔe ɖe dzi la ƒe laʋɔɖe la ʋe ɖe kplamɖeɖe (addressable) ɖe. NIP-01 adɔ — nu 30078, ɖo ŋkɔ 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 ƒe nɔnɔme nye be relay la ɖoa nu ɖeka ɖe (kind, pubkey, d-tag) ɖe la me, eye wòɖoa nu si me viɖeɖe la ɖe eƒe gɔme. Eyã la, ɖekaɖeka ƒe ŋkɔ ɖe dzesi ɖeka ɖe eƒe nuŋɔŋlɔ si me ɖe ɖeka ɖe, eye nu siae nye be “ɖe Alice ƒe dzesi ɖe” nye nu ɖeka si me la la ɖeɖe, eye nye nu geɖe si wòɖe ɖe ɖe ɖe menye.

Ŋkɔɖeɖe la nye nu si ɖe ɖeka. Akpa sia ƒe dzesi la ɖe dzesi ƒe kaba gbɔ, eye nya si nye "wɔ ML-KEM kaba sia ɖe be eɖo sia npub me" la, eƒe ŋutifafa la le ɖeka ɖe npub la ƒe ŋutifafa la ƒe nu me. Beɖe kaba bubu ɖe kaba la ɖem ɖe eŋu la, eɖo be wòadzu secp256k1 dzesi aɖe si menye eɖokui o. Ame si ɖi dzesi si nàɖa eŋu la, eɖomanyenye be wòade nu ɖe KEM la ŋu o.

Ŋutaɖiɖiwo va ɖo. nuɖeɖeɖe ɖe NIP-40 ƒe agbalẽa Nuɣiɖeɖe, si wowɔ ɖaŋɖa ɖeka ɖe ɖeka ƒe ʋia ɖeka ɖe, ɖoa nuŋɔŋlɔ la ɖo be nuŋɔŋlɔ la nye nuŋɔŋlɔ tso amesẽtɔ aɖe ŋu si le dɔ ɖaa, mate be enye nuŋɔŋlɔ tso amesẽtɔ aɖe ŋu si le dɔ ɖa mɔ o. Gɔmeɖoɖo la ɖekaɖekaɖe matea ɖeɖe o; ɖe nuŋɔŋlɔ si le eŋu la ɖe ɖa o.

Ŋuta si me dɔ ƒe nɔnɔme ɖe la, wòkpɔ anyi ɖekae abe ŋuta si me kplenɔ ɖe la me: peers ɖe NIP-44 si me nuɖuɖuɖi ɖeka ɖeka me nya me la, eye client la tso post-quantum exchange la me ɖe asigbe ɖeka me, ne eɖo nu ɖe asigbe la me. Eya ɖeɖe la, ne wòɖe ɖokui ɖe dɔ me wu nuɖuɖu kwasiɖa ɖeka la, eɖe amesiwo wòɖe nu le ŋutanyatakpɔkpɔ me la ƒe ɖokuɖoku ɖe — woɖe nu le classically encrypted me, eye woɖe nu le quantum-resistant me o — eye eɖe nu bubu ɖe o. Nu si wòɖe la, eɖe nu ɖe eŋu o, nu si wòkpɔ la me nyaɖuɖu me o, eye ne wòɖoa ɖe dɔ me la, wòkpɔ nu ɖe nu o.

Dzigbɔɖeɖe (asymmetry) sia nye eyigbeɖeɖe la ƒe bububu ɖe, mate enye nu si dze ɖe eŋu ɖe o o. Ebe eɖokui meɖe o la, nuŋɔŋlɔ si le eme la nɔa eƒe dzesi (key) si le eƒe ŋku me la gbɔ wu: gadzi si woɖu eƒe nuŋɔŋlɔwo katã ɖe tsi me, si woɖo eɖokui ɖe esia, alo si woɖɔ eƒe ƒeɖeɖe ɖa ɖa la, ɖoa dzesi ɖe ɖeɖe ɖe ŋu be wòado dzesi (key) si ame ɖaɖa ɖe o me, eye nuŋɔŋlɔ siwo woɖoa ɖe eŋu la va ɖe tsi me eye nuɖiɖi (error) aɖe ɖe agbɔ siawo ƒe gɔme aɖeɖe me. Ŋkeke ɖeɖe ɖeɖe nye nu si ɖo eƒe ɣleti (window) la, eye eɖoa nuŋɔŋlɔ la ɖe eɖokui gbɔ (relays), kate ŋu aɖo be menɔ agbɔɖeɖe (clients) siwo le eme la be woana nuŋɔŋlɔ la.

Keke ƒe ƒe la ɖoa e ƒe dzesi ŋkɔ ɖe. To la nye pk2...eye numewo la le ŋɔŋko me, mate ŋu aɖo ɖe dzesi ko o: eɖo nu si ƒe dzesi kplẽ la ate ŋu awɔna. Nuŋlɔŋlɔʋi si mate ŋu adze nu le dziemɔme la, eɖo nu be “Nymchat client, post-quantum kplẽ meɖe o” eye wòatsɔ NIP-44 si le nu ŋɔŋlɔ me, si nuŋɔŋlɔ kplẽ ɖekawo ate ŋu axɔ la. Enye nuɖomɔnu si nye nɔnɔme ɖeka, eye wònye nu si wòɖo ɖe ŋɔŋlɔ me be numewo ƒe dzesiwo ƒe nya nye: dzesi si nuŋɔŋlɔ aɖe mate ŋu adze nu la, eɖo nu be drɔdrɔ̃ ate ŋu awɔ, keɖe dɔwɔwɔ aɖe mate ŋu awɔ o. Kplẽ si nɔnɔ ɖeka mate ŋu awɔ o la, eya ƒe nuɖomɔnu le nu aɖe si me kplẽ meɖe o gbãtɔ, elabena nu si wòɖa la, eɖoe ɖa ɖa eye nuɖomɔnu aɖe meɖe ɖe nuŋlɔŋlɔʋi kple nɔnɔ siawo me.

4.1 Nyeɖeɖe ɖo nu, eye wònye ƒe ƒe ƒiaɖeƒe

Nu si ƒe nɔnɔme le ɖiɖi aɖe ko ɖe nuŋutɔ: Nymchat client katã la ɖe ŋkpɔkpɔ la ɖe nu, ɖe nu siwo le agbe le post-quantum me ko o, eye key field la meɖo ɖe nu ɖe nuɖeɖe me o. Eyae le nɔnɔme etɔ̃ siwo le ɖekae siwo le nɔnɔme eve ɖe o:

Wòkpɔ́Gᴐme nyeɖe nukpɔkpɔ
Nuntɔnɔnu kple kofonɔ ɖeka Nymchat, eƒe dzesi le post-quantum ƒe dzesi ŋu. Lãmãle
Ŋusẽ, kplɔ̃ ɖe ɖeka o Nymchat, klasikal ko — post-quantum wɔm ɖe, alo gadome si mese idanti ƒe ɖatakaka ɖe o. Nu si ƒoɖo NIP-17
Aƒeɖeɖe mêle Client si woxɔ ɖoɖo ɖe o. Enyui be Nostr alo Bitchat dɔwɔla ɖeka la wònye. Klassiki, eye ŋutivi akpa ɖeka

ƒetɔ̃ƒetɔ̃ ƒe nɔnɔme ɖe ƒoɖofɔ me ɖe ɖeka me la, nuɖeɖe nye ŋutinyanye. Kadiɖeɖe mɔkpɔkpɔ nye amesi kpiɖe nuɖeɖe si ɖo be amesi trɔ la Nymchat ɖe, si nana be trɔmɔ ƒe nɔnɔme la ado nuɖeɖe ɖe protokoli ƒe nɔnɔme ɖeka me ƒe ɖeɖe si wòavaɖe ɖe amesi si wòate ŋu aɖe ɖe mɔ la.

4.2 Dɔwɔnu si meleyi gbɔɖe la ɖoa ɖe ɖom.

Ɖeɖe la meɖo ɖeɖe o: ɖeka ɖeka na ɖokpɔɖokpɔ ɖeka, eye ɖeka si wòɖo ɖe asi ɖekae nye eɖokui. Enye esi nana ɖokpɔɖokpɔ ƒe dɔwɔnu la be wòawɔ dɔ, eye enye esi nana be dɔwɔnu si le ɖeɖe me o la nɔa trɔ̃ me ne eɖo ɖe asi. Dɔwɔnu si ɖe kadi si eɖokui wòɖo ɖe asi la axa ɖe dɔwɔnu lɔlɔ̃ la ŋu eye wòana be dɔwɔnu ɖeka ɖeka ɖeka wowɔ dɔ le kadi si dɔwɔnu bubuwo medze nu o ŋu.

Eye, masin si xɔa be gɔmeɖeɖe aɖe le eme gake si melɔ̃a be wòawɔna eya la, wòabia ɖe anyi o. Emenye wòɖu o eye wòvɔ̃ la ɖe nuŋutetia ƒe ɖɔ me o: eɖea xɔa ametɔmegbeɖeɖe sia ɖeka sia ɖeka si ƒe kɔ le eŋu la, eye wòatɔ̃a eɖe ɖe anyi ɖɔ nuŋutetia ƒe ɖɔ me ɖɔ, eye wòafia nu na dzɔdzɔɖuɖu be wòatsɔ eɖo eŋu. Ŋlɔ̃ɖi nye nuɖida si le nyataklẽ me na masin aɖe si melɔ̃a be wòaxɔa le eƒe ɖeɖe ŋu.

5Nuklẽɖeɖe kple ɖeɖeɖe ƒe ɖɔɖɔɖe

Ẹklentwo nya nɔnɔme (keys) ƒetɔwo ƒe nɔnɔme le nu dua siawo me. Ŋku si le ɖe dunya me la tae kplɔa amewo si ẹklent la le woƒe nuƒoƒo ƒe kple amewo siwo le kpɔkpɔɖe me la — nuƒoƒo siwo le ɖe dunya me kple kpɔkpɔɖe me amewo — ɖe nya siwo woɖoa la ɖe nu siwo le ɖe dunya me gɔme nu. Bia ɖeka si le ɖe dunya me le ɣeyiɣi si wòɖoa nu la, eye wòaɖo ɖe ɣeyiɣi 2.5 la; ne eɖo gɔme le o la, nuƒoƒo la le ɖe nu siwo le ɖe dunya me gɔme (classical) nu, eye nye nu si le ɖe dunya me la nye nu si le ɖe dunya me le post-quantum megaxɔ ɖe dunya me megbe la, eye nye nu kpeɖeɖe (failure mode) bedikpɔɖeɖe la.

Eblaɖeɖe si meblaɖeɖe la woɖo eɖokui me na minitɔtɔ̃ ɖeka, eya menye ɖe nuɖeɖeɖe la me o. Dzɔdzɔɖe si ɖo meɖeɖe ƒe dɔwɔwɔ ƒe meɖeɖe ɖeka, alo si va kple browser-extension login ku ɖe dokeɖeɖe ƒe dɔwɔwɔ si le dɔme me la, la, wòɖo eɖokui ɖe quantum dɔwɔwɔ me la dɔwɔwɔa ƒe nuŋɔŋlɔa me la, eye “ɖeɖe” si woɖo eɖokui me ɖe ɖeɖe la la, wòna wòɖo classical encryption ƒe dɔwɔwɔ me la nuŋɔŋlɔa ƒe asesiɖeɖe me la.

5.1 Heyvi downgrade lɔ̃ɖiɖi meɖe o.

Didi kplɔ̃ɖeɖe nuɖeɖe tsɔ ɖe nusi ɖeka ɖome:

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

Ŋusẽ si wòɖo ɖe xɔxɔ siwo wòatlɔ̃ ɖe nɔme la me le eme o, dzesi siwo wòatlɔ̃ ɖe nɔme la me le eme o, eye dzesi aɖe si ŋusẽɖeɖe ate ŋu aɖe ɖe be mɔ si fofɔ la nɔa ɖe be wòadɔ ɖe nɔme o. Wòɖo dzesi la ɖe xɔxɔ me. enye kpɔkpɔkpɔ la, eye wogbe ɖe ɖe. Nu si vi ɖe dziɖiɖi siwo wo ɖe dzesi alo siwo wo ɖe ɖe dzesi la gbɔ la, nye be xeke la le ɖeka ɖe kaba — nu si le tɔ nɔ ɣe be nu sia me la — eye wònye be xeke siwowo wo ɖe dzesi kple ɖeka ɖeka la le ɖem ɖe nu siwo wo ɖe dzesi mate ŋu aɖo ɖe ɖe dzesi la ta.

Eƒe ɖeɖe la ɖo gɔme fɔ ave eye wònye gɔme gã wu: klient la ɖe hybrid ɖe ɖe ɖe ne eɖu xɔɖuɖu la, eye xɔɖuɖu ɖu sia nye nusi ɖeya fia be ame si nya nu la ate ƒa ɖe xɔɖuɖu me nu. Menya nuɖeɖe aɖe o si ƒe nu le eme be nuƒoƒo ɖo ɖe quantum megbe na ame si mate ƒa gbeɖe le eme o.

6Agbagba dɔwɔwɔ la

Nymchat ɖe NIP-44 ƒe ta o. Eɖe e ƒe nu ɖe e la. NIP-44 ciphertext siwo ɖe ɖo ɖo o la nye eƒe gɔme la, eye ML-KEM keys la ɖe AEAD bubu gɔme ɖe e la:

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)

Xɔxɔ siawo ɖe ɖe kpe ɖe ɖe be na wò nànya xɔxɔ siwo le eme la: nuŋuta si le dzi gbãtɔ la ɖoa NIP-44 ciphertext ɖe, eye wò nàɖa eɖe la, eɖo ECDH ɖo. Nusi kɔmatsi si ɖu secp256k1 la ɖoa xɔxɔ si le emegbe la ɖe, eye wò ɖo ML-KEM ƒe ɖokui gbɔ la; ML-KEM ɖu la, eɖoa nuŋuta si le dzi gbãtɔ la ɖe eye NIP-44 ɖoa ɖokui ɖe. Nu sia sia si le eme la, eɖo eƒe dzɔɖzimɔ ɖe:

Encapsulation wɔna ɖe nu vevie ɖe xɔta ɖekaɖeka dzi. Vi si xɔna la ML-KEM key nɔna vevie, gake xɔta ɖekaɖeka ɖoa ciphertext ɖekaɖeka gbɔ eye wòɖoa ɖekaɖeka... kem_ss. Enye nya si wòɖo nonce ɖeawo ɖe awu, de nu si wòɖo e ɖe awu (randomize) la gbãtɔ, si wòɖo ɖo: ChaCha20-Poly1305 (key, nonce) eve siwo wɔna ɖekae la wòvɔ, eyeɖe la ɖokui nye nu mɔ̃mɔ̃ ɖe nuɖeɖe ɖeka ɖeka me, eye dzɔna be anyi eve aɖe meɖeaɖi o.

6.1 Nati lッewo ɖe ɖe ɖe me

Dɔ bubu la nye kpe xɔxɔ sia me ɖo ɖeka na nuƒoƒo dzesi ɖeka eye wòɖe nya la ɖo NIP-44:

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

Dɔwɔɖi sia le ɖeɖe me be eƒe dɔwɔwɔ nye cryptography. Enye dɔɖoli ɖeka si le eƒe dɔwɔɖi me: eƒe xɔxɔe nye ecdh_x, ECDH ƒe output ƒe x-coordinate si meɖeɖe ɖe o, be dzesi ƒe nu — eyeƒe browser extension (NIP-07 ƒe agbalẽ) alo ʋiaɖuɖuɖu kpɔkpɔ kɔ̃ aɖe (NIP-46 ƒe agbalẽ) nɔa nu sia ɖemɔ o. Eɖoa NIP-44 ɖe ame si eɖe ɖeɖe la ƒe nuame eye wòɖea ciphertext ɖe ɖe ame la, eye nu si ve vie nye nu ɖe dzesi (key) la ɖe haia si me wòɖeɖe la meɖe o.

Emaɖe nu si wòɖo secretwo ɖe ɖe ɖekae me la, eɖe nu siwo gbɔna ɖe nu siwo ɖoa identity key la ɖe signer me ɖe nu, eye nye nu siwo le ɖeɖe ɖe nu wu loa nye nu siawo, eye nu si wòkpɔ ɖe key derivation la dzi la menye nu si ate ŋu aɖo nu o. Layering ɖoa nu si le ɖe nu sia nu la ɖe: NIP-44 manɔ ɖeka eye nu si ɖoa identity key la ɖe la, eye signer ɖe la, nye nu si wòɖaa nya la, eye KEM ƒe laƒe la, wòkpɔ ɖe recovery code si client la ɖo ɖe la me. Signer logins nye nu siwo le post-quantum ƒe ɖekawo le agbagba siawo katã me.

Bandwidth ƒe dɔwɔʋe nye nu gã aɖe, eye wònye nu ɖidi o. ML-KEM ciphertext nye 1,088 bytes eye wòlezaa mɔɖeɖe ɖeka sia ɖe me, wogbe ɖe base64url-encoded si nye 1,451 characters; AEAD si le ɖe nuŋutɔ me la ɖe 16-byte Poly1305 tag ɖe, eye wòɖɔ NIP-44 payload si wòɖe e la ƒe ƒe ɖe kumba ƒetɔ aɖe. Mɔɖeɖe si nye 50-character la ɖɔ̃na hãna 176 bytes ɖe 1,712, eye mɔɖeɖe si nye 2,000-character la ɖɔ̃na hãna 2,820 ɖe 5,238. Nu si le gɔme la nye kumba 1.5 KB ɖe mɔɖeɖe ɖeka me, wònye mɔɖeɖe gã alo ɖidi la, eye nye nu ƒe dɔwɔʋe nye be wozã encapsulation ɖeɖe ɖe ɖeka sia ɖe menɔa, eye wòade shared secret ɖeka si wozãna kumba la o.

6.2 Nu siwo ƒoɖim eɖeɖe

La pq2. Prefix la ɖe dɔwɔwɔ nya ɖe ɖe ɖe me: eɖokui ƒe nɔnɔme la ɖe eɖokui, ele be kliɛ (client) la nɔa eƒe mɔ si wòawɔ nya ƒo dzesi (decrypt) la ɖe dzi ɖe payload la ɖe dzi ɖa, mɔ si wòawɔ nya la mɔ o, ele be eƒo tag ɖe dzi alo ɖe eɖokui ɖe dzesi si xɔla (peer) la ɖe dɔwɔwɔ me la. Nusiŋlɔƒo si melɔ prefix la o la, eɖe payload la me ɖe mɔ ɖe mɔ, mɔ si wòawɔ nya la mɔ o, eye mɔnuwo siwo woɖo ɖe dzesi (seal) ɖe eɖokui me vava siawo, wofia NIP-44 gɔme ɖe mɔ ɖe mɔ ɖe mɔ, eye wòɖea dɔwɔwɔ kɔkɔe ɖe ɖe me o.

Nukanye si me ɖi

ML-KEM decapsulation wòwɔ be wòado nɔ̃ o: ne ciphertext si wòɖo ɖe ɖi aɖe le fiaɖe aɖe me la, Fujisaki-Okamoto transform la ɖua secret aɖe si ƒe nɔnɔme ɖo ɖo o (pseudo-random) eye wòado error o. Aleɖeɖe, key si ɖo o la ɖu KEM layer la me o — eɖoa ɖe ɖi be HMAC la ƒe nɔnɔme ɖo ɖo o le NIP-44 me, eye nya sia ƒe nɔnɔme la ɖo ɖo be key si ƒo le classical gɔme la ƒe nɔnɔme ɖeɖe me. Ame siwo ɖoa dɔ la ɖea nya siawo ɖe ɖi ɖeɖe me, aleɖeɖe nu si melã la ɖa nu kpeɖeɖe aɖe o. Eye nye nu siae ɖoa Section 9.1 ƒe candidate list la menɔ ɖe dɔ me: client aɖe ɖea key ɖeka ɖeka ɖo dɔ eye wòɖoa NIP-44 ɖe be nye ɖe nào le.

6.3 Afɔkpɔkpɔ ƒe ɖe mɔ̃ mɔ̃

A NIP-17 ƒe agbalẽ ŋutinya kplu nye nu NIP-59 ƒe agbalẽa ŋutɔnu ƒe dɔwɔwɔ: nubabla si ƒe ŋkɔ méɖo eŋu o, si wòɖo eŋu ɖe edziɖeɖe ƒe ŋkɔ ƒe kplɔ̃ (nu ƒe dɔ ƒe dɔ 13) dzi, ɖe eŋu ɖe kplɔ̃ si wòɖo ɖeɖe ɖe xɔxɔ ɖeɖe na xɔxɔ ɖekaɖeka (nu ƒe dɔ ƒe dɔ 1059) dzi. Lolo si ɖu edzi kplɔ̃ ƒe ŋkɔa ɖeɖe dzi, Nymchat ɖometɔa nya siawo ɖe ɖeka ɖe, ɖeɖe ɖekaɖe ƒe dɔwɔwɔ tɔɖeɖe me.

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
Encryption ekatɔwo eve siawo nye hybrid, ɖekaɖeka ƒe ML-KEM encapsulation ɖekaɖeka le wo gbã. Gbã ƒe ekatɔ la le nɔnɔme si wotsɔ ɖe anyi ta, ɖeɖe na be ƒeƒeƒeɖe la maɖe dzesi mɔ si kplɔ̃ nya la ƒe dzesi.

Signer ƒe ɖeɖe ɖeya gbɔ gbɔtɔ ko. Seal la ɖe ɖe signer la ƒe nu vevi NIP-44 me — dɔwɔnu ƒe dɔ la mava nɔa kadi si ɖea e la ŋu o — èya ɖe eŋu be wòadze deka ɖe ɖeka me le eƒe tsɔtsɔ me o. Esia ɖe dzɔdzɔ la dzi o: seal la va ɖe eŋu ɖe gbɔ gbɔtɔ koman nu si ɖu e gbɔ la me, eye nu si ɖu e gbɔ la nye nu si nuɖoɖuɖuɖu ɖoa ɖe. Ŋuɖuɖuɖu si ɖo nu siwo ɖo eŋu ɖe la, ɛɖo eŋu be wòvul ML-KEM tso seal la va nɔ anyi be wòadzɔɔ hekpɔ o.

7ƒome kplesiãwo ava ɖekaɖeka nɔƒeɖeɖe

Blɔmeɖeɖe nuɖeɖe si nye ciphertext ɖeka o. Nuɖeɖe si woti ɖe plaintext me la nye nuɖeɖe ɖeka si woɖo ɖe blɔmeɖeɖeame nuame ɖe ame sia ame, eye nuɖeɖe sia sia woɖo ɖe ame sia ƒe ML-KEM key me. Ame si wopublik ɖe key ɖe kpakpa la nya "hybrid wrap"; eye ame si wopublik ɖe key ɖe o la nya "classical wrap".

Esia ɖea akɔntu ƒe kuxiwo dzi si gɔmeɖeɖe si me nɔ ɖe nu si me wònye la. Ne dɔwɔla ñãƒẽƒetu ɖe ɖeka ƒe dɔwɔlawo me zu nu si nye dɔwɔla ƒe nu sia nu sia la, nubabla lae nye o evelia nu le ɖeɖe me. Agbagba ɖo nu si ƒoɖo ɖeka si le ɖoɖo ɖeka me le nu siawo ɖekaɖeka me, eye nuŋɔŋlɔ la le ɖeɖe me ɖe gbɔ ɖe gbɔ... ɖe sia ɖe ɖekae nye.

Nymchat ɖe nu siawo ɖe nu le fan-out la me — ɖe nuɖeɖe si le eme la menye nu si wòɖo nu ɖe nu o si wòɖe nu ɖe nu ɖe nu le wraps ƒo ɖe dzesi la me ɖe nu — eye dzesi la ɖe nu be “quantum-resistant le ƒome 10 me 8 me” eye wòase be nuŋutɔ si le eme la ƒe ɖokunɔnu la menye nu si wòɖe ɖe nu o. Edome si nuɖeɖe aɖe meɖe o, si nye nɔnɔme si ƒo ɖe dzesi le nu aɖe... meɖoe ɖe nye ɖekaɖeka ƒe mesaj (ame si ɖe la ko wòawɔ nya siwo ɖo ɖekaɖeka me), interface la ɖe nu si ɖo ɖeka ko, eye wòmedze be eɖo nu katã o. Ne ame ɖe nu be eɖo nu katã ɖe eɖokui ƒe kopi ɖeka ko me la, eya enyata si gã wu le mesaj la ƒe nu katã ŋuti.

7.1 Nu si xɔɖoɖo la ɖe nu

Agbeɖiɖi la ɖe nyatɔ ŋu la ŋutinya, eyaɖe software si ɖe eɖe la gbɔ o:

Dɔnuɖuɖu la ɖo ɖe dzesi la ɖe ɖokpe la dzi, eye menye nu si nɔ trɔ trɔ ɖe nu si nɔa nya ɖe veɖe ɖe nɔnɔme bubu la gbãtẽ la me o. Ŋkɔ-ŋkɔɖeɖe (ciphertext) si le eme ya me la menye nu si nɔa ɖokpɛ wu nu si le eme ya la, eye nɔnɔme (interface) si ɖo dzesi gãwo ɖe veɖe ɖe nu si nya veɖe fia la la le nu si melɔ̃ la ɖe bytes si le kplɔ̃ (relay) la dzi.

Nuɖugãwo ƒe ɖokonyanuɖuɖu siwo le ahi le eŋu la, woɖoa eŋu ve deɖeɖe be woɖeaɖaɖu siwo le ahi la ɖe eŋu o: mesajia si wòɖo nuɖugã ƒe dɔwɔwɔ la ɖokpɔkpɔtɔ me la, eƒe ɖokpɔkpɔtɔ kɔkɔ me le o, eye mesajia si wòɖo nuɖugã ƒe dɔwɔwɔ la si me nuɖugã aɖe aɖe me la, eɖoa 'partial' ɖe.

8Nukpɔkpɔwo siwo ɖo wò ɖe wò ɖokui

Wɔnɔnu geɖe si klient la ɖoa ɖe eŋu la, woɖe ɖe eƒe ɖokui ƒe hãmɔ̃ me: ɖoɖo siwo le ɖoɖo me la, dɔwɔnu ƒetia la, ƒũme dzesiwo la, kple xɔxɔ nuɖeɖe ƒetia la. Woƒe xɔxɔwo la nymchat-pq-root ʋɔʋɔɖuɖu la ɖesiaɖe, si meɖeɖe ŋu o kplɔ̃ ɖeɖe ŋu si ɖesiaɖe la ɖea ko.

Nu siawo nye taɖi si dɔwɔɖidi gɔme ɖe gbãtɔ la. Settings blob alo archive row ɖeka nɔa gbɔ ɖeka me ƒe ƒe geɖe, eye nye nu si agbagbaɖaɖa si ɖu dɔ ɖe "harvest-now-decrypt-later" si nɔa ɖe eƒe ƒeɖe me la. Wònye nu wu nuɖeɖe si wòɖo kple nu si le user ƒe dzedzeɖe me kaba.

Ɖekepɔkpɔ ɖeka ɖo sia ƒe dɔwɔwɔ nyatakakpɔ dzi ma xɔɔ. Kopia si ƒoɖo eɖokui dzi la, ƒoɖo [blank] ƒe nuŋɔŋlɔ me. ɖe sia ɖe Akpakpa si le akɔntu la me, eye akpakpa ɖeka ɖeka ɖea nu si wòava bu le list si eƒe ɖeɖe ɖea la me, eye akɔntu la ɖoa ɖe ɖe ko si woameɖe dzi kple nu si woameɖe ɖeɖe la me. Nu bubu ɖeka ɖoɖo ya la hã, eɖokui ƒe dɔwɔnuwo la hã naxɔ ɖe eƒe ɖokui me — dɔwɔwɔ mate ŋu aɖu ɖe dɔ me (silent failure) sia ƒe nɔnɔme si Sekshɔn 3.2 ɖɔ ɖe nu bubuwo dzi ɖe ɖeɖe ƒe nɔnɔme vɔ̃tɔ me.

Nukpɔkpɔɖeɖe si ɖo nu be wòɖe

Meɖeɖe si ɖuna ŋkɔɖuɖu la gake mate ŋkpɔɖeɖe la o, menya nu si ɖe kplenyi si wòɖo tso ŋkpɔɖeɖe la me ɖi gake o, eɖokui ƒe dɔwɔwɔwo ɖe. Nenemae nye nu si woɖo ɖe eme, menye nu si woɖu ɖe o, eye enɔna ɖe klɔ̃ 3.3 me be wòava ɖo nu si wòɖoa ɖe e ɖo me, eye wòagaɖe ŋkpɔɖeɖe yeye ɖe o: ŋkpɔɖeɖe evelea menya nu si le eme la ɖe gake wòadie ŋkɔɖuɖu ƒe kplenyi la ɖe ƒe eve me ko. Ka ɖeka me dɔwɔla la ɖo e ɖo o, meɖeɖe la dɔ wòana — eeye nu si eɖo kplenyi na eye wòɖoa kplɔ̃mɔ.

Agbalẽ si ɖe browser extension alo remote signer (NIP-46) la me lai, nsec aɖe si wòatɔ̃na ɖe nya bubuwo me me lai, gake eɖu recovery code la, eye le Section 6.1 ƒe dɔwɔwɔ si ɖea dzesiwo (layers) ɖe ɖeka ɖe ɖeka me la la gbɔ, eyi nya sia gbɔ ɖe post-quantum ƒe dɔwɔwɔ la gbɔ: signer la ɖea NIP-44 ƒe dzesi la ɖe nenema si wòwɔna ɖeka si, eye client la ɖe dzesi ŋutlɔ̃ la ƒe kpleɖeɖe ɖe eme ɖekaɖeɖe. Agbalẽ siɖe nɔmenu sia la nye dɔwɔla si wòɖe ŋutlɔ̃ ɖe agbagba ɖekaɖeɖe me.

9Dziɖiɖi

La epoch Counter si le derivation ƒe dɔ me lae ɖoa ɖuɖum ɖom be wòadzu ɖe xɔƒome dzesi xwe la. Eƒe nɔnɔme si ɖeaɖea la ɖoa xɔƒome dzesi ƒe ɖeka ƒe ɖeka si ƒo gbɔgbɔ ɖeka me kple kpliɖeɖe si ɖo ɖe ɖaɖa me dzolo; mɔɖodziwo ɖua xɔƒome dzesi xwe la ɖo nu si wòatɔtrɔ la me. Ewɔ ɖe nya sia ƒe nɔnɔme ŋu la, ɖuɖum la ɖo nu be wòanye nu ɖe dɔwɔla la ŋu ɖe ɖeɣi: gbɔgbɔ la ɖeaɖea ɖe ɖeka ɖe dɔwɔla ƒe nɔnɔme me, eye ɣeyiɣi lae ɖoa ɖuɖum la.

9.1 ɣeyiwo bubuwo ɖokui ɖe, eye akplẽnuɖe kɔmeɖeɖe ɖe dzɔ kaba o.

Nu abeɖeɖe vɔ mɔ ɖe anyi wuɖe wò ɖa ɖe dɔme le kpeɖeɖe ɖeleɖe me. Kliɛnt la ɖoa dɔmeɖeɖeɖewo tso ɣeyiɣi ɖeleɖe me ɖo ɣeyiɣi ɖeleɖe ɖe 3 me, na be nuɖeɖe si le ɖe dɔme kaba ɖe ɖeleɖe la me la, eƒe dɔmẽla la le kpeɖeɖe si nye ɖeleɖe le ɣeyiɣi si wòɖo e la me dzi la gbɔ.

Wɔ nu si mɔ̃la lae nye nu si wɔtɔ̃ ƒe dɔwɔwɔ lae nye vɔ̃ɖi gbɔ: esiawo madze gbeɖe la, wɔtɔ̃ ɖeka ɖeka gbɔ, nusi le dɔme la gbɔna ɖu. Nusi xɔtɔ ko la, wònye nu si wowɔ nu vevi le ʋuvɔ̃ ƒe agbe me, ɖe ɖe nye be, mɔ̃la si ʋeɖeɖe medze nu aɖe gbeɖe la, eƒe dɔwɔwɔ la le ŋutɔ wu nu si ƒe ɖeɖe medze nu ɖe dzigbe la (Section 10.5).

10Nu si ne sia medzɔ ɖe me o

Ŋutinya si ɖea dɔwɔnu si dɔwɔnu la ɖo dɔme ɖe asi ko la, mela ɖe dɔwɔnu ɖe nye e, eye ɖe nɔnɔme si le interface ƒe nɔnɔme dzi wu nu si e nye la, le nu si wòanya ɖe e ta la gbãtɔ. Wo nu siwo le ɖe e ta la le dɔwɔnu sia ƒe ɖeɖe ƒe nuŋɔŋlɔwo gbãtɔ.

10.1 Ɖeɖe la nye nuɖeaɖe aɖe ɖeka, eye eye e la nye nu si meɖeawo aɖe menye.

Esia nye dɔwɔnu sia ƒe nuwɔna gbãtɔ. Nya si le Kplɔ̃ 2 me be ʋusrãla nena nu ɖeka ɖo ɖe eɖokui me la meɖo: nsec ɖeka menya post-quantum key la ɖe gɔme o, ɖeɖe nye be nu si wowɔna le anyi alo nu ɖokui bubu menye wòanya eɖokui o. Ne meɖokuiɖekaɖe menya root la ɖo o eye Kplɔ̃ 3.2 ƒe wraps la meɖo be wowɔ ɖe gɔme o, nu siwo woɖo eɖokui ɖe root-derived key la me la meɖo be woawɔ ɖe gɔme o. Esia meɖo be woawɔ escrow o eye woɖo ɖeɖe be amegã aɖeke menya nu ɖo ɖe eɖokui me o.

Hand-eye transfer ko ɖɔdzɔe ɖeka wònye, enyi nu si xɔ̃ wu nu si wòɖo nɔ gbãtɔ me. Amegbetɔ si meɖoa nu si... nympq1… Code anywhere wònye ɖeka ko, ɖe nuƒowɔƒe ɖeka dzi, eye ne wòɖu ɖe nuƒowɔƒe sia dzi la, wòanya post-quantum message katã, settings blob katã, eye archive row katã siwo le eŋu ɖe ɖe la. Nu... nsec eɖo nu; eyae nye nusia dɔwɔwɔ kaba sia ɖe eŋu ɖe.

Mɔ siwo wokpɔ ɖe ɖeka megbe la meɖo nu si nuɖeɖe ƒe ƒeƒe la gbɔ kple mɔ siwo woɖokui ɖe ɖe la gbɔ. Nukʋɔ̃la la ɖu mɔ si ƒe dɔwɔwɔ la le mɔ ɖe la dzi, gake esia ave ɖe dɔwɔwɔ la gbɔ ɖe be dɔwɔwɔ la ƒe ŋutinya la le nu si eƒe mɔ ɖaɖa la ƒe ŋutinya gbɔ—nukpleɖe, gbɔgbɔ si wòɖo ŋu ɖe woƒe dzesi me la, ewɔ be dɔwɔwɔ la katã ƒe ŋutinya la nɔa nu si gbɔgbɔ la ƒe ŋutinya gbɔ me, eye mɔ si wokpɔ ɖe la nye nu si nukʋɔ̃la si ɖu nu ɖeka eye wòɖu eŋu veɖe veɖe la ɖu ɖe woɖu ɖe eƒe ɣeyiɣi me la dzi.

10.2 Ŋutinya ɖeɖi, si nye nu si nye nu etɔ̃ eye wònye xɔ̃nu ɖeɖi.

Nostr ƒe dzesiɖeɖe katãnye nye Schnorr le secp256k1 dzi, eye wòkpɔ ɖe ɖi le sia me. Nuŋɔŋlɔla si nye kɔm (quantum computer) le eƒe asi me la, nàɖa dzesiɖeɖewo eye wòatlɔ ame ɖeɖe ƒe dzesiɖeɖewo ɖe eŋu le ɣeyiɣi ɖeka me. Nu si hybrid key exchange la ɖu ɖe eŋu nye ɖe nu gblẽɖe ɖe ɣleti nu: nuŋɔŋlɔla si ɖoa nu ɖe ɣeyiɣi sia me la, mate ŋu aɖo nu ɖe eŋu be wòɖe nu la le ɣeyiɣi bubu me o. Enye madzigbe be nuŋɔŋlɔla si nye masina la le eƒe asi me la mate ŋu aɖa dzesiɖeɖe o. Nu si ƒom sia nye ɖeɖe le aplikasionuwo me ɖe ɖo ɖo — lɔ̃ŋu (padlock) ƒe dzesi la ɖe dzesi ƒe dzesi (authentication) ɖe, eye tsetse (shield) ƒe dzesi la ɖe nuŋɔŋlɔlɔƒeɖeɖe (confidentiality) ɖe, eye wo nye dzesi ɖekaɖeka ɖe ɖo ɖo ɖe be nuŋɔŋlɔlɔ la mate ŋu ɖe nu sia ɖe eye nu sia mate ŋu ɖe nu sia o.

Eɖe nu si Section 4 ƒe kplɔɖɔɖɔ la ɖo ɖo kple be wò. Nu si le npub kple ML-KEM key ƒe ɖokui yi la nye secp256k1 ƒe dzesi, èya be ame si ate ŋu be wòadɔ nya siawo dzi la ate ŋu be wòanya key bubu ɖe eɖokui ƒe. Nu si kɔ ɖe nu si wòava le eme la menye nu ɖeka si ƒo ɖe nu si le eme la gbɔ.

10.3 Ŋɔŋlɔ si ƒe xɔsewo

Nùɖatia ɖu ame si ɖe nù la ɖe nu, eye ame si ɖu nù la le nu ɖeka ƒe... p tag, nuŋuti ƒome, kple ɣeyiɣi si nuŋutaɖuɖu si le la ɖome le dzi. Emede nuɖomɖomɔ be nuŋuti aɖe le, ena ƒe gɔme, eve be ɣeyiɣi wòɖuɖu la o. Traffic analysis ɖe dziɖuɖu sia ƒe nuɖuɖu ɖekaɖe ɖe kpɔ o.

10.4 Mesh si ɖe ɖi me la

Nymchat ƒe Bluetooth mesh transport nye nuʋɔʋu ɖekaɖeka si ƒe handshake ɖekaɖeka ɖo, eye dɔ sia kɔ nu sia la o. Mesh ƒe kplɔ̃wo nye nu siwo ɖo ɖo.

10.5 ŋutikakawo womɔ ɖe ɖe vɔ

Wɔƒoɖi si woɖo ɖe eŋu ne nuɖiɖi ƒe ɖoɖo la le kɔɖoɖo me la, eƒe kɔɖoɖo la la ɖekaɖe le eme. E le eme viɖe eye wòate ŋe be woade nu kɔ le eŋu dzɔdzɔ o. Kpɔkpɔ la le nuƒoɖi siwo le eŋu ne kpléɖoɖo la le agbagba ƒe nuɖiɖi ƒe kpléɖoɖo me la me, ale o si nuɖozɔɖo la ɖo ɖe eŋu.

11Nu bubu siwo wònye nuɖidi me

Va ɖe egbɔEfɔna nenu?
Ɖe quantum megbe klu ɖe ɖokui klu ƒe nu me. Wobɔ. Derivation la nye algorithm si ame katã xɔna le nsec dzi, eye quantum adversary la ɖea nsec la ɖe npub siwo wopublik ɖe la gbâ, nea nu be beɖeɖe (classical) la beɖeɖe ne la, wòagbe ɖe post-quantum la gbɔ ɖe e la gbâ. Eɖe distribution problem katã si le nuwɔnu siawo me eye eɖe ɖe ame aɖemɔ gbɔ o. Section 3.1.
Tsɔ root la ɖe neaŋu la ƒe máyáyewo bubuwo dzi le NIP-44 dzi. Nu ɖeka la le nu bubu ƒe ɖokpe dzi eye wòɖo nu ɖeka gbɔ. Gbɔkpɔ (root) si woɖe ɖe ŋu ɖe nuŋɔŋlɔ si ɖo nu ɖokpɔtɔ (classical-only encryption) gbɔ la, wòɖo nu ɖe ŋu ɖe anyi eye ʋeye nuŋɔŋlɔ sia ƒe kplɔ̃ (key) siwo laɖe tso ɣe megbe la, wòɖo nuŋɔŋlɔ sia ɖe tso ɖe wo nu gbɔ; eye nye nu xaxlẽla (adversary) si gbɔ gbɔkpɔ (root) la tso ɖom ɖe ɖom la nye nye nuŋɔŋlɔla sia.
ML-KEM klu-ɖeɖe si wodeɖe ɖeɖe le nuɖeɖe ɖeɖe me. Memeɖe. Mekatubububuiwo la ɖi decapsulation keys wuɖuɖuwo wu, eye xɔxɔɖeɖe ɖeka ɖe nubabla ɖeka sia ɖemɔ ƒe dzesi la me la menya wo katã. Amewo la le dzesi si wotsɔ ɖe awurɔ̃ me veɖe la me dze dzesi, eye mekatubububui bubuwo la menya ɖe eƒe dzesi la. Dzesi (root) ɖeka ɖe nubabla ɖeka sia ɖemɔ ƒe dzesi la, siwo le Section 3.2 ƒe ƒeƒeƒe la me la, nye enye eƒe dzesi si ɖe eƒe dzesi la.
Lom root la ɖo PIN ƒe asi me. Mesi. PIN si ƒe nya ɖekaɖeka ɖeɖewo ɖe ɖeka me nye bit ɖea 13 ƒe nu ɖe offline attacker si nắm ɖe wrapped row la gbãtɔ. Ne wòɖo e ɖe 256-bit paths eve me la, ewɔna be wòɖo nu nyatakaka ɖe nu si gɔmeɖiɖi wrap la ƒe dɔwɔwɔe ŋu.
Npub la ɖe nu ɖeŋu be wòadɔ kplɔ̃ ɖua kple ɖea. Bytes 1,184 menye ŋkɔ si wofia ɖe kple ame bubuwo la o, eye wòawu nu ɖe Nostr client siwo le ɖe adrese si wofɔ ɖe be bytes 32e la tseɖeɖe gbɔ.
Afɔnu dɔwɔnu si nye mɔnu Eɖo ɖuɖu si network la ƒe nuɖeɖe nye be eɖea ɖe ɖuɖu la ŋu ɖo. Ame si le lookup la ɖe ŋu lae ɖo nu ŋu be ame kae ate wòaxlẽa nuŋutã la.
Blɔ kplɔ̃ la ɖe ŋutɔnu ɖeka ɖeka me. Eɖe nu ɖe nu o: ame si ɖe eme la ɖɔ nu la ame si ɖu nu ƒe kã si le nya si gbã gbã me, si nye nye ɖe nya la, viɖe nya si gbã ɖeɖe aɖe si náɖu e ɖe.
Lalanyɔ agbeɖeɖe akpamɔ̃ɖeɖe Eɖea nɔnɔme si me ame ateŋe aɖe ɖe dɔ na ɖe dunya si xɔ̃ ɖe ɖe. Ame si ƒo dɔ si ateŋe aɖe amadzedze ƒe ŋusẽ ɖe ɖe, ɖo ɖɔwɔwɔ ƒe nɔnɔme si ƒo ɖe eƒe nɔnɔme me.
Kuantum ɖeɖe ɖe nu ko, klasikal afɔ ɖe o Eɖu ƒe ƒewo ƒe secp256k1 xɔxɔ ɖe eŋu ɖe nu nuɖeɖe si xɔgbɔ wu ƒe ŋu. Nu si le ɖeka me (hybrid) dze ɖe eŋu ɖe eŋu ɖe... ɖe eƒe nuwɔnu ɖeka ko la. wo ame eve la ɖu ɖa.

12Dɔwɔwɔ ƒe ɖeɖe

Nymchat ɖe dɔwɔwɔwo ɖekaɖeka eve siwo ɖe dɔ ɖeka o na construction sia — aɖe le JavaScript me na web application la, eye aɖe bubu le Dart me na mobile applications la, si ɖe ML-KEM-768 port aɖe si woɖo ɖe ɖokui ɖeɖe me la. Dɔwɔwɔ eve siwo nye dzesi ɖeka la, eyemegbe la, nu mɔ̃̃ (liability) nye nu, eyaɖe woɖoa dzesi siawo ƒe nuŋɔŋlɔ me be woanya, nenye woanya ɖeɖe o.

Dart ML-KEM dɔwɔwɔ nu la wòɖeɖe ɖi tso nu si nye official la dzi. NIST ACVP dzesiɖeɖewo si ƒe ŋutinyawo wòdziɖe na ML-KEM-768 (ML-KEM-*-FIPS203) — 25 key-generation, 25 encapsulation kple 10 decapsulation nɔnɔwo, woɖe woɖe dzesi (suite) me. Wo nyawo nya (vectors) si NIST ɖaɖe be woate ŋu aɖo dzesi be dɔwɔwɔ la ɖo, gake menye dzesi ko si nye be kɔmɔwo (clients) ɖo ɖeka me o. Eye nu else, dzesi (test vectors) siwo ɖo ɖeka me — seed derivation, encapsulation, payload ƒe dzesi ɖeka kple ɖeka, kple complete gift wraps — ƒoɖo be JavaScript reference ƒe dɔwɔwɔ me eye dzesiwo hã woɖe dzesi. Root secret la ɖo dzesi sia ƒe dɔwɔwɔ me, menye ɖe eɖo o: root si ɖo seed me, root si ɖo keypair me, root ƒe public fingerprint, kple key, nonce kple dɔwɔwɔwo siwo wòɖe kple outer layer la nye dzesiwo ɖokui me, gake kɔmɔwo eve la ate ŋu ayi ɖeka me o be nu nɔnɔ si nympq1… Kɔɖu ƒe nɔnɔme alo nu si gbɔ wònye nye baits si wòɖo ŋɔŋlɔ la ɖe eŋu gbãtɔ. Ne nɔnɔmeɖɔɖɔ ɖea le dɔwɔwɔ siawo ƒe nɔnɔme me la, dɔwɔwɔ ƒe nuɖomemewo ɖu, eye wòanye be wòatsɔ ŋɔŋlɔ si klienti bubu la meɖe menye menye.

Nuɖeɖeɖe (fingerprint) la ƒe ŋkɔ la ƒo le nu siawo me. Enye nu si ɖoa meɖeɖe (device) ƒe gɔmeɖe (root) si nye ƒe ɖe la kple nu bubu la ɖe ɖe, eye client si aɖo nuɖeɖeɖe bubu la me la, wòaɖo nu si le ɖoɖo me la be nu aɖe le gbeɖe o — eye le Section 3.3 ƒe nɔnɔme me la, wòado gɔmeɖe bubu eye wòakpata dzidzɔɖeɖe (identity) la. Enye du si wɔna nya sia le bubu gbɔ ta.

Nymchat nye ɖu ƒe ɖeka le AGPL-3.0 ƒe asi me. Kriptografia ƒe ŋutinya si wɔla sia me ɖe kplam nye js/nym-crypto.js kple js/modules/pq.js le web client la me, eye lib/core/crypto/ kple lib/features/identity/pq_registry.dart le mobile kplenɔ̃wo la.

Gbɔ nuɖeɖe si ƒo eye si me xɔxɔnuwo meli la, va ɖu nusiaƒe dzesi ƒe ƒe ŋlɔ̃ quantum ɖu ɖe nuɖodorɔ ɖe ŋu.