知識ベース:量子抵抗暗号化

Nymchat テクニカル ホワイトペーパー

Post-Quantum Key Agreement in Nymchat(ニムチャット)

ディストリビューション ML-KEM-768 公開鍵をディレクトリやレジストリなしでNostr上に配布し、公開価値が明らかにされない秘密からそれらを種子にする。

バージョン 1.0 2026年8月 Nymchat 3.74+ について

メッセンジャーにポスト量子キー交換を追加することは、ほとんどの場合、暗号化の問題ではありません。原始は標準化され、ライブラリは存在します。 2位 この論文は、Nymchatがその答えをどのように説明するか - 第二の鍵がどこから来るか、それがそれを必要とする人々にどのように届くか、その結果についてインターフェイスが何を主張できるか - そして、最後のセクションでは、その結果が何を保護しないかを説明します。

1問題

私たちのプライベートメッセージは暗号化されています。 NIP-44, which has two separable halves. The half that scrambles the plaintext — ChaCha20 with a HMAC-SHA256 tag, keyed through HKDF (RFC 5869) — 量子コンピュータによって意味深く脅かされていない; グローバーのアルゴリズムは、シンメトリックキーに対して平方根のスピードアップをコストし、256ビットがそれを吸収する。 賛成 キーの上は、円曲線 Diffie-Hellman over シンボル256K1, and Shor's algorithm solves the discrete logarithm outright. Recovering one private key from its public counterpart retroactively exposes every shared secret that key ever produced. シャーのアルゴリズムは、独自のロガリズムを完全に解決します。

この脅威は、そのようなマシンが存在するまで延期されません。ストレージを持つ敵は、今日暗号化テキストを記録し、その能力が到着するたびにそれを解読することができます。今でも重要なものを送信するものは、すでに損なわれています。

1.1 この論文が答える質問

トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > (フィギュア203)は、すぐに分布の問題を引き起こす:

質問

今日のアリスにメッセージを送るには、彼女のNPUBを1つ必要とします。ポスト量子交換を追加し、彼女のML-KEMの公開鍵を2つ必要とします。

NPUB は自己コンテンツです. あなたはそれを紙に書き、大声で読むか、またはスクリーンからスキャンすることができます. それは誰でもあなたのために暗号化する必要があるすべてです. ML-KEM-768 公用キーは 1,184 バイトです. それは大声で読めません、それはユーザ名に適合しません、そしてそれは 32 バイトしかないアイデンティに加えて QR コードに属しません.

より困難な部分は、2番目のキーが3つの異なる問題をもたらし、この論文の残りはそれらに対する答えです。

2デザイン制限

答えを形作った4つの制約は、コードが書かれる前にほとんどの明らかなデザインを排除します。

  1. なるべく少ない秘密。 すべての追加の秘密は、あなたの歴史を失う別の方法であり、NSECをバックアップすることを知っている人は、他の何かをバックアップすることを知らないでしょう。セクション3.1は、この秘密を完全に満たすことができないことを示しています - nsecから派生されたポストクンタンキーは、ポストクンタン保護を提供しません - したがって、デザインは、正確に1つの秘密を費やし、それ以上はありません:アイデンティティーごとに一度生成された単一のキー材料の一部は、NSECと同様の形で、同じ場所で提示されますので、どのように一つを保持するかを知っている人は、他のものを保持する方法を知っています。セクション10.1は、その費用について正直です。
  2. 権威なし どのキーが誰のものかを伝えるために信頼できるサーバーはありません. Any such server becomes the point at which messages can be redirected.
  3. 複数のデバイス、一つのアイデンティティ Nostr アイデンティティは、いくつかのクライアントから同時に使用されることがよくあります. どんな重要な材料が存在しても、すべてのクライアントで同一で終わり、それらを運ぶパス自体は、その機能が防衛している敵によって読めないでください。
  4. 交渉なし どのシッパーをサポートしているか?”のバンド内の交換は、攻撃者が弱いオプションを強制するためにストリップできる表面です。

3独立秘密のルート

負荷を負う決定は、ML-KEMのカプセル化キーは、公的価値が明らかにされない重要な素材から種まっていることである。

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)

