Knowledge Base: Quantum-eguzogide encryption

Nymchat ọkọlọtọ whitepaper

Post-Quantum Key Agreement na Nymchat

Mbupu ML-KEM-768 public keys n'okpuru Nostr na-enweghị directory ma ọ bụ registry, na-eme ha site na a siri ike na ọ dịghị a public value na-egosi.

Ọdịdị 1.0 ọnwa 2026 Gbanwere na Nymchat 3.74+

Na-agụnye a post-quantum key exchange na a messenger bụ karịsịa adịghị a cryptography nsogbu. The primitives na-etinye na libraries nwere. The nsogbu bụ na onye ọ bụla na-achọ a nke abụọ The akwụkwọ a na-egosi otú Nymchat na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu.

1nsogbu

Usoro Private anyị na-akwụ ụgwọ na NIP-44, nke nwere abụọ n'akụkụ. The n'akụkụ nke na-agba ọsọ ọsọ — ChaCha20 na a HMAC-SHA256 tag, na-agba ọsọ Mkpụrụ (Nkọwa: RFC 5869) - adịghị na-enweghị nsogbu site na a quantum kọmputa; algorithm nke Grover na-eme ka a square-root accelerup n'akụkụ a symmetric key, na 256 bits na-anabata nke a. ịdabere on the key bụ elliptic curve Diffie-Hellman n'elu ọkọlọtọ 256k1, na algorithm nke Shor na-ekpuchi logarithm diskrete n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu.

Ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme.

1.1 Ihe ọmụma a na-ekwu

Ọnụ ọgụgụ dị mma: na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ. Nymchat na-eji ML-KEM-768 (Ngwaahịa 203). Nke a na-eme ka a mmetụta nsogbu:

ajụjụ

Ị ga-ekwu Alice taa, ị ga-achọ otu ihe: ya npub. Tụkwasịnụ a post-quantum exchange na ị ga-achọ a abụọ — ya ML-KEM public key. N'ihi na nke a key na-arụ ọrụ, na otú ị ga-enweta ya tupu ị nwere ike ime ya ihe ọ bụla?

A npub bụ onwe ya. Ị nwere ike ime ya na akwụkwọ, ịhụ ya elu, ma ọ bụ na-esonụ ya site na a ekwentị, na ọ bụ ihe niile onye ọ bụla kwesịrị ịnyịda gị. A ML-KEM-768 public key bụ 1,184 bytes. Ọ nwere ike ịhụ ya elu, ọ ga-abụghị n'ime a user name, na ọ na-adịghị n'ime a QR code n'etiti a identity nke bụ naanị 32 bytes.

The mfe akụkụ bụ na a abụọ kpọmkwem na-enye atọ nsogbu dị iche iche, na ndị ọzọ nke akwụkwọ a bụ n'ụzọ zuru ezu na ha:

2Ngwaahịa Design

Ọtụtụ ndị na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a.

  1. Ọ dị oké ọnụ ọgụgụ dị ala. Ndị ọrụ anyị na-agba ọsọ na-agba ọsọ otu akụkọ ihe mere eme, nsec. Onye ọ bụla ọzọ akụkọ ihe mere eme bụ otu ụzọ ọzọ iji jide akụkọ ihe mere eme gị, na onye ọ bụla na-agba ọsọ iji backup nsec ga-adịghị ike ịgbaso ihe ọ bụla ọzọ. Section 3.1 na-egosi na nke a na-adịghị ike ịgbaso n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu n'otu
  2. Ọ dịghị ikike. Ọ dịghị usoro nchịkọta nwere ike na-ekwe omume na-ekwe omume nke na-ekwe omume. Ọ dịghị usoro nchịkọta dị otú ahụ na-agba ọsọ na ozi nwere ike na-agba ọsọ.
  3. Ọtụtụ ngwaọrụ, otu identity. A Nostr identity na-eji site na ọtụtụ ndị ahịa ugboro ugboro. Ọ bụla isi ihe dị na ha ga-abụ otu na ha niile, na ụzọ ndị na-eme ya n'ebe ahụ na ha na-adịghị ike ịhụ site na ndị na-egbochi na-egbochi ya.
  4. Ọ dịghị Negotiation. Any in-band exchange of “which ciphers do you support?” is a surface a attacker can strip to force the weaker option. The design must have nothing to downgrade.

3Ọnụ ọgụgụ nke Root Secret

Ọ bụrụ na ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka

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)

