Kalan sɔgɔma: kɔrɔ-kɔrɔ tɛ quantum tɛ kɛ

Nymchat tɛknisiyali sɛbɛn

Nymchat la Post-Quantum kili kɛɲɛ

ML-KEM-768 kɛnɛ kɛdɛw ka kanyira Nostr de, saba wala tala de tɛ fɛ, k'a bɔ sira dɔ la a tɛ kɛnɛ fɛn dɔ ye.

Nɔginɛ 1.0 Auju 2026 A bɛ Nymchat 3.74+ ye kɛ

Messenger kan kuuntamu kɔfɛ sinu kɛ hakɛ kɛ de ye, a ye cryptography hakɛ te ye. Fo-fɛn kɛnɛw bɛ namba kɛ, librariw bɛ la. Hakɛ kɛnɛ de ye, mɔgɔ kelen kelen bɛ a fɛ... sekɔnde kili koli, n'a ye nyetigi tɛ kɛra tɛ kɛra fɛɛrɛ tɛ an ka kɛ kɛra a bɛɛ ye. Ni kɛlɛ kɛnɛ ye a fɔlɔ — a koli bɛɛrɛ kɛ kɛra bɛɛ, cogo min na a bɛ ka dɔgɔtɔ ni ɲiniyara kɛra ni a bɛɛ ye, n'interface bɛ ka kɛ n'a sɔrɔ la — n'a kɛlɛ kɛnɛ kɔfɛ la, a sɔrɔ tɛ sɔrɔ kɛ kɛra kɛnɛ kɛra.

1Kolo

Nostr kɛnɛ kɛnɛ kanikanw bɛ nɔgɔya kɛ... fɛ. NIP-44 ye, n'a bɛ kɛli kɛli kɛ. O kɛli de bɛ plaintext kɛsɛ — ChaCha20 bɛ HMAC-SHA256 tag ye, a bɛ kɛ... HKDF (RFC 5869) — quantum computer ye kɛnɛya kɛ o la ye kɛ; Grover's algorithm ye symmetric key ye kɛnɛya kɛ square-root la, n'a fɔ 256 bits ye o la. O kɛnɛ-fɛ ye A b'a fɔ kili kan na elliptic-curve Diffie-Hellman bɛ ɛ kɔrɔ secp256k1, ni Shor's aligoritami bɛ discrete logarithm sɔrɔ kɛ kɛ kɛnɛya la. Private key sɔrɔ kɛ a public key la, a bɛ kɛ kɛnɛya bɛɛ la k'a fɔ k'a sɔrɔ kɛ kɛnɛya bɛɛ kɛra k'a sɔrɔ.

A kɛnɛ kɛra kɛnɛ kan, a tɛ dɔrɔn kɛ n'a fɔ k'a fɔ ko masini kɛnɛ bɛ kɛ. Mɔgɔ bɛ kɛnɛ kan k'a tɛgɛ, a bɛ kɛla kɛla kɛ n'a fɔ k'a sɔrɔ ta, a bɛ a kɛla kɛla n'a fɔ ko masini bɛ kɛ. O bɛ kɛ n'a fɔ ko n'a taga kɛ, o bɛ kɛ mɔgɔ kɛnɛ kan. O ye dɔrɔn dɔ ye, k'a fɔ ko post-quantum key exchange bɛ a dɔrɔn dɔ ye, n'a ye kɛnɛ kan ye, o tɛ se k'a taga k'a sɔrɔ ko masini kɛla kɛla.

1.1 A kɔrɔ nin fɛn bɛ a ye.

Mitigasyon bɛ se ka kɛ nɔgɔya de fɛ: post-quantum key encapsulation mechanism kɛ kɛ kɛnɛ-kɛlɛ (classical exchange) fɛ, so kɛlɛ-mɔgɔ k'a fɔ ka kɛlɛ tɔɔ bɛɛ dɔmɔ k'a sɔrɔ nɔgɔya bɛɛ. Nymchat bɛ ML-KEM-768 (FIPS 203). O bɛ ɲɛnɛ kɛ kɔrɔ sɔrɔ fɛrɛ kɛ:

Ɲinnyɛ

Alice ka kɛlen kɛ ninƝɛ la, i bɛ fɛ dɔ fɛ: a npub. Post-quantum exchange kɛra ka dɔsɔ, i bɛ fɛ sisan nɔgɔya dɔ — a ML-KEM public key. O key bɛ fɛɲɛ, n'a fɔ i bɛ a yɛrɛ kɛ cogo min na i ka a faga a ma ka kɛ nin fɛɛrɛ la?

Npub ye a ye kɛɲɛ ye. I bɛ a kɛ kɔlɔsɔ kɔ, i bɛ a fɔ kɛnɛ-kɛnɛ ye, o sɔrɔ i bɛ a dɔn a fɛla dɔmɔgɔw fɛ, o ye ko bɛɛ ye i ka fɛn dɔn kɛ i ma fɛ. ML-KEM-768 kɛlɛ-fɛn (public key) ye 1,184 bytes ye. A tɛ se ka fɔ kɛnɛ-kɛnɛ ye, a tɛ se ka i kura (username) kɔ, o tɛ se ka QR code kɔ dɔmɔgɔ kɛ identity min ye 32 bytes ye.

Sɔrɔ kɛra fɛɛrɛ ye. A ka fanga kɛrɛnkɛrɛn kɛra ka kɛli saniya bɔ kɔrɔ saba kɛli kɛliw, nka an ka ka kaafu kɔfɛ ye a kɔrɔw ka sanjaw ye:

2Kɛnɛya mɔgɔya

Kɛnɛya ninnin nian ye fɔlɔ la, n'a fɔ k'a dɛsɛ tɛgɛ kɛla dɔ ni fɛɛrɛ k'a kɔrɔ k'a sɔrɔ k'a kɛ code kɛ.

  1. Kɔrɔ dɔ dɔ kɛ sɔrɔ o la. Nostr kɛlɛkaƝaw bɛ nsec dɔ kɛ kɛ dɔ mɛn kɛ kɛ. Fɛɛrɛ dɔ fɛɛrɛ dɔ bɛ se ka i ka kɔrɔ fɛɛrɛ, nka nsec bɛ kɛra dɔ min bɛ se ka a sɔrɔ, a tɛ se ka fɛɛrɛ dɔ fɛɛrɛ dɔ kɛ. Section 3.1 k'a fɔ ko a tɛ se ka a sɔrɔ sisan — nsec la post-quantum key bɛ se ka a sɔrɔ, a tɛ se ka post-quantum kɛlɛya kɛ kɛ — nka kɛnɛya kura bɛ se ka nsec dɔ kɛ dɔ mɛn kɛ kɛ: key dɔ kɛ, identity dɔ kɛ dɔ kɛ, a bɛ nsec fɛ kɛ kɛ, a bɛ fɛɛrɛ dɔ fɛ kɛ kɛ, nka a bɛ se ka a dɔ sɔrɔ kɛ ka a dɔ sɔrɔ. Section 10.1 bɛ a fɔ ko a bɛ se ka i ka kɔrɔ fɛɛrɛ fɛɛrɛ.
  2. Kɛlɛya tɛ. Server kɛnɛ ye telen, bɛ se ka i dɛmɛ k'a fɔ ko ɲɛɲɛ bɛ kɛ a ye a jɔgɔ ma. Server bɛɛ min bɛ kɛ a fɛ, bɛ kɛ sɔngɔ ye a la ka kɛ kassi k'a ka kɔrɔ kɛ.
  3. Sɛli dɛ, ɲɛmɔgɔ kelen. Nostr tɔgɔ bɛ kɛ client kɛlɛw bɛɛ la fɛɛrɛ kɛlɛ la. Kɛmɛ (key) bɛɛ ka dɔn bɛɛ kɛ kɛɛtigi la client bɛɛ la, ni yɔrɔw bɛ kɛmɛ ye ka kɛ client bɛɛ la, o yɔrɔw tɛ se ka di kɛlɛmɔgɔ ye, o kɛlɛ (feature) bɛ kɛ dɔn dɔn kɛ ka kɛ.
  4. Kɛla tɛ kɛ. Ni a bɛ "i ye ciphers juman ye fɔ?" kɛ kanyɔrɔ la, o ye fɛn kɛmɛ ye tɔgɔmɔ bɛ se ka o fɛ ka kili kɛnɛ ye kɛ. Design de ka kɛrɛn kɛ fɛn kɛnɛ dɔ kɛ.