ルートは nsec のようにユーザーに提示されます: ベッキー32 ヒューマン読みやすいプレフィックス nympqだから、読むと、 nympq1…同一の公開相互作用の背後にあるアイデンティティスクリーンで nsec に表示され、同じコントロールでコピーされ、決してログインされず、決して明確な場所に送信されたことはありません。

塩は意図的にドメイン分離されているので、他の秘密は同じキーペアを引き出せない。 epoch コントロールドライブの回転(セクション9)

3.1 なぜ鍵はアイデンティティキーから引き出せないのか

明らかなデザインは、ユーザーがすでに持っている秘密からキーパールを種子にすることです。

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

それは4つの理由で魅力的で、それらはすべて現実的です: バックアップする新しいものは何もありません、なぜなら nsec はすでにバックアップです; 構築によって同意するすべてのデバイスは、同期プロトコルが間違っていない; アイデンティティーごとに置き換え可能な1つの発表は明らかに正しいので、デバイスはキーについて異議を唱えることができない; 公開される前に既存のキーは、クライアントが最初に自分自身に何かを封じることができます。

すべての4つの利点は、一つの理由で無価値である。 ショーのアルゴリズムは、出版されたnppub に対抗して nsec を生成する。 種子出力は、 nsec に対抗する公的なアルゴリズムである。 したがって、古典的な半分を破る敵は、他の誰もが実行している同じ HKDF を実行することによって、ポスト量子半分を再構築する。

ルールはすべて由来

ML-KEM のカプセル解除キーは、 nsec から生ずるものではなく、クラシックのみの暗号化の下で転送されることもない entropy から来なければならない。

通常の NIP-44 メッセージ内のユーザーのデバイス間で同期される独立して生成された秘密は、追加のステップで同じ失敗です: 敵は今日そのメッセージを記録し、古典的なキーを後で回復し、ルートが落ちる。

3.2 ユーザーの他のデバイスへのルートの取得

セクション2の制約3―一つのアイデンティティ、いくつかのデバイス―は、ここで数値学で満足することはできない、なぜなら、鍵はすでにデバイスが共有しているものの機能ではないからである。 nympq1… コード自体

The root is displayed as nympq1… nsecのそばに、そして2番目のデバイスが同じパネルに貼り付けることを受け入れます. それは全体のメカニズムです. コードが与えられていないデバイスは、セクション 4.2 で説明されている参加できません.

手動転送は、最初のステップではなく、意図的なステップです。セクション3.1のルールでは、ルートはクラシックだけの暗号化の下では決して移動しないことがあり、これを自動化するあらゆるメカニズム、すなわちレレイヤーを通じて同期し、アイデンティティキーに巻き込むことで、ユーザーが実行するステップは、保護が実在する理由です。

フォーマットは、包装されたパスへのスペースを残します: レコードは包装のリストを持ち込むことができます、それぞれは、ユーザーが別のデバイスで再生できるキーの下でAEAD blob - 例えばpasskey PRF出力。 nympq1… コードは唯一通過する方法です。セクション10.1は、そのコストを述べています。

レコード自体は、独自の設定カテゴリに存在し、 nymchat-pq-root, and syncs the way the other categories do. Even carrying no wraps it does necessary work: its presence is how a second device learns that this identity already has a root, which is what stops it minting a rival one (Section 3.3).

デザインノート:新しいキーを使用できない一つのカテゴリ

THE nymchat-pq-root カテゴリ Must ない その行は根の唯一のコピーを運ぶので、根から引き出されたキーの下に封じ込むことは、鍵が箱の中にあるロックである:それを書いたものも含めて、どのデバイスもそれを開くことができず、それは古典的に封じられている - NIP-44自体 - またはまったくありません。

他のすべての設定カテゴリでは、ルート由来キーを使用することができ、また使用すべきです. This is the single exception, and it is an exception about circularity rather than about strength. これは単一の例外であり、強さよりも循環性についての例外です。

3.3 世代と養子縁組

ブートで、持続可能なアイデンティティを保持すると、クライアントは次の順序で動作します。

  1. 既存の検索結果 nymchat-pq-root レコード
  2. レコードが発見され、このデバイスはそれを取り除くことができます。 ――それを採用し、このアイデンティティをポスト量子能力として宣言する。
  3. レコードが見つかり、このデバイスはそれを開封できません。 新しいルートを生成しないで、広告を掲載しないでください。 nympq1… すでに持っているデバイスからのコード。
  4. レコードなし ルートを生成し、レコードを公開し、発表し、 nympq1… ユーザーに1回送信するコードで、保存できます。