The root na-egosi na onye ọrụ otú nsec bụ: Ọnụ32 N'ihi na omenala omenala nympqN'ihi ya, ọ na-akpọ nympq1…, na-egosi n'okpuru nsec na nchịkọta ekwentị n'okpuru otu na-egosi mmetụta mmetụta, na-ekpuchi na otu akara, na-adịghị na-akwụsị na-enweghị mmetụta n'ebe ọ bụla na-egosi. Ọ bụghị nchịkọta na ọ bụghị nchịkọta. Ọ bụ ihe dị mkpa na onye ọrụ nwere ike ime, dị ka nsec.

The salt bụ domain-ewepụtara n'ụzọ zuru ezu, otú ọ dịghị ihe ọzọ siri ike ikpeazụ otu keypair. The epoch counter drive rotation (Section 9).

3.1 N'ihi na nke a na-adịghị ike na-eme ka a na-eme ka a na-eme ka a na-eme ka

The nkwurịta ụkpụrụ bụ ịgbado ọkụ keypair si ihe siri ike na onye na-eji ya:

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

Ọ na-atụ aro n'ihi na atọ ihe, ha niile bụ n'ezie: ọ dịghị ihe ọhụrụ ka backup, n'ihi na nsec na-abịa na backup; ọ bụla ngwaọrụ na-ekwe omume site na mmepụta, na ọ dịghị njikọ protocol na-agba ọsọ; otu kpọmkwem ikpeazụ n'ihi na identity bụ n'ezie, n'ihi na ngwaọrụ nwere ike na-adịghị egosipụta n'ihi na isi; na isi e nwere tupu ọ bụla na-ekwu, otú a ahịa nwere ike na-egosi ihe ọ bụla maka ya na mbụ.

N'ihi na ihe niile na-enweghị uru, n'ihi na otu ihe. The algorithm nke Shor na-agba ọsọ na a na-ekwu npub na-enweta nsec. The seed derivation bụ algorithm a na-arụ ọrụ n'elu nsec. Ya mere, onye na-agba ọsọ nke a na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ.

The iwu niile na-esonụ si

The ML-KEM decapsulation key ga-abịa si entropy nke na-adịghị na-abịa si nsec ma ọ bụ na-enweghị ikpeazụ n'okpuru classic-only encryption.

A na-emepụta siri ike nke a na-agba ọsọ n'etiti ngwaọrụ nke a na-agba ọsọ n'ime ozi NIP-44 na-agba ọsọ na ihe ndị ọzọ nzọụkwụ: onye na-egbochi ozi a na-egbochi ozi a na-ekpo ọsọ ya na-ekpo ọsọ mgbe ahụ, na isi na-egbochi. Nke a bụ ihe mere na ụzọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ.

3.2 Tinye root na ndị ọzọ na ngwaọrụ nke ọrụ

Ọnụ ọgụgụ 3 nke Section 2 - otu identity, ọtụtụ ngwaọrụ - nwere ike ịbụ na arithmetic ebe a, n'ihi na ihe niile bụ na isi bụ na a na-adịghị a ọrụ nke ihe ọ bụla na ngwaọrụ na-agụnye. Ọ ga-adịghị na-adịghị site na transport, na e nwere kpọmkwem otu ụzọ: onye na-agba ọsọ nympq1… Kedu ya onwe ya.

The root na-egosi dị ka nympq1… n'okpuru nsec, na a abụọ ngwaọrụ na-enweta ya na-agba ọsọ na otu panel. Nke a bụ n'ụzọ zuru ezu. A ngwaọrụ na-enweghị koodu nwere ike na-arụ ọrụ, nke a na-ekwu 4.2.

Ọnụ ọgụgụ dị na 3.1 na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu na-ekwu.

The format na-egbochi ebe maka a wrapped ụzọ: a akụkọ nwere ike na-enweta a nkọwa nke wraps, onye ọ bụla a AEAD blob n'okpuru a njikọ onye ọrụ nwere ike na-egbochi na ihe ọzọ na ngwaọrụ - a passkey PRF output, dịka ọmụmaatụ. nympq1… Code bụ otu ụzọ n'ihu. Section 10.1 na-egosi ihe na-eri.

The akara ahụ na-arụ ọrụ na akara nke ya, nymchat-pq-rootỌbụna na-enweghị wraps ọ na-eme ọrụ dị mkpa: ya na-arụ ọrụ bụ otú a abụọ ngwa na-amụta na nke a identity na-enweghị isi, nke bụ ihe na-egbochi ya na-eme ka a na-eme ka a na-agba ọsọ otu (Section 3.3).

Design note: otu category na-enweghị ike iji ọhụrụ key