3Mali tigɛ kɛnɛya

A kulu ye nin ye: ML-KEM decapsulation kili bɛ kɛ kili nɔgɔ dɔ la, o kili tɛ ka fɛɛa kɛ kili sɔrɔ. Ɲɛmɔgɔ dɔdɔ bɛ kili kɛlɛ kulu dɔrɔn sɔrɔ, a bɛ kɛ dɔrɔn:

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)

Root bɛ ka dɔn ka kɛla ma nka nsec ka kɛra ala: bech32 mɔgɔ bɛ se ka dɔn kɛ ɲɛ-fɛ ye nympq, so a fɔ ko nympq1…, nsec kɔ ninsun na identity screen kɔnɔ, reveal interaction kɛra kɛra kɛ, control kɛɛ kɛɛ kɛ, a tɛ log kɛ, a tɛ lanyan kɛ fɛɛ kɛ ninsun kɔnɔ. A tɛ password ye, a tɛ login ye. A ye key material ye, a bɛ kɛɲɛ dɔ kɔnɔ, nsec kɛɛ kɛ kɛ.

Sali bɛ kɛ tɔgɔna kɛ kɛ dɔnniya la, ko ɲɛmɔgɔ kɛnɛya de bɛɛ tɛ se ka fɔ kɛnɛ-fiyɛ-fɛ bɛɛ kɛ. A epoch Counter bɛ kòkò kɛ (Sɛkisi 9).

3.1 Mun na key bɛ tɛ se ka bɔ identity key la.

A yɛlɛma kura ye keypair sɔrɔ u bɛ kɛɲɛ ɲɛmɔgɔyari la:

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

A bɛ kɛ nɔgɔya la kɛ nɔgɔya la, u bɛɛ ye kɛnɛya ye: nen kɛnɛ ye kɛ kɛnɛya ye, nka nsec bɛ kɛ kɛnɛya ye; device bɛɛ bɛ sigi kɛ kɛnɛya la, kɛ protocol tɛ sɔrɔ kɛ kɛnɛya kɛ ye; identity bɛɛ la announcement bɛɛ bɛ sigi kɛ kɛnɛya la, nka device bɛɛ tɛ kɛ kɛnɛya la key ye; ka key bɛ kɛ kɛnɛya la kɛ kɛnɛya fɛ, nka client bɛ kɛ kɛnɛya la kɛ kɛnɛya ye k'a fɛ kɛ kɛnɛya ye.

Béenw bɛɛ tɛ kɛ kɛnɛ ye, kow kɛrɛn de ye. Shor's algorithm ka npub kɛlɛ na, o b'a fɔ nsec. Seed derivation ye algorithm kɛlɛ de ye nsec kɔrɔ. Nka, mɔgɔ de bɛ kɛlɛ kɛ classical kɛlɛ na, o b'a kɛ post-quantum kɛlɛ kɛ kɛrɛn na k'a kɛ HKDF kɛlɛ kɛrɛn de ye. "Harvest-now-decrypt-later" kɔrɔ — o ye kɛlɛ kɛrɛn de ye fɛn bɛ fɛ ka dɔɔni — kɛlɛ bɛ kɛ kɛrɛn de ye, o tɛ kɛ nin ye.

Kanu bɛɛ bɛ sɔrɔ kɛra a la.

ML-KEM decapsulation kili ka bɛ entropy la, nsec la tɛ se ka a dɔn, ba k'a sɔrɔ ka a dɔ classical-only encryption ye.

O sariya kɛlɛsan fɔlɔ bɛ kɛlɛ kɛ bɛɛ n’a bɛɛ kɛlɛsan fɔlɔ. Ɲɛmɔgɔ kura kɛ kɛnɛya kura kɛ masini ka sɛnɛ ma NIP-44 dɔnkɛ kura ma, o ye kɛlɛ kura ye kɛlɛ fɔlɔ ye: mɔgɔ bɛɛ o dɔnkɛ san fɛ, o kɔrɔ ma, o ye kɛlɛ bɛɛ ye. O la de ye k'a fɔ ko, sariya kura kɛlɛ-fɛn ye kɛlɛ kura ye, n'a fɔ ko “a dɛmɛ k’a kura dɛmɛ.”

3.2 Ka root sɔrɔ ɲini-mɔgɔ masini tɔw na

Section 2 ka kulu 3 — dɔnni kɛlɛ kɛ, kɛlɛmɔnyɔ bɛɛ — fɛɛrɛ tɛ se ka o sɔrɔ o kɔnɔ, sababu ye, kɛnɛ tɛ dɔnni bɛɛ kɔnɔ dɛ mɔgɔ bɛɛ kɛ ye. O sɔrɔ fɛɛrɛ de bɛ se ka o kɛ, n'a fɔ, yiri kɛra kɛlɛ kɛra kɛlɛ: mɔgɔ bɛ a yiri o... nympq1… kɔdi kɛ ɲɛ kɛ.

Sigi bɛ dɛmɛ ko nympq1… nsec kɔɔrɔ, ka ɲɛ k'a kɛ panɛl dɔ kɛra kɛ dɔ kɔrɔ la. O ye kɛ kɛ kɛ kɛ ye. Cɛ kɛ kɛ kɛ ye tɛ n'i t'i sɔrɔ kɔdɔ (code) o kɛ, Section 4.2 b'a fɔ.

Manukali transferi kɛ kɛ kɛnɛya ye, a tɛ k'a bɛɛ kɛ fɔlɔ min ye. Section 3.1 kanika b'a fɔ ko root tɛ se ka taga classical-only encryption kanika kɛ kɛ, n'a fɔ kɛlɛ-kɛla bɛɛ b'a kɛ k'a kɛ automatic — relay kɛnɛ kɛlɛlɛ kɛ, identity key kɛnɛ kɛ — o bɛ a kɔrɔya. Mɔgɔ kɛ kɛ k'a bɛɛ kɛ ye, o de ye lakanan kɛnɛya ye.

Format bɛ kɛnɛ kɛ nɔɲɛ dɔ (wrapped path) ye: record dɔ bɛ se ka wraps dɔw tɛgɛ, o dɔw bɛ kɛ AEAD blob ye kɛnɛ (key) dɔ fɛ, u bɛ se ka kɛ a fɛ k'a dɔrɔn kɛ kɛnɛ (device) dɔ kɔfɛ — passkey PRF output ye, fɔ k'a fɔ. A tɛ kɛ sisan, nka a kɛ ka kɛ... nympq1… Kòdù kɛ kɛnɛya kɛ dɔrɔn ye. Sekisiyɔ̃ 10.1 b'a fɔ a sanen.

O kɔrɔ fɛɛrɛ bɛ a ye kɛlɛla tɔgɔ kɔnɔ. nymchat-pq-root, ni a bɛ sɔn cogo minna kɔnɔ tɔw ye. A ka kɛnɛ tɛ dɔ kɛ dɔ ye, nka a bɛ kɛ kɛnwɛ dɔ kɛ ye: a bɛ dɛmɛ na sakannɛ dɔ kura dɔ ka dɔn ko nin ɲɛfɛ bɛ tɛmɛnɛ dɔ kɔnɔ, dɔ nu bɛ dɛmɛ na a kɛ fɛn tɛgɛrɛ dɔ sɔrɔ (Section 3.3).

Sɛlɛ-kalan: kɛnɛ dɔ tɛ se ka kɛ ɲɛ kili la