ステップ3は容易に間違えるステップであり、各実装に残るのではなく、順序が書き込まれる理由です。それぞれがルートを生成することを決定する2つのデバイスは、1つのアイデンティティの下で2つの独立したルートを生成し、これはこの順序が存在する失敗を防ぐために存在する。

4能力発表

The public half of the derived keypair is published as an addressable. 由来のキーペアの公開の半分は、アドレス可能なものとして公開されます。 ニップ-01 イベント - kind 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 は、リレーが 1 つのイベント (kind, pubkey, d-tag) を保持することを意味しますので、共和は以前の発表を置き換えます. それゆえ、各アイデンティティには正確に 1 つの現在のレコードがあります。

署名は強制的です。 イベントはアイデンティティキーで署名されているので、この ML-KEM キーがこの npub&rdquo に属しているという主張は、 npub 自身と同じくらい強力です。別のカプセルキーを置き換えるには、secp256k1 署名を造る必要があります。

発表は終了。 7日目 NIP-40 expiration は、24 時間ごとに再公開され、それ以前のクライアントではなく、まだ実行されているクライアントについての声明を記録します。

遅れた発表は、決してキーを持たないものと同様に読まれる: 同僚は、すべてのログインが読み取ることができる普通の NIP-44 を送信し、クライアントは、次回の接続で、再公開するときに、ポスト量子交換を再開します。

記録が存在しないと、記録はその名の下に送信されたメッセージは、どちらの側面でもエラーなしで失われる:削除、リセット、またはその根が置き換えられているデバイスは、クライアントに注意するのではなく、レイヤー自身が記録を落とすことを許可する7日間。

キーフィールドはその形式の名前を付けます。 フィールドは pk2, and the digit is part of the contract rather than decoration: it names the payload format the key may be used with. A reader who does not recognize the field concludes &ldquo;Nymchat client, no post-quantum key&rdquo; and sends ordinary NIP-44, which every login can read. That is the correct failure direction, and it is worth stating as a rule the format numbering exists to enforce: an unrecognized capability claim must cost protection, never delivery. A key a peer cannot use is worse than no key at all, because the message it produces is lost with no error on either side. 読者はフィールドを認識しないと結論づけます。

4.1 欠席は有意義で、三重評価

細かいが重要な詳細:この発表は、すべてのNymchatクライアントによって公開され、ポスト量子能力を持つクライアントだけでなく、キーフィールドはオプションです。

観察手段行動を送る
Announcement with a Key (キー付き) Nymchat、ポスト量子能力 ハイブリッド
オリジナルタイトル: No Key at All Nymchat, classical only — post-quantum off, or a device not yet linked to the identity's root. アイデンティティの根元にまだつながっていないデバイス クラシック NIP-17
発表なし 未知のクライアント 誰でもNostrまたはBitchatユーザーになれます。 クラシック, plus a compatibility wrap

キーレスの発表は、送信者がNymchatを実行しているという署名された声明であり、送信パスが仮想的なクロスプロトコル包装を跳ね落とすことを可能にします。

4.2 ルートを開けないデバイスは黙っている

発表は置き換え可能である:アイデンティティあたり1件のイベント、最後の書き込み勝利。これが単一レコードの設計が機能する原因であり、それが公開する場合に非リンクデバイスを危険にさらす原因でもある。自分自身のために発明したキーを発表したデバイスは、実際のレコードをバラバラにし、他のデバイスが開くことができないキーの下ですべての同僚を暗号化するように送る。

したがって、ルートを知っているデバイスは存在しますが、開くことができないので、まったく広告を公開しません。それは破損し、アプリケーションからロックされていません: それはまだキーを持っているすべてのメッセージを読み、それでも古典的に送信し、ユーザーにリンクするように促します。

5発見と送信決定

クライアントは2つの方法で peer's keys を学びます. A standing subscription covers the people a user actually corresponds with - open conversations and group members - so their announcements arrive as ordinary events. For a peer met for the first time, a one-shot query runs at send time, limited to 2.5 seconds; if it does not resolve, the message goes classical, which is the behavior that existed before post-quantum was added rather than a new failure mode. クライアントは peer's keys を2つの方法で学ぶことができます。