The nymchat-pq-root Categories Ọnọdụ ọ bụghị na-akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali ak

Onye ọ bụla ndị ọzọ na-egosi category nwere ike na ị ga-eji root-derived key. Nke a bụ otu mgbatị, na ọ bụ mgbatị banyere circularity karịa banyere ike.

3.3 Generation na adoption

Na boot, na-enwe a na-adịghị mma identity, a client na-arụ ọrụ na a usoro:

  1. Search maka a na-enweta nymchat-pq-root nkọwa
  2. akụkọ dị, na ngwaọrụ a nwere ike ịgbado ọkụ ya - na-akpata ya na-ekwu nke a na-ekwu dị ka post-quantum ike.
  3. Ngwuputa dị, na ngwá ọrụ a nwere ike ịgbatị ya — na-adịghị na-emepụta a ọhụrụ root, na-adịghị na-emepụta ihe ọ bụla na-ekwu. Kpọmkwem onye na-akpọ ngwaọrụ a site na nympq1… Code site na ngwaọrụ na-enweta ya.
  4. Ọ dịghị Record — na-emepụta a root, na-emepụta akụkọ, na-ekwu, na-egosi nympq1… Kedu ka onye na-eji otu oge iji nweta ya.

Step 3 bụ ihe dị mfe na-adịghị mma, na ọ bụ n'ihi na ordering na-egosi n'ihu ma ọ bụ na-adịghị na onye ọ bụla implementation. abụọ ngwaọrụ na onye ọ bụla na-ahọrọ na-emepụta a root na-emepụta abụọ onwe ha isi n'okpuru otu identity, na nke a bụ na faịlụ nke ordering a nwere na-egbochi.

4The ikikere ike

The public half of the derived keypair is published as an addressable Ọchịchị 01 ihe omume — ụdị 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 na-ekwe nkwa na relay nwere otu ihe omume kwa (kind, pubkey, d-tag), otú a republish na-agba ọsọ na-ekwu na-ekwu. Onye ọ bụla identity ya mere nwere kpọmkwem otu ugbu a akụkọ, nke bụ ihe na-eme ka &ldquo;kpọmkwem Alice &rdquo; a otu kpọmkwem n'akụkụ karịa a akụkọ na-agba ọsọ.

The akara bụ ndị na-atụ aro. The ihe omume na-akpọ site na identity key, ya mere na-atụ aro &ldquo;this ML-KEM key belongs to this npub&rdquo; bụ kpọmkwem dị ka nnọọ ike dị ka npub ya onwe ya. Na-agbanwe a dị iche iche encapsulation key na-achọ ịkwanyere a secp256k1 akara. A na-eme ka nke a nwere ike ime ka ọ dịghị mkpa na-eme na KEM.

Nyocha na-atụ aro. Ụbọchị 7 NIP-40 Ọnụ ọsọ, a na-emepụta ọ bụla 24 awa, na-ekwu a nkọwa banyere a ahịa na-agba ọsọ na-agba ọsọ ma ọ bụ onye na-agba ọsọ. The root ya na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ.

A na-atụle na-ekwu, a na-ekwu dị ka onye na-enweghị isi: ndị na-ekwu na-enweta obi NIP-44, nke onye ọ bụla na-enweta nwere ike ịhụ, na ndị ahịa na-agba ọsọ na-agbanwe post-quantum na ya ọzọ njikọ, mgbe ọ na-ekwu. Ya mere, na-agba ọsọ maka ihe karịrị a izu na-agba ọsọ maka nchedo maka ozi na-esonụ n'oge na-egwu - ha bụ classic encrypted karịa quantum-resistant - na-agba ọsọ ihe ọ bụla ọzọ. Tụkwasị na-enweghị mmetụta, ihe ọ bụla na-enweta na-adịghị mma, na-adịghị mmetụta dị mkpa na-atụle.

Ọ dịghị otu, a akụkọ na-agba ọsọ ndị a na-akpọ: a ngwá ọrụ nke na-agba ọsọ, reset, ma ọ bụ nwere ya akụkọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọs

The key field na-akpọ ya format. The Field bụ pk2, na ọnụ ọgụgụ bụ akụkụ nke contract karịa decoration: ọ na-akpọ ihe na-eji na-ekpuchi ike na-eji. A na-ekpuchi na-adịghị na-ekpuchi ubi na-ekpuchi &ldquo;Nymchat client, ọ dịghị post-quantum key&rdquo; na-ekpuchi obi NIP-44, nke ọ bụla login nwere ike ịhụ. Nke a bụ n'okpuru nsogbu nchọgharị, na ọ dị mkpa na-ekpuchi dị ka a na-ekpuchi: a na-adịghị ekpuchi ike na-akwụ ụgwọ, ọ dịghị n'ihu. A na-ekpuchi a na-adịghị nwere ike iji bụ ihe karịa ọ bụla na-adịghị na-ekpuchi ọ bụla, n'ihi na ozi ọ na-emepụta