O nymchat-pq-root Kategori ka kɛ ayi ML-KEM kɛlɛ kɛnɛ fɛ kɛra. O kɔnɔ kɔnɔ o kɛnɛ kɛlɛw dɔ bɛ, so a kɛlɛ fɛ kɛra o kɛnɛ kɛlɛ fɛ, a ye kɛlɛ ye a kɛla bɛ kɔnɔ kɔnɔ: kɛlɛ dɔ tɛ se ka a fɔ, a sariyara ye mɔgɔ ye. A bɛ kɛ kɛlɛ ye — NIP-44 kɛ a ye a ye — o tɛ se ka kɛ kɛlɛ tɛ kɛ. O ye cogo dɔ ye k'a fɛ k'a kɛ kɛlɛ kɛ, a bɛ se k'a kɛ: o kɔnɔ kɛnɛ dɔ tɛ kɛ, k'a fɔ ko kɛnɛ bɛ.

Settings kɛlɛ bɛɛ kɔfɛ, a bɛ se ka bɛ, ni a ka la fɔ kɛ fɔlɔ-fɔlɔ key kɛ. O ye kɛlɛ dɔ de ye, a ye kɛrɛkɛrɛ kɛ kɛ, a ka fanga fɔ kɛ.

3.3 Fɔlɔ ni a kɛ kɛ

A fɔlɛ kɛlɛ kɔ, ta k'a tɔgɔ nɔgɔya dɔ sɔrɔ, client bɛ kɛ fɛlɛ dɔ kɔ:

  1. Se ɲɛɛɲɛɛtigi nymchat-pq-root tɔrɔn.
  2. Kàrà kà fɔ, n ko la bɛ se ka tila a ye — a ye kɛla ni fɔ ko ni ɲɛmɔgɔ bɛ se ka quantum kɔfɛ kɛ.
  3. Kɛlɛ ye fɔra, nka ni tulu ye tɛ a se ka a fɔla ye. — root nɔgɔ tɛ kɛ, n'a fɔ k'a tɛ kuma bɛɛ sɔrɔ kɛ. A fɔ mɔgɔ ko a ka sɛbɛn [the] k'a dɛmɛ device nɛ ye. nympq1… kɔdi masini fɛ a bɛ se kɔ.
  4. Tɛ dɔ t'a la — kulu sɔrɔ, kuma dɔ dɛsɛ, fɔ, n'a bɛ so nympq1… Kɔdɛ kɛ denmɔgɔ ma cogo kelen ka o bɛ se ka o dɔɔni dɛmɛ.

Kolosi saba ye kolosi ye dɔrɔnya sɔrɔ kɛra dɔ ye, n'a ye kura ye k'a fɔ ko kɔrɔw bɛ kɛ ka k'a fɔ ka k'a taga dɔrɔn dɔw ma. Masini dɔrɔn dɔ ni dɔrɔn dɔ ni a bɛ k'a fɔ ko a bɛ k'a kɛ root ye, a bɛ root dɔrɔn dɔrɔn dɔrɔn kɛ identity dɔ kɔrɔ la, n'a ye kɛɲɛ ye k'a fɔ ko kɔrɔw bɛ se k'a kɛ k'a fɔ.

4Kɛlɛya kɛlɛn

Kili walaya kili fɛɛrɛ kɛnɛya kɛlɛyá la, a bɛ kɛ kɛnɛ-fɛɛrɛ de kɛ. NIP-01 ɲɛɛtɛ — tɔgɔ 30078, tɔgɔlɔ 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 ye o ye, relay bɛ event dɔɔtɔɔn (kind, pubkey, d-tag) kɔrɔ la dɔn, so ka kɛ kɛlɛya kɛ kɛnɛ kɛ a kɔfɛ la. Mɔgɔ bɛɛ ye kɛnɛ record ye, o delesi ye "Alice kɛlɛya Alice ye" bɛ kɛ fɛn dɔɔtɔɔn kɛnɛ ye, bɛ kɔli kɛ list bɛɛ kɛ ni fɛn bɛɛ ye.

Sininɛ ye kalan ye. Event bɛ identity key kɛ kɛ nkaɲɛ kɛ, nka kàɲɛ kɛlɛ k'a fɔ "ni ML-KEM kɛlɛsin bɛ ni npub kɔnɔ" bɛ k'a kɛ npub kɛnɛya k'a la. Encapsulation kɛlɛsin kɛnɛ kɛ bɛ sɔrɔ ka secp256k1 kɛnɛya nɔgɔya. Sɔrɔbà u ka kɛ o kɛ se ka KEM tɛ kɛ o la.

Kuma fɛɛrɛw bɛ kɔrɔ. Saba kelen NIP-40 ye Kɔlɔmɔ, ka dɔgɔlɔ kɛ nɔgɔn bɛɛ la, a bɛ kɔrɔsɔ kɛ mɔgɔ min bɛ kɛ kɛnɛ la, a tɛ mɔgɔ min min kɛra kɛ. Ɲini tɛ kɔlɔmɔ kɛ; a kɔrɔ kuma kɛra kɛ kɛ.

Announcemant dɔ n'a tɛ kɛra kɛnɛya kɔnɔ, a bɛ kɛ k'a fɔ k'a tɛ kɛra kɛnɛya dɔ kɔnɔ: mɔgɔw bɛ NIP-44 sisan fɔ, a bɛ kɛ mɔgɔ bɛɛ ye a dɔn, client bɛ kɛ post-quantum exchange kɛ k'a republish kɛ k'a sɔrɔ kɛla. Nka, kɛ n'i ka kɛ fɛlɛ kɛla fɛn dɔ kɛ k'a fɔ kɛla — o fɛnw bɛ kɛ k'a fɔ kɛla quantum-resistant kɛ — a tɛ fɛn dɔ kɛ. Delivery tɛ fɛn dɔ kɛ, fɛn n'i sɔrɔ kɛla tɛ se k'i dɔn, i ka kɛ k'a fɔ kɛla.

O kɛlɛya ye kɛlɛ kɔrɔ kow ye, tɛ dɔn kɛ kɛlɛ kɛnɛya ye. O tɛ dɔ nɔgɔya tɛ, tusu dɔ bɛ kɛlɛ dɔ kɔrɔ kɛ: sigi-sigi dɔ bɛ fɔlɔ, kɛlɛ, walla a sɔrɔ kɔrɔ kɛ, a bɛ kalan dɔ ka sɔrɔ kɛ sɔrɔ mɔgɔ ye kɛlɛ dɔ tɛ kɔrɔ kɛ, kuma kuma dɔw bɛ fɛrɛ, dɔn ye tɛ dɔ dɔgɔya. Saba bɛ o kɛlɛ fɛn bɔ, ka sira-sira bɛ tusu bɔ sɔrɔ tɛ munusubanya kɔ n'a ye n'a ye dɔn.

Ké fɛlɛ bɛ a fɔlɔ dɔnnen ye. Kɔlɔ ye pk2... ni nùnu bɛ kɔrɔ la, a tɛ saba ye: a bɛ payload format fɔlɔ dɔn nà kɛnɛ bɛ kɛ kɛ kɛ nɔɔ fɛ. Taga dɔnniya u tɛ fɛlɛ dɔn nà, a bɛ a fɔ "Nymchat client, post-quantum kɛnɛ tɛ" ni a bɛ NIP-44 kɛ nɔɔ fɛ, nà bɛɛ bɛ se ka a di. O ye kɛlɛ ka di ye, ni a bɛ se ka kura fɔ ko fɔlɔ nùnu bɛ kɛ kɛlɛ ye: u tɛ dɔn kɛlɛ bɛ se ka kɛnɛya la, a tɛ se ka kɛ dɔnniya la. Kɛnɛ u tɛ se ka kɛ kɛ nɔɔ ye, a bɛ ka kɛnɛya la bɛ nɔɔ fɛ, ko kɔrɔ u bɛ sɔrɔ o bɛ lɔ ni mɔgɔ tɛ se ka dɔn kɛ kɛ nɔɔ fɛ.