ネガティブな結果は、永遠ではなく10分間キャッシュされます。新しいデバイスを接続するユーザ、またはブラウザ拡張子のログインからローカルキーに移動するユーザは、会話の真ん中にポスト量子能力を有し、永久にキャッシュされた「ノー」は、広告の生涯にわたって古典的な暗号化を保持します。

5.1 なぜダウングレード攻撃がないのか

ルーティングの決定は、一つの質問に縮小されます:

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

能力交渉もなく、サポートされているアルゴリズムのリストもなく、攻撃者が弱い道を強制するためのフィールドもない。 削除されたまたは保留された広告の失敗モードは、ハイブリッドメッセージが偽造可能なものにダウングレードされるのではなく、メッセージが古典的になることです。

逆も持っているし、より重要である:クライアントがハイブリッドを送る たった 鍵を握っているとき、鍵を握ることは、受信者がカプセルを解除できる証拠です. メッセージが読めない人に量子後に送信される状態はありません。

6ハイブリッド建設

Nymchat は NIP-44 を置き換えるものではありません。 未修正の NIP-44 暗号テキストは内部層であり、ML-KEM は外部 AEAD をその周りにキーします。

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)

両方の秘密はまだメッセージを読み取るために回収されなければならない:外層はNIP-44の暗号テキストのみを生成し、その開きには古典的なECDHが必要です。secp256k1を破る量子敵は内鍵を得て、まだML-KEMに直面します。

受信者の ML-KEM キーは長生きしますが、各メッセージには独立した暗号テキストがあり、したがって独立した暗号テキストがあります。 kem_ssThat's what makes deriving the nonce rather than randomizing it sound. それはそれをランダム化するのではなく、ノンセを引き出すことである。 ChaCha20 - ポリ1305 キーは (キー、ノンセ) ペアの再利用によって破られ、ここでキー自体はすべてのメッセージに新しいので、ペアは繰り返すことができません。

6.1 なぜ階層は別々に残るのか

代替方法は、両方の秘密を一つの会話キーに混合し、それをNIP-44に送信することです。

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

その構造は暗号化のように響くが、構造的な問題は一つある:それは必要である。 ecdh_xトップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > (NIP-07)または遠隔署名者(NIP-46)は決してその値を返しません. It performs NIP-44 on the caller's behalf and hands back a encryption text, which is the whole point of holding the key somewhere the application can't reach. それは、呼び出す人のためにNIP-44を実行し、暗号化テキストを返します。

したがって、秘密を混ぜ合わせると、署名者の中にアイデンティティキーを保持するすべてのログインは排除される、つまり最も注意深いユーザーは、キーの由来に関する作業の量がそれを変えることはできません。 レイアリングは、依存性を除去します: NIP-44 は全体であり、アイデンティティキーを保持するものによって生成され、署名者も含まれ、KEM の半分はクライアントが直接保持している回復コードから計算されます。

コストは帯域幅であり、それは小さくありません ML-KEM 暗号テキストは 1,088 バイトであり、すべてのメッセージに基盤64url コードされ 1,451 文字に移動します。外部の AEAD は 16 バイトの Poly1305 タグを追加し、NIP-44 パイロードを 3 つに拡大します。 50 文字のメッセージは 176 バイトから 1,712 文字に増加し、2000 文字のメッセージは 2,820 から 5,238 文字に増加します。

6.2 Self-Describing Payloads シングル

THE pq2. プレフィックスは、展開を増加させます:それは自己記述であるため、クライアントは、タグを信頼するか、または peer がサポートするものを覚えているのではなく、パイロットをチェックすることによって、解読パスを選択します。

暗黙の拒否

ML-KEM decapsulation は決して失敗しないように設計されています: 誤った暗号テキストを考慮すると、Fujisaki-Okamoto 変換は、誤ったキーが KEM 層に表面化されないため、誤ったキーは、NIP-44 内部の HMAC エラーとして表面化され、これは間違ったクラシックキーの表面と同じです。 呼び出しは両方を同一に扱うので、エラーは区別信号を持たない。 それはまた、セクション 9.1 の候補リストを操作可能にするものです: クライアントはそれぞれのキーを順番に試みて、NIP-44 がどちらが正しいかを言わせます。

6.3 贈り物包装の両層