4.1 Ọ dịghị bụ ihe dị mkpa, na a na-akwụ ụgwọ

A subtle ma dị mkpa nkọwa: Nyocha a na-emepụta site na onye ọ bụla Nymchat ahịa, ọ bụghị naanị ndị post-quantum-enye ike, na akụkụ isi bụ optional. Nke a na-eme ka atọ dị iche iche na ọnọdụ karịa abụọ:

NyochapụtaraGỤKWUO
Nyocha na a Key Nymchat, post-quantum ike Ọdịdị Hybrid
Ọmụma, ọ dịghị isi Nymchat, classic naanị - post-quantum off, ma ọ bụ ngwaọrụ na-enweghị ikikere na isi nke identity Ọdịdị NIP-17
Ọ dịghị adreesị Unknown client. Ị nwere ike ịbụ onye ọ bụla Nostr ma ọ bụ Bitchat user Classic, plus a compatibility wrap

A na-enweghị isi bụ a na-ekwu okwu na onye na-ekwu na-arụ ọrụ Nymchat, nke na-enye onye na-ekwu ụzọ na-agba ọsọ a na-agba ọsọ cross-protocol wrap na ọ ga-agụnye maka onye ọ bụla ọ ga-adịghị ike ịdabere.

4.2 A ngwá ọrụ na-enweghị ike na-agba ọsọ isi na-agba ọsọ

Ọzọkwa, a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a.

N'ihi ya, ngwá ọrụ na-enweta a root nwere, ma ọ bụghị ike na-ekpuchi ya, ọ na-ebipụta ihe ọ bụla. Ọ bụghị na-ebipụta ma ọ bụghị na-ekpuchi ya site na ngwa: ọ na-ekpuchi ihe ọ bụla n'akụkụ ya na-ekpuchi ya na-ekpuchi ya na-ekpuchi ya na-ekpuchi onye ọrụ na-ekpuchi ya. Silence bụ n'ụzọ zuru ezu maka ngwá ọrụ na-enweghị ike na-ekpuchi ya.

5Discovery na mmelite iwu

Ndị ahịa na-amụta peer keys abụọ ụzọ. A na-agba ọsọ na-ekpuchi ndị a na-eji na-ekpuchi na-ekpuchi - mkparịta ụka na ndị na-agba ọsọ - otú ndị na-ekpuchi ha na-abịa dị ka ihe dị iche iche. N'ihi na onye na-agba ọsọ na-agba ọsọ, a otu-akwụ ụka na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ.

A na-ejikọta ngwa ọhụrụ, ma ọ bụ onye na-agba ọsọ site na a na-agba ọsọ nchọgharị login na a na-akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali

5.1 N'ihi na ọ dịghị nchegbu nchegbu

Usoro routing na-agba ọsọ na otu ajụjụ:

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

Ọ dịghị ikikere ikike, ọ dịghị ndepụta algorithms na-akwado, na ọ dịghị ebe onye na-atọgide nwere ike kpọmkwem iji na-eme ka a na-adịghị mma ụzọ. bụ The nsogbu mode nke a na-agba ọsọ ma ọ bụ na-agba ọsọ na-ekwu bụ na ozi na-agba ọsọ - na status quo tupu ọrụ a - karịsịa na a hybrid ozi na-agba ọsọ na ihe ọ bụla na-agba ọsọ.

The converse na-egosi na ihe ndị ọzọ: a ahịa na-enye hybrid naanị Ọ bụrụ na ọ na-ehi a key, na-ehi a key bụ nkọwa na ndị na-enweta nwere ike decapsulate. Ọ dịghị ọnọdụ na a ozi na-esonụ post-quantum na onye na-adịghị ike ịhụ ya.

6Hybrid ụlọ ọrụ

Nymchat adịghị mbadamba NIP-44. Ọ na-agba ọsọ ya. A na-agba ọsọ NIP-44 ciphertext bụ n'ime n'ime oghere, na ML-KEM na-agba ọsọ a n'èzí AEAD gburugburu ya:

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)

N'ihi na ị na-agba ọsọ, ị na-agba ọsọ, ị na-agba ọsọ, ị na-agba ọsọ, ị na-agba ọsọ, ị na-agba ọsọ, ị na-agba ọsọ, ị na-agba ọsọ, ị na-agba ọsọ, ị na-agba ọsọ.