4.1 Tɛnɛ bɛ sariya kɛ, ni saba fɛn kɛlɛ.

Dɔgɔrɔ dɔ dɔgɔya dɔ, nka a ka ɲinɛ bɛ kɛ: anisa bɛ kɛ Nymchat client bɛɛ ye, post-quantum kɛ la dɔ de ye, a ye bɛɛ de ye, k'a kɛ key field bɛɛ tɛ se ka bɛɛ kɛ, a bɛ se ka dɔ ye. O bɛ fɛn saba sɔrɔ, a tɛ fɛn niana de ye:

A sɔrɔFɛɛrɛwɲɛmɔgɔya sɔri
Kelelen dɛ kuma Nymchat, a bɛ se ka quantum kulu kɔfɛ kow kɛ. Mali-mali
Kuma, kili tɛ fo Nymchat, kɛlɛ kɛnɛ kɛ kɛ kɛ — post-quantum tɛ kɛ, o kɔrɔ tɔ kɛlɛ kɛlɛ tɛ kɛɲɛɲɛ kɛ ɲɛmɔgɔya dɔnnyɛ fɛ. Kɛlɛyaba NIP-17
Kuma tɛ Client tɛ ɲɛɲɛ. A bɛ se ka Nostr o Bitchat kɛla dɔ ye. Kala de, ni kɛnɛya sira dɔ.

Row saba kɛ row nani ye ka fɛɛrɛ kɛ dɔrɔn. Announcement ka kɛla tɛ kɛla ye kuma sɔrɔ kɛla ye ka dɔn ko a bɛ Nymchat kɛ, o bɛ a kɛ a sɔrɔ ka dɔ dɔrɔn ka dɔ bɛɛ tɛ ka kɛ cross-protocol wrap ye, mɔgɔ la a tɛ a dɔnɛ kɔ.

4.2 Fɛn u tɛ se ka fɛnkɛnɛ bɔ ye, a bɛ dɔgɔ-dɔgɔ kɛ.

Tɔgɔ dɔ dɔnɔ bɛ se ka kɛ a fɛ: tɔgɔ dɔ kɔrɔ dɔ kɛ, kɛɲɛ kɔrɔ bɛ kɛ. O de bɛ dɔ dɔ kɛ dɔ dɔ dɔ kɛ, nka o de bɛ dɔ kɛ dɔ kɛ tɛ dɔ dɔ tɛ dɔ dɔ dɔ kɛ fɛrɛ dɔ sɔrɔ o bɔra. Dɔ kɛ dɔ kɛ dɔ dɔnɔra kili dɔ a ye a ye, o bɛ kɛ kɛ dɔ dɔ dɔ dɔ kɛ dɔ kɛ dɔ kɛ, nka a bɛ dɔw bɔ kili kɛ dɔ kili tɛ se ka a fɔlɔ.

Nka masini min b'a dɔn ko root dɔ bɛ, nka a tɛ se ka a la, a tɛ kɛ n'a fɔ ko fɛn dɔ bɛ. A tɛ kɛnɛ, a tɛ application lakari kɛ: a b'a sɔrɔ kɛlɛ bɛɛ ye a ka kɛlɛ-fɛ bɛɛ ye, a b'a tuuru kɛ kɛlɛ fɛ, a b'a fɔ mɔgɔ ko a ka link kɛ. Kɛnɛ ye dɔrɔn ye fɛn min tɛ se ka kɛ identity ye.

5Kunu-fɔlɔ ni a ka jɔlɔ ka fɔlɔ

Kominayigiw bɛ tɔɔw kɛliw dɔn nɔgɔ ni nɔgɔ ye. Abɛnɛmɛnɛ (subscription) bɛ jɛ mɔgɔw bɛ bɛn kɛtɔ kɛra (kalan-kɛw ni kɛrɛ-kɛrɛw) ye, nka fɛɛrɛ kɛla kɛ mɔgɔw bɛɛ ye kuma dɔrɔn ye. Mɔgɔ fo kɛnɛ-kɛnɛ (peer) min bɛ kɛ kɛ kɛnɛ kɛnɛ ye, query bɛ kɛ kuma dɔɔn-fɛ, saniyɛ 2.5 la; ni a tɛ dɔn, kuma bɛ kɛ classical ye, o ye kɛla k'a kɛ post-quantum bɛɛ tɛ kɛra, a tɛ sɔrɔ-fɛɛrɛ kɛnɛ ye.

Yeelen kɛnɛya ye kɛ kɛmɛ dɔmɛ kɛ, k'a tɛ kɛ kɛmɛ tila. Mɔgɔ min bɛ masini kura fɛlɛ, wala mɔgɔ min bɛ browser-extension login ka kɛ local key ye, a bɛ post-quantum kɛla kuman kɛ la; nka yeelen "tɛ" ye kɛ mɔgɔ ye sisan kɛ classical encryption la a ka kuman kɛ la.

5.1 Mun na downgrade attack tɛ?

Yiriwaga kɛlɛya bɛ kɛ kissa dɔ ma:

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

Kɛɲɛya n'a bɛ kɛ kɛ la tɛ, algorithm kɛla kura kɛla kura tɛ, n'a tɛ k'a sɔrɔ mɔgɔ dɔ k'a fanga kɛla. K'a fɔ la. ye nyagan kɛlɛ kɛ, o bɛ kɛɲɛn. Alo tɛ k'a fɔ mɔgɔw ma k'a tɛ sɔrɔ, kɛlɛ kɔrɔ ye ko a bɛ kɛ kɛlɛ kɔfɛ kɛlɛ ye — o ye sisan sabali dɔ ye — tɛ k'a fɔ ko k'a sɔrɔ k'a sɔnka kɛlɛ dɔ k'a fɛɛrɛ kɛ.

A kɔrɔ bɛ kɛ kɛnɛya kɔnɔ, nka a bɛ fɛɛrɛ kɛ kɛnɛya la: klian bɛ hybrid yaga. kɛ nɛ A bɛ kili kɛ, n'a fɔ ko kili kɛ kɛ kɛlalɛ ye ko a jigi la bɛ kili kɛ sɔrɔ ye. A tɛ se ka kɛ kɛ kura-tɛgɛ (post-quantum) kɛlɛ kɛ mɔgɔ ma u tɛ se ka a dɔn ye.

6Kɛlɛya jɛkulu

Nymchat tɛ NIP-44 kɛ fɛn ye. A bɛ a ka kɔrɔ bɔ. NIP-44 ciphertext tɛ sɔrɔ-kunu ye, o ye kɔnɔn-kɛlɛ ye, nka ML-KEM bɛ AEAD kɔrɔ ye a ka kɔrɔ ye:

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)

Kankan kelen kelen bɛ se ka sɔrɔ k'a dɔn ka ta k'a ye mɔgɔ dɔn: kanu dɔgɔtɔ fɛn dɔ tɛ kɛ NIP-44 ciphertext ye, nka a ka la mɔgɔ bɛ a kɛ ECDH ye. Quantum bɛnni dɔ min bɛ secp256k1 fɔ, a bɛ inner key sɔrɔ k’a kɔrɔ ML-KEM kɔrɔ; ML-KEM fɔ min ye, a bɛ kanu la kɛ, nka NIP-44 bɛ tigi. Kuma kelen kelen bɛ a bɛɛ dɔgɔtɔ a tɛgɛ:

Encapsulation bɛ kɛ mɔgɔ bɛɛ fɛ kɔnɔ. ML-KEM kɛlɛ bɛ mɔgɔ dɛmɛ-mɔgɔ ye kɛmɛya kɔnɔ, nka mɔgɔ bɛɛ ma kɛ ciphertext dɔ dɔ kɛ, nka a bɛ kɛ dɔ dɔ... kem_ssO ye kɛra ko nonce ka sɔrɔ k'a tɛ fɛɛfɛɛ kɛ bɛ a ka nɔgɔya kɛ: ChaCha20-Poly1305 (key, nonce) kɛlɛya kɛ kɛra kɛ bɛɛ kɛra kɛ, nka kɛɲɛ (key) bɛɛ kɛra kɛ mɛsɛji (message) bɛɛ ye, n'a fɔ ko kɛlɛya bɛɛ tɛ se ka kɛ kɛra kɛ.