A NIP-17 個人的なメッセージはA NIP-59 gift wrap: an unsigned rumor, sealed under the sender's identity key (kind 13), then wrapped under a throwaway key generated per message (kind 1059). On a login that holds the identity key directly, Nymchat hybridizes both layers, each with its own encapsulation. 送信者のアイデンティティキー(kind 13)の下に封印され、その後、メッセージ(kind 1059)ごとに生成される投下鍵の下に封印される。

A hybrid NIP-59 gift wrap: the rumor sealed under the sender's key, that seal wrapped under a per-message ephemeral key, both layers carrying a NIP-44 ciphertext inside a post-quantum AEAD. kind 1059 — wrap  ·  signed by a per-message ephemeral key content = pq2.<kem_ct>.<aead>   inner = NIP-44(eph, recip)   outer key = ML-KEM(recip) kind 13 — seal  ·  signed by the sender's identity key content = pq2.<kem_ct>.<aead>   inner = NIP-44(sender, recip)   outer key = ML-KEM(recip) rumor — unsigned the message: kind, content, tags, author pubkey unsigned on purpose — a signature would be portable proof
両方の暗号化レイヤーはハイブリッドであり、それぞれ独立したML-KEMカプセルを持っています。外側のレイヤーは投げ出せる秘密に鍵をかけられていますので、包装は送信者を明らかにしません。

署名者ログインは外層のみを得ます。署名者によって生成される密封は、通常の NIP-44 として - アプリケーションはそれを作成するキーを決して見ない - したがって、そこでハイブリッド化することはできません。 これは問題の攻撃に対して何のコストもかかりません:密封は包装を通じてのみアクセス可能であり、包装はレコーダーがストアしているものです。 記録されたトラフィックを保持する敵は、密封が攻撃する前にML-KEMを破らなければなりません。

7グループメッセージと部分的なカバー

グループメッセージは単一の暗号テキストではありません。 それはすべてのメンバーに発行された同じ単一テキストであり、各コピーはそのメンバーの独自のML-KEMキーにカプセル化されています。

これは、無知な実装が間違っているという会計上の問題を生み出します。10人のメンバーのうち8人がハイブリッドコピーを受け取る場合、メッセージは ない 対戦相手は、すべての10点で同一である単純テキストの1つの古典的なコピーが必要なので、メッセージは保護される場合に限ります。 コピーです。

したがって、Nymchatはファンアウト中にメッセージ毎のカバーを追跡します - カウントは包装が構築されている間にのみ知ることができます - バッジは、メッセージが保護されていると主張する代わりに、10人のメンバーの8に量子抵抗を報告します。 受信 group message (only the sender counts the fan-out), the interface reports partial rather than full protection. Claiming full protection on the strength of one's own copy alone would be an exaggeration about the message as a whole. グループメッセージ(送信者だけがファンアウトを数える)、インターフェイスは部分的ではなく完全な保護を報告します。

7.1 シールドの報告

シールドは真実を語る。 メッセージ, 送信したソフトウェアについてではなく:

判決は、 peer が後に広告するものから再計算するのではなく、メッセージが封印されるときに記録されます。すでに存在するシッパーテキストは以前よりも保護されることができず、古いメッセージを新しい広告の強さを再構築するインターフェイスは、リレー上のバイトについて何か偽りを主張するでしょう。

上記のグループルールはそれを置き換えるのではなく、グループメッセージがすべてのメンバーのコピーが存在したときにのみ完全に保護され、カバー数がない受信グループメッセージが部分表示されます。

8自分に宛てたコピー

クライアントが保存するいくつかのものは、ユーザ自身のアイデンティティに暗号化されます:同期設定、会話リスト、グループキー、メッセージアーカイブ これらは、ほとんどの単一メッセージよりもユーザーのことをより多く持ち込んでいますので、それらをクラシックに残すことは、メッセージ自体がどれほど慎重に封印されたかに関係なく、それらを最も弱い保存アーティファクトにします。 nymchat-pq-root 単独で生産できる鍵の下に封じ込めることはできない。

これらのアーティファクトは、デザインが最も重要な場所です。設定ブロブまたはアーカイブ行は、何年も同じ場所に座っており、これは、収穫して後で解読された敵が収集する物の正確な形です - 少なくともユーザー自身の頭の中では、単一のメッセージよりもはるかに多い。