Encapsulation na-arụ ọrụ ọhụrụ na ihe ọ bụla nkwurịta okwu. ML-KEM key nke ndị na-enweta bụ ogologo ndụ, ma ihe ọ bụla nkwurịta okwu na-enweta a nkwurịta okwu na ya mere a nkwurịta okwu kem_ssNke a bụ ihe na-eme ka ọ na-eme ka nonce karịa randomize ya na-ekwu: ChaCha20-Poly1305 ọkọlọtọ na-atụ aro site na reuse a (key, nonce) pair, na ebe a na-akwụsị na-akwụsị na-akwụsị maka onye ọ bụla ozi, otú ọ dịghị abụọ nwere ike na-akwụsị.

6.1 N'ihi na ihe ndị na-agba ọsọ dị iche iche

Ọnọdụ dị iche iche bụ ịgbanwee ndị a na-egosi n'ime otu nkwurịta okwu na-enye ya na NIP-44:

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

Ọ na-eme ka cryptography. Ọ nwere otu usoro nsogbu: ọ na-achọ ecdh_x, na-agba ọsọ x-koordinate nke mmepụta ECDH, dị ka ihe kpọmkwem - na mgbakwunye browser (NIP-07) ma ọ bụ onye na-agba ọsọ (NIP-46Ọ na-arụ ọrụ NIP-44 n'ihi na onye na-akpọ na-agafe a encryption ọmụma, nke bụ n'ụzọ zuru ezu nke na-achịkwa ihe na-adịghị ike na ngwa.

N'ihi ya, na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ.

The price is bandwidth, na ọ bụghị obere. The ML-KEM encryption text is 1,088 bytes and rides on every message, base64url-encoded to 1,451 characters; the external AEAD na-agbakwunye a 16-byte Poly1305 tag na-agba ọsọ NIP-44 payload ọ na-agba ọsọ. A 50-karịta ozi na-agba ọsọ site 176 bytes na 1,712, na a 2,000-karịta otu site na 2,820 na 5,238. The floor is approximately 1.5 KB per message regardless of how short the message is, nke bụ price of encapsulating fresher every time rather than reusing a shared secret.

6.2 Self-defining payloads

The pq2. prefix na-eme ka ntụziaka na-agba ọsọ: ọ na-agba ọsọ, otú a client na-achịkwa ụzọ decryption site na-agba ọsọ ọrụ n'ihu ma ọ bụ site na-ekwe omume a tag ma ọ bụ na-ekwu ihe a na-akwado. A na-adịghị na-akpọ a prefix na-agba ọsọ na-agba ọsọ na-agba ọsọ na-akpọ ya, na ozi na-agba ọsọ tupu onye ọ bụla na-agba ọsọ nwere ike ime post-quantum dị ka a na-agba ọsọ NIP-44 na-enweghị mgbanwe.

Nkwurịta okwu

ML-KEM decapsulation na-eme ka ọ ga-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na

6.3 Ụdị abụọ nke ajụjụ wrap

A NIP-17 Private ozi bụ a NIP-59 Gift wrap: a na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị na-adịghị.

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
Ndị a na-akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali

A signator login na-enweta bara n'akụkụ n'okpuru. The seal na-emepụta site na signator dị ka n'okpuru NIP-44 - na ngwa na-enweghị ike ịhụ nke a na-emepụta ya - otú ọ nwere ike ịbụ hybridized na ebe a. Nke a na-enweghị ihe ọ bụla na-akwụ ụgwọ n'akpali akpali: a seal na-enweta naanị site na wrap, na a wrap bụ ihe a na-akpali akpali akpali. A mpaghara na-enweta akpali akpali akpali akpali akpali ga-ekpuchi ML-KEM tupu a seal bụ ọbụna pụrụ ịhụ na-egbochi.

7Group ozi na akụkụ coverage

A nkwurịta ụka bụghị otu nkwurịta ụka. Ọ bụ otu nkwurịta ụka na-agba ọsọ maka onye ọ bụla òtù, onye ọ bụla copy encapsulated na onye ọ bụla òtù onwe ya ML-KEM key. A òtù na-emepụta a nkwurịta ụka na-enweta a hybrid wrap; a òtù na-enweta a classic wrap.

Nke a na-eme ka nsogbu akụkọ ihe mere eme na a naive n'ichepụta na-adịghị. Ọ bụrụ na 8 nke 10 ndị òtù na-enweta a hybrid copy, ozi ọ bụghị Ndị na-egbochi a mkpa otu classic copy nke a plaintext nke bụ otu n'ime ihe niile, ya mere ozi a na-egbochi naanị nke ọ bụla Copy ọ bụla.

Nymchat n'ihi ya, na-agba ọsọ ikpeazụ per-message n'oge fan-out - ọnụ ọgụgụ bụ naanị kpọmkwem n'oge wraps na-ewu ewu - na badge na-ekwu &ldquo;quantum-eguzogide na 8 nke 10 ndị òtù&rdquo; karịa na-ekwu na ozi na-achịkwa. Ọ dịghị ọnụ ọgụgụ dị, nke bụ ihe na-adịghị mma maka a nkwado nkwurịta okwu (nke onye na-esonụ nkwurịta okwu nkwurịta okwu), nkwurịta okwu nkwurịta okwu nkwurịta okwu karịa nkwurịta okwu karịa nkwurịta okwu karịa nkwurịta okwu.

7.1 Ihe ndị na-egosi Shield

The Shield na-ekwu okwu n'ezie banyere nkọwa, ọ bụghị banyere software na-eme ya:

Usoro a na-egosi mgbe ozi a na-agba ọsọ ma ọ bụ na-agba ọsọ site na ihe a na-agba ọsọ na-agba ọsọ. A na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ.

The otu iwu n'elu na-agba ọsọ n'elu nke a karịa na-agba ọsọ ya: a otu ozi bụ zuru okè naanị mgbe onye ọ bụla onye na-agba ọsọ nke onye na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ.

8Copies na-ekwu na gị

Ọtụtụ ihe ndị a na-akwụ ụgwọ na-akwụ ụgwọ na-akwụ ụgwọ na-akwụ ụgwọ na-akwụ ụgwọ na-akwụ ụgwọ na-akwụ ụgwọ na-akwụ ụgwọ na-akwụ ụgwọ na-akwụ ụgwọ na-akwụ ụgwọ na-akwụ ụgwọ na-akwụ ụgwọ na-akwụ ụgwọ na-akwụ ụgwọ na-akwụ ụgwọ na-akwụ ụgwọ. nymchat-pq-root Ọ dịghị ike ịdabere n'okpuru a njikọ nke naanị ọ nwere ike ime.

A njikọ blob ma ọ bụ a archive akara sitere na otu ebe kwa afọ, nke bụ n'ezie ụdị nke ihe ndị na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ - karịa ihe ọ bụla otu ozi, nke bụ ọbụna efemeral na onye ọrụ onwe ya.

Otu nkwurịta ụkpụrụ na-ejikarị na mpịakọta ebe a karịsịa n'okpuru isi. A self-addressed copy must be readable by nke ọ bụla ngwaọrụ na akaụntụ, otú ọ bụla ngwaọrụ na-ekwu ihe ọ nwere ike na-agba ọsọ na-ekwu na akaụntụ ya na-ekwu, na akaụntụ na-egosi naanị ihe ọ bụla ha nwere ike ịhụ. Na-ekwu ihe ọ bụla ọzọ ga-ekpuchi ngwaọrụ si ya onwe ya ọnọdụ - otu a na-agba ọsọ ọsọ Section 3.2 na-ekpuchi site na ụzọ ndị ọzọ, na-abịa site na a dị iche iche direction.

Ọnụ ọgụgụ dị mkpa na-ekwu

Ọ bụ ihe na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a na-eme ka a

A ngwá ọrụ na-agba ọsọ a browser extension ma ọ bụ a remote signer (NIP-46) na-enweghị nsec na-enweta, ma ọ bụ na-enweta ihe recovery koodu, na n'okpuru usoro nchịkọta nke Section 6.1 nke bụ ihe niile post-quantum n'elu mkpa: na-emepụta NIP-44 layer dị ka ọ bụrụ na ọ dị mgbe niile, na ndị ahịa na-agba ọsọ ndị ọzọ na-ekpo ọsọ ya. A na-ekpo ọsọ dị ka onye na-atụle bụ onye na-ekpo ọsọ n'akụkụ ma ọ bụ n'akụkụ.

9ịgbado ọkụ

The epoch Counter na derivation bụ ihe na-eme ka rotation nwere ike na-enweghị ọhụrụ isi ihe. Na-eme ka ọ na-eme ka a ọhụrụ keywordpair si otu root na a re-published ad; peers na-ewe ọhụrụ keyword site na a gbanwee akụkọ. Rotation ya mere na-adịghị na-ewere onye ọrụ na-egosi ihe ọ bụla n'ihu a abụọ oge: na root na-emepụta otu ugboro per identity na epoch na-eme ihe na-egosi.

9.1 Ndị agadi na-achịkwa, na ihe ọ bụla na-akpali akpali

Ọ dịghị ihe ọ bụla na-akwụ ụgwọ mgbe a key na-agba ọsọ. A client na-emepụta decryption candidates si ugbu a epoch n'ihu epoch &minus; 3, otú a nkwurịta okwu na-agba ọsọ tupu a na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ mgbe ọ na-ere ya.

Ọ bụ ihe na-eme ka rotation dị mma iji mee ihe ọ bụla: n'enweghị ya, ọ bụla rotation ga-agba ọsọ ihe ọ bụla n'oge ụgbọelu. Ihe ọ bụla na-agba ọsọ na-agba ọsọ na-agba ọsọ maka ndụ nke identity, n'ihi na ozi ndị ọrụ nwere ike na-agba ọsọ na-agba ọsọ maka ha karịa otu onye na nchebe nwere ike na-agba ọsọ (Section 10.5).

10Nke a na-adịghị na-echebe

A akwụkwọ nke na-egosi naanị ihe a na-eme ka usoro na-adịghị na-egosi usoro, na ịgbado ọsọ a nchekwa ihe na interface bụ ihe karịa karịsịa karịsịa ya.

10.1 The root bụ a abụọ akara, na ọ na-eme ka ọ na-adịghị mma

Nke a bụ price nke imewe. A na-atụ aro na Section 2 na onye ọrụ ga-enwe ihe ọ bụla iji nweta: nsec naanị na-adịghị na-eme ka a post-quantum key, n'ihi na ihe niile bụ na ọ dịghị ihe ọ bụla na-ekwu na ọ dịghị ihe ọ bụla ọzọ na-egosi ya. Ọ bụrụ na ọ dịghị ngwaọrụ na-enweghị isi na ọ dịghị ihe ọ bụla nke isi nke Section 3.2 nwere ike na-emeghe, ihe na-egbochi na isi-emeghe na-enweghị isi bụ na-enweta. Ọ dịghị escrow na ọ dị na-enweghị ike na-enweta ya.

Na manual transfer otu ụzọ, nke a bụ mfe karịsịa karịsịa ọ nwere ike na-agba ọsọ. A ọrụ na-adịghị nympq1… Code n'ebe ọ bụla nwere n'ozuzu otu copy nke ya, na otu ngwaọrụ, na ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ na-eme ka ọ. nsec Ọ dịghị ọrụ; ọ bụ ihe niile imewe na-adabere.

Ọ bụrụ na onye na-akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali

10.2 Authentification, dị ka dị iche iche na nchekwa

Onye ọ bụla akara na Nostr bụ Schnorr n'elu secp256k1, na nke a na-adịghị agbanwe n'ebe a. Ndị na-egbochi na a quantum kọmputa nwere ike ịgbado ọkụ akara ma na-egbochi onye na-eji n'oge n'oge n'oge n'oge n'oge n'oge nile. Nke a na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ: onye na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na

Ọ na-egbochi ihe ọmụma na Section 4 nwere ike na-ekwe omume. The ikikere n'etiti a npub na a ML-KEM key bụ a secp256k1 akara, otú onye na-egbochi ndị a nwere ike ịmepụta ha nwere ike ịmepụta ihe ọ bụla nke ha nwere ike ịmepụta ya onwe ha. A na-egbochi na a ga-abụghị otu dị ka a na-egbochi ya.

10.3 Metadata

Gift wraping na-egosi onye na-enweta, onye na-enweta karịa otu p tag, ụdị, na timestamp nke n'ime ozi. Ọ na-adịghị na-egosi na ihe omume nwere, size ya, ma ọ bụ mgbe a relay nweta ya. Traffic analytics na-enweghị ihe ọ bụla akụkụ nke a imewe.

10.4 The offline mesh

Nymchat's Bluetooth mesh transport bụ a pụrụ iche protocol na ya onwe ya handshake, na ọ na-adịghị na-ekpuchi site na ọrụ a. Messages over the mesh bụ classic.

10.5 Messages na-enweta

Ciphertext na-egwu mgbe onye ọ bụla n'akụkụ bụ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ.

11Ọnọdụ dị iche iche

nzọụkwụN'ihi na
Na-emepụta Post-Quantum Key si Identity Key The derivation bụ algorithm a na-ewu ewu n'elu nsec, na a quantum mpaghara na-ewu nsec si ntụgharị npub, ya mere na-eme ka a na-ewu ewu n'elu n'elu post-quantum n'elu ya. Ọ na-ekpuchi ọ bụla nsec nsec na akwụkwọ a na-echebe na onye ọ bụla. Section 3.1.
Kpọọ root na ndị ọzọ na ngwaọrụ nke ọrụ site na NIP-44 Ọnụ ọgụgụ dị iche iche dị n'okpuru classic-only encryption bụ recoverable site na onye ọ bụla na-egbochi ozi na-egbochi isi ya mgbe ahụ, nke bụ ndị na-egbochi na-egbochi na-egbochi.
A na-emepụta ML-KEM keypair maka onye ọ bụla ngwaọrụ Ọ dịghị. Ngwaọrụ ga-enweta dị iche iche decapsulation keys, na otu agbanwe adịgide per identity ga-enweghị ike na-enweta ha niile. Peers ga-encrypt na nke na-ekwu, na ihe ọ bụla ọzọ ngwá ọrụ ga-enweghị ike ịhụ ihe na-esonụ. Otu root per identity, na-agba ọsọ site na ụzọ nke Section 3.2, bụ ihe na-agba ọsọ nke a.
Wrap the root n'okpuru a pin Rejected. A efu ụkwụ PIN bụ banyere 13 bit n'akụkụ ndị na-akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akpali akp
Mbụ ntụ ntụ ntụ ntụ ntụ ntụ ntụ ntụ ntụ ntụ ntụ 1,184 bytes bụghị a ahaziri ahaziri, na ọ ga-agba ọsọ onye ọ bụla n'ebe ndị na-agba ọsọ Nostr na-agba ọsọ nke adreesị nke a na-egosi dị ka 32 bytes.
A Key Directory ọrụ Reintroduces the authority the network exists to avoid. Ọ bụrụ na onye na-ekwu na searchup na-ekwu na onye nwere ike ịhụ ozi.
Kpọmkwem kpọmkwem ka ọ bụla ozi Ọ bụghị ihe ọ bụla na-agwọ: The sender needs the Ndị na-enweta key tupu ozi mbụ, nke bụ n'ụzọ zuru ezu na ọ dịghị ozi tupu iji mee ya.
In-band ikike Negotiation Ọ na-emepụta n'okpuru ala. A na-atụgharị nke nwere ike ịgbado ọkụ nke ike na-eme ka ọ na-agba ọsọ ọsọ.
Post-quantum naanị, ọ dịghị classic leg Tụkwasịnụ ọtụtụ afọ nke analysis nke secp256k1 n'agbanyeghị maka a na-eto eto na-eto eto. A hybrid faịlụ naanị ọ bụrụ na ha abụọ Ọ dịghị.

12Ịmepụta Parity

Nymchat na-enye abụọ n'akụkụ nke a na-emepụta - otu na JavaScript maka ngwa web, otu n'ime Dart maka ngwa mobile, gụnyere a na-emepụta mkpuchi ML-KEM-768.

The Dart ML-KEM ntụziaka na-atụ anya na ndị ọrụ Ọnọdụ ACVP ọkọlọtọ nkọwa maka ML-KEM-768 (ML-KEM-*-FIPS203) — 25 key-generation, 25 encapsulation na 10 decapsulation cases, na-agba ọsọ dị ka ha onwe ha suite. Nke a bụ vectors NIST na-emepụta iji kwadoro a nkwurịta ụkpụrụ, ya mere n'ihi na ha na-agba ọsọ bụ nkwurịta ụkpụrụ bụ nkwurịta ụkpụrụ bụ kpọmkwem, ọ bụghị naanị nkwurịta ụkpụrụ na ndị ahịa abụọ na-agba ọsọ. N'okpuru nke a, a na-agba ọsọ nke ule vectors - semen derivation, encapsulation, na-eji na-eji na-ekpo ọsọ nkwurịta ụkpụrụ - na-emepụta site na JavaScript nkwurịta ụkpụrụ na-agba ọs nympq1… Otu n'ime ọ bụla ngwọta na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ.

Ọ bụ ihe na-ekwu na-ekwu na ngwaọrụ &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na &ldquo;n'ihi na

Nymchat bụ Open Source n'okpuru AGPL-3.0. The cryptographic core nke a na-egosi js/nym-crypto.js na js/modules/pq.js na web ahịa, na lib/core/crypto/ na lib/features/identity/pq_registry.dart na mobile ahịa.

N'ihi na a obere, non-technical nkọwa, ịhụ na Knowledge Base Page na Quantum-eguzogide encryption.