6.1 Sebin jɔngɔlɔw ka sɔrɔ kɛ

A yɛlɛmanya ye siriƝ kɛɲɛ dɔ kɛɲɛ dɔ dɔmɔ kusu kɛɲɛ dɔ kɔnɔ ka o dɔna NIP-44 ma:

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

O kɛlɛya bɛ sigi cryptography kɛlɛ kɛlɛya ye. A bɛ kɛlɛya dɔ dɔ: a bɛ se ecdh_x, ECDH kɛtɛ k'a x-coordinate kɔrɔ, kɛmɛ ye — ni browser extension dɔ (NIP-07 ye) ka fiyere kɛla (NIP-46 ye) tɛ o mɛn fɛ. A bɛ NIP-44 kɛ u ka fɛ, ka ciphertext dɛmɛ, o ye k’a fɛ ka dɔgɔtɔ k’a kɛlɛ kɛ k’a dɔ kɛ k’a dɔ kɛ k’a kɛlɛ tɛ application la.

Minenw n'a fɔla, a bɛ bɛɛ login ka dɔgɔtɔ mɔgɔw bɛ kɛnɛya kura (identity key) sɔrɔ signer kɔ, k'a fɔ mɔgɔw bɛɛ kɛnɛya kɛw, k'a fɔ kura fɔlɔ (key derivation) bɛɛ tɛ se k'a la. Sɔngɔlɔ bɛ kɛ sɔngɔlɔ k'a fɔ: NIP-44 bɛ mɛn, a bɛ fɛ mɔgɔ bɛ kɛnɛya kura sɔrɔ k'a fɔ signer mɛn, k'a fɔ KEM bɛ kɛ recovery code mɔgɔ bɛɛ sɔrɔ k'a fɔ. Signer loginw ye post-quantum mɔgɔw ye bɛɛ fɛ.

Sugu ye bandwidth ye, u tɛ kɛli kɛli kɛ. ML-KEM ciphertext ye 1,088 bytes ye, u bɛ kuma bɛɛ la, base64url-encoded kɛna 1,451 characters; AEAD kɔrɔ ye Poly1305 tag 16-byte ye, u bɛ NIP-44 payload kɛ nɔgɔ kɛ dɔrɔn na kɛ. Kuma kɛna 50 ye, u bɛ 176 bytes la ka dɔɔn 1,712, kuma kɛna 2,000 ye k'a dɔɔn 2,820 la ka dɔɔn 5,238. Kuma bɛɛ kɛnɛ ye kɔrɔ 1.5 KB ye, kuma kɛnɛ kɛli kɛli ka nɔgɔ ye, u ye kɛ nɔgɔ ye k'a tɛ dɔn kɛ dɔrɔn na, k'a tɛ dɔn kɛ kɛ dɔrɔn na.

6.2 Payloads ɲɛ a dɔrɔn dɛmɛ kɛ a ye

O pq2. Prefix bɛ munu fɛlɛsi kɛ sisan-sisan: a ye a ye fɔɔrɔ kɛ, so client bɛ a ka fɔlɔ kɛ kɛrɛnkɛrɛn kɛ a ka payload fɛɛrɛ kɛ, a tɛ tag fɛ wala a bɛ a ka peer kɛlɛya kɛ. Kan-kɛ-kɛ-la tɛ prefix kɛlɛya se kɛ se kɛ, a bɛ payload kɛlɛya se kɛ, a tɛ kuma kɛ kɛ n'a fɔ a bɛ kuma kɛ kɛ. Kuma kɛnɛw, post-quantum kɛ se kɛ se kɛ, a kɔnɔ kuma kɛnɛw bɛ NIP-44 kɛ sisan-sisan kɛ, a tɛ kɛmɛ la.

Sɔnɔ kɔrɔ dɛkanɛ

ML-KEM decapsulation bɛ kɛ n'a tɛ kɛlɛ ninnu ye: cipherteke kɛnɛ ye, Fujisaki-Okamoto transform bɛ deterministic pseudo-random secret kɛ n'a fɛ ka error kɛ. Nka kɛlɛ kura bɛ tɛ KEM layer la dɔɔni kɛ — a bɛ kɛ NIP-44 la HMAC failure ye, o bɛ kɛ kɛlɛ kura (wrong classical key) ye dɔɔni. Callers bɛ ninnu dɔɔni dɔɔni kɛ, nka kɛlɛ bɛ tɛ kɛnɛ (distinguishing signal) ye fɛ. O bɛ Section 9.1 la candidate list ye kɛlɛ ye: client bɛ kɛlɛ kura kɛ kɛlɛ kura kɛ, nka NIP-44 bɛ a fɔ ye o ye nin ye.

6.3 Tɔgɔ kɛnɛn kalankɛn dɔɔtɔ

A NIP-17 ye mɔgɔ mɔgɔ ma mɛnɛ ye... NIP-59 ye kalan-fɛ: kuma tɛ sigila, a bɛ sigila-kɛli (tɔgɔ 13) kɔnɔ sigila, n'a sɔrɔ, a bɛ sigila-kɛli (tɔgɔ 1059) kɛ kuma kɛlɛwɔrɔ kɔnɔ. Siginya kan, o bɛ sigila-kɛli kɛra dɔrɔn kɔnɔ, Nymchat bɛ o dɔn-dɔnaw bɛɛ dɔnkili kɛ, dɔɔnin dɔɔnin bɛ o ka kɛra dɔrɔn kɔnɔ.

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
Sigila kɛlɛlapɛw bɛ kɛ fɛɛrɛ dɔ la, a bɛɛ kɛ ML-KEM encapsulation dɔ kɛ kɛnɛya la. Lapɛ kɛnɛ bɛ sigila dɔ fɛ a kɛra, n'a fɔ ko lapɛ dɔ tɛ a ye a kɛra dɔ fɔ.

Kɛla kɛnɛya bɛ dɔrɔn kɔnɔlɔ kɛ. Seal bɛ kɛla ye NIP-44 dɔrɔn ye — application tɛ kɛla (key) fɛ mɔgɔ tɛ kɛ — nka o tɛ se ka kɛ kɔnɔ na. O tɛ kɛlɛ (attack) kɛ se ka se: seal bɛ kɛ se k’a fɛ wrap kɔ, nka wrap ye ko recorder bɛ dɔɔni kɛ ye. Kɛlɛbaya kɛlɛ (traffic) kɔnɔ kɛla bɛ kɛ, a ka ML-KEM kɛlɛ ye seal kɛ lanyan kɛ se ka kɛ se.

7Musun koro ni kɔrɔ kɛnɛ.

Mésé kɛlɛ tɛ kɔnɔfɛlɛ dɔ ye. Kɔnɔfɛlɛ de bɛ kɛlɛ dɔw bɛɛ tala, kopii dɔ dɔ bɛna a jɛ mɔgɔ dɔ kɛ ML-KEM kɛ-kɛlɛ dɔ ye. Mɔgɔ min kɛ-kɛlɛ fanyi, a ye hybrid wrap lakana; mɔgɔ tɛ kɛ-kɛlɛ fanyi, a ye classical wrap lakana.

O bɛ kɔrɔsi ninnu kɛ kow la, a ka kɛ ka fɛɛrɛ kɛ bɛ a kɛ lo ko o tɛ. Ɲumɔgɔ kɛmɛ la, n'u jɔmɔ bɛ ko kɛlɛ dɔrɔn sɔrɔ, o kulu ye... ye. ayi kanun-nɛ̀wulu-wulu kɛnɛ. Kɔrɔmusu bɛ sɔrɔ tɛ̀gɛtɛ sɔrɔtɛ kɔrɔ kɛ̀la ka kɛ nɛ̀wulu-wulu-wulu kɛ̀ kɛ̀ nɔɔrɔ dɔɔrɔ ma, ko k'a fɔ ko kɛnɛ kɛ̀ kɛ kɛnɛ yara nɛ̀wulu-wulu-wulu dɔɔrɔ ma. bɛɛ kɔpɛ ye.