One constraint governs the format here rather than the key. Self-addressed copy must be readable by アカウント上のデバイスは、各デバイスがその広告が運ぶリストに開くことができるものを広告し、アカウントは、すべてのデバイスが読めるものだけを書きます。

A constraint worth stating(言及する価値のある制約)

アイデンティティを保有するデバイスであって、ルートではなく、ルートに閉じ込められたものを開くことはできない、それ自身の設定を含む。これは意図的な結果であり、監視ではなく、セクション3.3には、新鮮なルートを引く代わりに、リンクするためのこのようなデバイスプロンプトが含まれています:第二のルートはブロブを読み取ることができず、アイデンティティのキー材料を2つに分割するだけです。

ブラウザ拡張子またはリモート署名器(NIP-46)を動かすデバイスは、secを取得するものではありませんが、回復コードを保持し、セクション6.1の層構築の下では、すべてのポスト量子半分が必要です:署名者は常に持っているようにNIP-44層を生成し、クライアントは外部層自体をキーします。

9ローテーション

THE epoch 従来のカウンターは、新しいキー素材なしで回転を可能にするものです。増加すると、同じルートから新しいキーパールと再公開された発表が得られます。 peers pick up the new key from the replaceable record. Rotation therefore does not ask the user to write anything down a second time: the root is generated once per identity and the epoch does the turn.

9.1 古い時代は保存され、何も再暗号化されない

クライアントは、現在の時代から「Epoch &minus; 3」まで解読候補を作成するので、回転の直前に封印されたメッセージは、送信時に現在のキーペアに対してまだ開きます。

このウィンドウは、回転を絶対に安全にするもの:それなしでは、すべての回転は、既に封印されたものは、アイデンティティの生涯にわたって読み取ることができるので、ユーザーがもはや開くことができないメッセージは、保護が逆に改善できないメッセージよりも厳密に悪くなります(セクション10.5)。

10何を守らないのか

デザインが達成するものだけをリストする論文は、システムを記述するものではなく、インターフェイス内のセキュリティプロパティを過大評価することは、それを省略することよりも悪い。

10.1 根は第二の秘密であり、それを失うことは回復できない。

これがデザインの実際の価格です。 ユーザーが守るべきものは一つしかないというセクション2の制約は満たされない: nsec だけでは、ポスト量子キーを再構築することはできません、なぜなら、全体的なポイントは、公的価値や他の秘密がそれを暴露しないということです。 もし、デバイスがルートを保持し、セクション3.2の包装のいずれも開くことができないなら、ルート由来のキーに封印された材料は回収できない。

手動転送で唯一のパスで、これは最初に読み取れるよりも明確です。 nympq1… どこにでもあるコードは、1つのデバイスに1つのコピーを持っており、そのデバイスを失うと、そのデバイスに閉じ込められたすべての量子メッセージ、設定ブロブ、およびアーカイブ行が失われます。 nsec それは役に立たない、それが全体のデザインが基づく資産である。

攻撃者は利用可能な最も安価な道を攻撃するので、システムはその最も弱い回復ルートの価値に値する - たとえば、記憶に残るパスフレーズは、パスフレーズの価値が何であれ全体を置き、包装された行は、リゾート時に収穫した後に解読された敵が収集し、オフラインで磨く精品です。

10.2 機密性とは異なる認証

Nostrのすべての署名はsecp256k1を超えてSchnorrであり、これはここで変わっていない。量子コンピュータを持つ敵は署名を偽造し、リアルタイムでユーザーを仮装することができる。ハイブリッドキー交換の敗北は、収穫の後で、今日のトラフィックを記録する攻撃者は後で読むことができない。それは、すでにマシンを持っている敵に対してメッセージを忘れられないようにしない。この区別は、アプリケーションに意図的に持ち込まれています - パッドロック指標は認証を報告し、シールドは機密性を報告し、メッセージは互いなしで持つことができますので、それらは別々のグリフです。

それはまた、セクション4の発表が約束するものに限界をもたらします。 npub と ML-KEM キーの間の結合は secp256k1 署名なので、それらを偽造できる敵は、自分自身の鍵を置き換えることができます。

10.3 メタデータ

贈り物の包装は、送信者を隠し、受信者を一つの外側に置く。 p 内部メッセージのタグ、種類、タイムスタンプは、イベントが存在していること、その大きさ、またはリレーが受信したときを隠すものではありません。

10.4 オフラインメッシュ

NymchatのBluetoothメッシュ輸送は、独自のハンドシェイクを持つ別々のプロトコルであり、この仕事にはカバーされていません。

10.5 既に送信されたメッセージ

Ciphertext は、両側がまだ古典的である間記録されているが、常に古典的である。 既に存在し、再封印することはできません。 保護は、両側がポスト量子キーを保持したメッセージから始まりますが、機能がオンになった時ではありません。

11考慮された代替案

アプローチなんでダメ
アイデンティティキーからポスト量子キーを引く The derivation is a public algorithm over the nsec, and a quantum opponent recovers the nsec from the published npub, so breaking the classical half hands over the post-quantum half with it. それはこの論文のあらゆる分布問題を解決し、誰からも守られなかった。
ルートをNIP-44経由でユーザーの他のデバイスに送信する 同じ理由で異なる衣装で拒否される. クラシックだけの暗号化で送信されたルートは、そのメッセージを記録し、後にそのキーを破る誰でも復元することができる。
各デバイスで別々に生成される ML-KEM キーパール デバイスは異なるカプセル解除キーを保持し、アイデンティティごとに交換可能な 1 つの通知はそれらをすべて持ち込むことができません。 peers は、最後に公開されたキーを暗号化し、他のすべてのデバイスは結果を読み取ることができません。
「Wrap the root under a PIN」 拒否された 4 桁の PIN は、巻き込まれた行を保有するオフライン攻撃者に対して 13 ビット程度です。
npub を両方のキーを持ち込むように拡張する 1,184 バイトは共有可能な識別子ではありませんし、32 バイトとして定義されているアドレスのすべての既存の Nostr クライアントの解析を破ります。
キーディレクトリサービス ネットワークが回避するために存在する権限を再導入します. Whoever answers the lookup decides who can read the message. 誰が検索に答えるかは、誰がメッセージを読み取ることができるかを決定します。
各メッセージにキーを付ける 解決しない: 送信者が必要 受信者 最初のメッセージの前に鍵を置く、それはそれを運ぶ前のメッセージがない場合の正確なケースです。
バンド内交渉能力 ダウングレードの表面を作成します. 能力の旗を奪うことができる攻撃者は、クラシックなパスを強制します。
Post-quantum only, no classic leg decades of analysis of secp256k1 in exchange for a much younger primitive. ハイブリッドは失敗する場合にのみ 両方 ファイア

12実施平等

Nymchat はこの構造の 2 つの独立した実装を提供します - ウェブアプリケーションのための JavaScript で 1 つ、モバイルアプリケーションのための Dart で 1 つ、ゼロからの ML-KEM-768 ポートを含む。

Dart ML-KEMの実装は、公式に対し検証されています。 NIST ACVP トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ >ML-KEM-*-FIPS203) — 25 key-generation, 25 encapsulation and 10 decapsulation cases, run as their own suite. These are the vectors NIST publishes to validate a implementation, so passing them is evidence the port is correct, not merely evidence that the two clients agree with each other. さらに、テストベクターの共有フィクチャー — seed derivation, encapsulation, both payload formats, and complete gift wraps — is generated from the JavaScript reference and checked by both test suites. The root secret extends that fixture rather than replacing it: root to seed, root to keypair, the root's public fingerprint, and the derived key, nonce and associated data of the outer layer are vectors of their own, so the two clients cannot disagree about what a nympq1… 両方の実装の差異は、他のクライアントが開くことができないメッセージを生成するのではなく、ビルドを失敗させます。

指紋はこれらの間で名前を挙げる価値があります。これは、デバイスが「これは私が持っているルートです」と語るものであり、これは異なるものであり、他のクライアントの指紋を再現できないクライアントは、まったく記録がないように完璧に良い記録を読み取るでしょう - そして、セクション3.3に従って、第二のルートをミントし、アイデンティティを分割します。

ニムチャット OPEN SOURCE AGPL-3.0 に基づき、ここで説明されている暗号核は、 js/nym-crypto.js そして js/modules/pq.js クライアントのサイトで、そして、 lib/core/crypto/lib/features/identity/pq_registry.dart モバイルクライアントで

より短く、非技術的な説明については、参照してください。 量子抵抗暗号化に関する知識ベースページ.