Nymchat b'a fɔ k'a ka sɔrɔ sɔrɔ dɔ kɔnɔ fan-out la — o fɛɛrɛ bɛ kɛ k'a bɛɛ kɛra wraps ka ye — n'a bɛ badge dɛmɛ k'a fɔ ko "quantum-resistant ye mɔgɔ walu (8) la sananu (10) la" nka a tɛ k'a fɔ ko message bɛ kɛ kɛrɛnkɛrɛn. Ni sɔrɔ tɛ k'a fɔ dɔ, o ye kɛnɛyaga dɔ ye... a sɔrɔ Toli bɛɛ kɔnɔ (a kɛ-taga kɛra a bɔlu dɔ kɛra nka a bɛɛ nka), interface bɛ a fɔ ko dɔ dɔ de bɛ, a tɛ bɛɛ kɛ. I ka fɔ ko dɛmɛ bɛɛ bɛ i ka toli dɔ kɔnɔ de la, a bɛ toli bɛɛ ye fɔ dɔrɔn de ye.

7.1 Su bɛ fɔ

Sinsɛn bɛ tɔgɔ fɔ a kɔrɔ kuma, a ye software a yeɲɛ ye ka fɔ ye:

Karamuso bɛ kɛ nɛgɛ kɔnɔ kuma dɔgɔtɔ kɛ kɛ, a tɛ kɛ mɔgɔ dɔ fɔ kɔfɛ ye. Kuma dɔgɔtɔ ɲɛ kɛnɛna tɛ se ka kɛ kɛnɛya kɛɲɛ kɛ a bɛɛ kɛnɛna kɔ, nka kɛlɛ-fɛn bɛɛ bɛɛ a bɛɛ kuma kɔrɔ kuma fɔli fɛn fɔli fɔ kɛra k'a fɔ fanga tɛnni kuma bɛɛ kɛ nɔgɔn fɔli-fɔli kɔnɔ ye.

A kɔrɔ kɔrɔw kɛnɛya dɔ fɔ a kɔrɔ dɔ kɔrɔ dɔrɔn fɛ, a kɛ sɔn k'a dɔrɔn kɛ: bɛnna dɔ kɛnɛya kɛ n'a fɔ ko bɛɛ ye kɛnɛya kɛra, nka bɛnna dɔ bɛ fɛɛrɛ fɔ n'a fɔ ko coverage dɔ bɛ.

8Ko-w bɛ i ye.

Client bɛ ninnu dɔw kɛ kɛnɛya kɛra mɔgɔ kulu ye: bɛnna kɛlɛlɛw, kɛlɛkɛlɛ sisan dɔw, kɛmɛ koliw, ani kɛlɛfɔlɔw. O dɔw bɛ mɔgɔ kɛnɛya kɛ mɔgɔ ye mɔgɔ kɛlɛ dɔw ka tɛrɛ kɛ la, nka o dɔw kɛ kɛlɛ kɛra, o bɛ se ka dɔw kɛ u dɔw ka kɛnɛya ye, mɔgɔ kɛlɛw bɛ mɛn kɛ mɛn na. U bɛ kɛnɛya dɔ kɛ u kulu kɛlɛ ye — Section 3.2 dɔ ye o kɛra kɛ se ka dɔ kɛ la, u... nymchat-pq-root Kalanba kɛnɛ, ɛ tɛ se ka sɔrɔ kulu kɛlɛn kɛ, ko a fɛɛrɛ de bɛ se ka bɔ.

O kɛnɛya kow ye kɛnɛya kura bɛɛ kɛ kɛnɛya ye. Settings blob o sɔrɔ archive row, a bɛ kɔnɔ kulu kulu la wulu kulu kulu la; o ye kɛlɛ baci kɛ kɛ kɛnɛya kow bɛɛ kɛ kɛnɛya kɔrɔ kulu kulu la — a bɛ kɛ kɛnɛya kow bɛɛ kɛ kɛnɛya kɔrɔ kulu kulu la, k'a fɔ kɛnɛya kow ye, a tɛ kɛ kulu kulu la.

Kura dɔ bɛ fɛn kɛlɛn kɛ, nka kɛmɛ tɛ. A kɛlɛn dɔ n'a fɛ i ye i ye i sɔrɔ... bɛɛ fɛn bɛɛ bɛ account kɔnɔ, n'a fɔ ko, fɛn bɛɛ bɛ a kɛ a ye a bɛ se ka fɔ fɛn bɛɛ bɛ se ka ye nka ka fɔ fɛn bɛɛ kɛ a kɔrɔla, account bɛ kɛ a ye kɛ fɛn bɛɛ bɛ se ka ye nka ka ye. Lakan kɛ fɛn dɔw ye, fɛn bɛɛ bɛ se ka kɛ a ye a kɔrɔla — kɛnɛya tɛ fɔ ye cɛ kɛ fɛn ye, Section 3.2 bɛ se ka kɛ dɔw ye a kɛra a ye, a bɛ fɔ dɔw ye.

Kankalan kɛ ka fɔ

Sogo dɔ bɛ identity ye, nka a tɛ root ye; a tɛ se k'a fɛ k'a fɛn bɛɛ kɛ kɛra root kɛnɛya kɛra nɔɔ, a ka settings wɛrɛw bɛɛ kɛ. O ye kɛla dɔ ye, a tɛ kɛla tɛ, a ye kɛla dɔ ye; o bɛ k'a fɔ Section 3.3 la, a bɛ sogo dɔ dɔn k'a linke, a tɛ root dɔ dɔn kɛ: root dɔ dɔn tɛ se k'a fɛ k'a fɛn dɔ fɛ, a ka identity kɛnɛya bɛɛ kɛ dɔ dɔ. Sogo dɔ bɛ kɛ kɛ, a bɛ se k'a fɛ k'a fɛn dɔ dɔn kɛ, a bɛ kɛnɛya bɛɛ kɛ.

Alatigi bɛ kɛ browser extension ye walla remote signer (NIP-46) ye, a tɛ nsec fɛ kɛ kura kɛmɛ ye, nka a bɛ recovery code fɛ. Section 6.1 ka kow bɛ kɛ kɛnɛ-kɛnɛ ye, o de ye post-quantum kɛnɛ ka sɔrɔ ye: signer bɛ NIP-44 kɛnɛ bɔ kɛ kɛ kɛ kɛ, nka client bɛ kɛnɛ kɛ dɔgɔ kɛ kɛ kɛ dɔɔni kɛ. O ka login ye ordinary participant de ye kɛnɛ kɛnɛ kɛ nkafo ye.

9Koo

O epoch Derivation kɔntɛr bɛ kɛ tiri-tiri kɛ kɛnɛ kɛ kɛsɛ kura fɛ. A kɔnɔ bɔ kɛ kɛ kɛsɛ kɛlɛ kura kɛ kɔrɔ kɛnɛ kɛ, k'a fɔ kan-ka-fɛn-kɛlɛ bɛ kɛ nɔgɔ kɛ; ɲɛmɔgɔw bɛ kɛsɛ kura kɛ fɛn tɔ bɛ kɛ kɛnɛ. N'a fɔ ko, tiri-tiri kɛ kɛ kɛnɛ fɛ ɲɛmɔgɔ tɛ fɛn kura kɛ: kɔrɔ bɛ kɛ identity dɔɔni dɔɔni, epoch bɛ tiri-tiri kɛ.

9.1 Ɲɛmɔgɔ kɔlɔw bɛ dɔmɔ, ka fɛɛrɛ tɛ saba kɔnɔɲɛkɛ.

Kili bɛn kɛ kura kɛ, a tɛ se k'a kɛ k'a kɔrɔ kɛ. Client bɛ sɔrɔ kili kɛ k'a fɔ kow dɔw kɛnɛya kɛnɛya la kɛ kɛnɛya saba kɔrɔ, n'i fɔ ko kow bɛ kɛ kili kura kɛ kɔrɔ saba la kɛ, a bɛ se ka kili kura kɛ kɔrɔ kura la.

O kɔfɛ ye ye k'a dɛmɛ k'a dɔrɔn kɛ: a tɛ mɔgɔ fɛ k'a dɛmɛ k'a fɛn dɔrɔn kɛ, k'a bɛɛ kɛ k'a dɔrɔn kɛ fɛn bɛ kɔnɔ kɛ. Fɛn bɛɛ kɛnɛ kɛ k'a dɔrɔn kɛ, nka mɔgɔ tɛ se k'a fɛn dɔrɔn kɛ k'a dɔrɔn kɛ (Section 10.5).

10Mun nin tɛ kalo.

Kalanbɛn de bɛ deesɛ ka kɛnɛya ko fɔlɔ de fɔlɔ de, o tɛ sisu fɔlɔ ye, nka interface dɔ la kɛnɛya tɛgɛ dɔ fɔlɔ fɔrɔ de, o bɛ kɛ fɔlɔ tɛ de ka kɛ kɛrɛnkɛrɛn ye. Sisan fɔlɔw bɛ se ka kɛ sira nin ma la.

10.1 Dɔgɔ bɛ sigida kura ye, n'a fɔrɔ tɛ se ka kɛ kɛrɛn ye.

O ye kɛlɛ-kɛla kura ka ɲɛmɔgɔsɔgɔ ye. Section 2 ka kan-fura k'a fɔ ko mɔgɔ kɛ nɔ dɔ kɛ nka dɔ dɔ ye, o tɛ se k'a kɛ: nsec dɔ kɔrɔ tɛ post-quantum kɛnɛ ye, tɛmɛn-mɔgɔ kɛnɛ ye k'a fɔ ko mɔgɔ bɛɛ ka se k'a ye o ye, alo kɛnɛ dɔ fɛɛrɛ tɛ se k'a ye. Sɛbɛn 3.2 ka sakaliw tɛ se k'a dɔɔni dɔɔni fɔ, nka mɔgɔya tɛ sɔrɔ ɲɛkɔrɔ ye, kɛnɛ kura ye k'a fɛɛrɛ fɔ tɛ. Sakali-mɔgɔ dɔ tɛ, nka mɔgɔ kɛlɛ-kɛla dɔ tɛ k'a bɔ, a kɛra o dɔrɔn ye.

Manwal tɛmɛnɛmɛn de ye kɛnɛ dɔ ni ye, o ye fɛn dɔsɔrɔ ye o kɛrɛn ye. Kɛlɛ-kɛ-bɛn-ji mɔgɔ a tɛ fɛn dɔ kɔpi kɛ... nympq1… Code anywhere bɛ a kɔrɔ dɔ kɛ, masini dɔ la, nka masini dɔ ka kɛ, a bɛ post-quantum mɛsɛdʒi bɛɛ, settings blob bɛɛ, ni archive row bɛɛ a la kɛ kɛ... O... nsec A tɛ dɛmɛ; o ye kɔrɔ ye, design bɛ o la kɛ.

Sɔngɔ kuluw bɛ kɛ cogo min de bɛ kɛ ka kɛnɛya kɔrɔ ye. Kɔrɔfɛ bɛ ta sɔngɔ tɛ kɛ ye, ko kɛnɛya bɛ kɛ cogo min de bɛ kɛ a sɔngɔ kɛɲɛ kɔrɔ ye — fɔlɔ-kɛmɛ ye, o bɛ kɛ cogo min de bɛ kɛ fɔlɔ-kɛmɛ ye, ka sɔngɔ kuluw bɛ kɛ fɛn de ye, kɔrɔfɛ bɛ a dɔbɔ a yɛrɛ kɛ ka kɛnɛya kɛ a mɔgɔ de bɛ kɛ.

10.2 Kɛla, ka kɛ kɔrɔsiya tɛ ye

Nostr fɔlɔw (signatures) bɛ Schnorr kɛ secp256k1 kɔnɔ, o tɛ kɛ dɔ kɛ kɛnɛya kɔnɔ. Mɔgɔ kɛlɛba u ka quantum computer ye, a bɛ sɛbɛn (signatures) dɔ kɛ kɛlɛ kɛ, a bɛ mɔgɔ kɛ mɔgɔ de kɛ ɲɛ-ɲɛ kɔnɔ. Hybrid key exchange bɛ "sɔrɔ kɛnɛ kɛ, kɛnɛ sɔrɔ kɛ" (harvest-now-decrypt-later) kɛlɛ bɔ: mɔgɔ kɛlɛba a bɛ traffic sɔrɔ kɛ n'a ye, a tɛ se ka a kɛnɛ kɛ kura n'a ye. A tɛ sɛbɛn kɛ k'a kɛ se ka a dɔ kɛ mɔgɔ kɛlɛba u ka masini ye. O dɔrɔn bɛ applications kɔnɔ k'a fɔ: padlock indicator bɛ authentication sɔrɔ, shield bɛ confidentiality sɔrɔ, k'a fɔ ko o dɔrɔn bɛ sɛbɛn dɔrɔn kɛ k'a fɔ ko sɛbɛn dɔ bɛ se ka o dɔ kɛ o dɔ tɛ.

A bɛ Section 4 kanisa bɛ se ka kɛ nɔgɔla. Npub ni ML-KEM kili kɛnɛ kɛ kura ye, a ye secp256k1 signature ye, nka mɔgɔ fɛn bɛ fɛ a bɛ se ka a kili kɛ n'a ye. Ka kili kɛ mɔgɔ fɛn bɛ fɛ ka kɔfɛ tɛ ka kɛnɛya kɛ mɔgɔ fɛn bɛ fɛ la dɛɛ ye.

10.3 Ɲɛmɔgɔw ka ɲɛmɔgɔw

Kunu fɛɛrɛ bɛ a bɔlɔgɔ dɔn, a jɔngɔ tɛ dɔ... p taga, a jɛnɛ, cogo kɛra a kɔnɔso kɛlɛkan kɛra kɔnɔ kɔnɔkɔnɔ. A tɛ a kɔrɔ fɔ ka ye k’a fɔ ko ko kɛra kɛra, a jɔkɛnɛ, walla ko relay bɛ a sɔrɔ n’a kɛra. Turu kɛlɛ (traffic analysis) tɛ sɔrɔ mɔgɔ dɔ kɛ kɛ n'a fɛ.

10.4 Mɛʃ kɔnɔ-ɲɔ tɛ

Nymchat Bluetooth mesh transport ye protokol kɛlɛw san ye a ka handshake san ye, ani nin kɛlɛ tɛ a la. Mesh kɔnɔ mɛsɛdʒiw ye kɛlɛw kɛlɛw san ye.

10.5 Kuma w ye ɲini sisan

Fɛɛrɛ sɔrɔ kɛra mɔgɔ kɔrɔ kɛra kɔnɔ, o bɛ kɛ kɔrɔ kɛ kura tɛ. A bɛ kɔnɔ, a tɛ se ka fɛɛrɛ kɛ kura kɛ. A kɛɲɛ bɛ bɔ kura dɔn kɛra mɔgɔ kura kura kow sɔrɔ mɔgɔ kura kura kow kɔnɔ, a tɛ bɔ kɛ a fɛɛrɛ bɔra kɛ kɔnɔ.

11ɲɔgɔw ka kɛ nɔgɔ kɛ

KɔfɛMun na kɔ?
Identity kili kɔfɛ, post-quantum kili fɛ. A y'a fɛn. Derivation kɛlɛya bɛ nsec kɔnɔna kɛ, nankon quantum kɛlɛba bɛ nsec sɔrɔ npub sɔrɔlɛ kɔnɔ, so classical kɔnɔna bɛla kɛ k'a fɛn bɛɛ sɔrɔ post-quantum kɔnɔna kɔnɔ. A bɛ cɛ kura kɔnɔ distribution kɛlɛ bɛɛ sɔrɔ, nankon a tɛ kɛlɛba kɛra kɛ. Section 3.1.
Fa root ye u kɛlɛkɛ kɛnɛ-kɛnɛ wɛrɛw la NIP-44 la. A bɛ dɔgɔtɔ kan fɛ, nka a bɛ musu fɛ. A kɔrɔ, a bɛ musu-kilan kɛla kɛ, mɔgɔ bɛɛ a bɛ dɔrɔn ani a bɛ a kili kili kɔfɛ bɛ se ka a ye, o ye dɔgɔtɔ ye, a bɛ a k
ML-KEM kɛmɛ kɛɲɛ bɛɛ sɔrɔ diyisi kulu kulu la kɛ kɛɲɛ kɛ. A ye ka fana. Apara bɛ kɛnɛya kɛnɛ bɛɛ tɛ lo kɛ lo, n'a fɔ kɛnɛya kelen kɔrɔ identity kelen tɛ se ka kɛnɛ bɛɛ fɛ. Afo bɛ kɛ kɛnɛ kan n'a ye kɛnɛ kɛnɛ ye, n'a fɔ apara bɛɛ tɛ se ka a kɛ̀wɛ̀wɛ̀ ka di. Identity kɔrɔ, k'a la Section 3.2 ka bɔlɔ, mo bɛ kɛ a fɛ.
Root bɛɛ PIN dɛmɛ la mɔ. A tɛ se. PIN kɛnɛ ni nɔɔni nɔɔni (4) ye, a bɛ bit (13) la mɔgɔ fɛ k'a kɛlɛ kɛ u tɛ kɛ kɛlɛ kɛ lo (offline attacker) k'a kɛ u ka row (wrapped row) kɛ. A ka a ye bit (256) nɔɔni (2) kɛlɛ kɛlɛ la, a bɛ kɛ ka mɔgɔ kɛ a ka kɛlɛ kɛlɛ ni mɔgɔ kɛlɛ kɛ.
Npub bé kùn fiyɛ ka kɛla kɛ kɛla kɛ ka kà la. 1,184 bytes ye dɔnnyɛgɛ u bɛɛ bɛɛ ye, n'a bɛ se ka Nostr client bɛɛ tila ka dɔrɔn dɔ fɛ a ye 32 bytes ye.
Kɛrɛɲɛ tɔgɔ dɔnniya kɛlɛ A bɛ koɲiyali dɔ bɛɛ dɛmɛ kɛ kɛnɛya bɛ kɛ k’a fɔ la. A dɔ n'a bɛ dɔnɛla dɔ, a bɛ kɛla ko a dɔ bɛ k'a kuma kan ka dɔn.
Kɛla bɛn kuma bɛɛ ma. A tɛ kɛla ye: a bɛlen bɛ a fɛ mɔgɔ sɔrɔla ka Kili kanisa kuma kura kɔ, o ye ko kɛra ko mɔgɔ kuma kura tɛ kɔ a ka a dɔɔni kɛ.
Bandiko la ka kɛ kɛya kɛlɛsi A bɛ kɛ kɛnɛya mɔgɔw dɔrɔn dɔ ye. Mɔgɔ bɛ kɛnɛya dɔrɔn dɔ, a bɛ se ka flag (tɔgɔ) dɔ bɔ, o bɛ kɛ an ka kɛnɛya kɔnɔna kɛ.
Quantum kɔfɛ fɛɛrɛ, classical kɛnɛ tɛ. Secp256k1 kɛnɛkan kɛra denkɛw kɔnɔ dɛsɛ, a kɔrɔ kɛlɛ dɔ ka nɔɔrɔ kɛra. Hybrid ka dɔn ko a ka kɛ kɛra fɛɛrɛ kɛra nɔɔrɔ dɔ de kɛra... u fila bɛ A tɛ se.

12Kɛ kɛ ɲɛmɛmɔ

Nymchat bɛ nɔgɔyɔrɔ dɔbili sɔsɔyɔrɔ fɛ nɔ ni kɔnɔn fɛ — a bɛ JavaScript kɛ web application ye, a bɛ Dart kɛ mobile application ye, a la ML-KEM-768 sɔrɔ kɛra sisan kɛnɛya la. Nɔ ni kɛrɛnkɛrɛn dɔbili kɛnɛya ye, a bɛ kɛ sɔrɔ ye, so u bɛ u dɔrɔn tɛgɛ u dɔrɔn fɛ tɛ u dɔrɔn dɔn u dɔrɔn kɛ fɛ.

Dart ML-KEM kɛmanya bɛ dɔn official fɛ NIST ACVP ML-KEM-768 fɛ tesituw bɛ sɔrɔ bɛ se k'a fɔ (ML-KEM-*-FIPS203) — 25 key-generation, 25 encapsulation ni 10 decapsulation cases, u bɛ kɛ u ka suite ye. O ye NIST bɛ fɔ kɛ i ka implementation kɛnɛ-kɛ ye, so a ka kɛ kɛnɛ-kɛ ye, a tɛ se ka kɛ i ye kɛ clients bɛɛ bɛɛ kɛ a ka kɛlɛ-ɲɛmɔgɔ ye. A kɔfɛ, kɛlɛ-ɲɛmɔgɔ bɛɛ bɛ kɛ kɛlɛ-ɲɛmɔgɔ ye — seed derivation, encapsulation, payload formats bɛɛ, ni complete gift wraps bɛɛ — JavaScript reference la kɛra, u bɛɛ kɛ kɛlɛ-ɲɛmɔgɔ bɛɛ kɛ. Root secret bɛ o kɛlɛ-ɲɛmɔgɔ kɛ a kɔfɛ, a tɛ a yɛrɛ kɛ a fɛ: root to seed, root to keypair, root's public fingerprint, ni kɛllɛ dɔ dɔ ni a ka kɛlɛ-ɲɛmɔgɔ dɔ dɔ ye, o ye kɛlɛ-ɲɛmɔgɔ ye, so clients bɛɛ tɛ se ka kɛ a ka kɛlɛ-ɲɛmɔgɔ ye a... nympq1… Koodi bɛ bayitiw fɔ ko k'a kɛ kɔrɔ kɛnɛya ye. Kɛlɛlɛ kɛlɛlɛw bɛ nɔgɔlɔnna, kɛlɛ bɛ di, k'a sɔrɔ k'a tɛ kɔrɔ fɔlɔ k'a tɛ se ka a fɔlɔ ye kɔnɔ.

Fingerprint bɛ se ka kɛ nin sira la. O ye ko ye min kɛra dugukolo ye ko “o ye n’a fɔlɔ kulu ye” ani “o ye kulu kɔrɔ ye”, nka kiliyan u fɛ u mɛn kiliyan kɔrɔ fingerprint ye, u bɛ se ka kɛ kɛlɛsɛgɛ bɛɛ ye kɛlɛsɛgɛ tɛ ye — nka Sekisiyɔni 3.3 kɔnɔ, u bɛ kulu kɛlɛ kɛ nɔɔrɔ, u bɛ kiliyan fɔlɔ. O ye o kow ye.

Nymchat ye fɛɛrɛ kɛnɛ AGPL-3.0 kɔrɔ la. A fɔra fɛɛrɛ kɔrɔka fanga ye js/nym-crypto.js ani js/modules/pq.js web client la, ni lib/core/crypto/lib/features/identity/pq_registry.dart Mobile clients sira la.

A fɔlɔ sɔrɔ sɔrɔ, kɛlɛya tɛ, a xɔri... Kwantum kɛrɛnɛtɛ sɔnɔya dɔnniya fɛɛrɛ lapisi.