NIP-17は、送信者privacyのためにNIP-59 gift wrappingを使うprivate direct messagesを定義します。外側のイベントで送信者が露出するNIP-04 DMとは異なり、NIP-17はrelayや受動的な観測者から送信者を隠します。

仕組み

メッセージは複数の暗号化層で包まれます。

  1. 実際のメッセージcontentはkind 14のrumor eventに入る
  2. sealがそのcontentを受信者向けに暗号化する
  3. gift wrapがsealをさらに暗号化し、使い捨てkeypairから公開する

外側のgift wrapはランダムな使い捨てkeypairを使うため、relayや観測者は誰がメッセージを送ったか判定できません。

メッセージ構造

  • Kind 14 - 包まれた層の最内側にある実際のDM content
  • Kind 1059 - relayへ公開される外側のgift wrap event
  • 包装フロー内のpayloadにはNIP-44 encryptionを使う
  • 仕様は、reactionsのような対話的DM機能をよりよく支えるため改善されてきた

セキュリティと信頼モデル

  • gift wrapの使い捨てkeypairにより、relayは送信者を見られない
  • 受信者は見える(gift wrapのpタグ内)
  • メッセージtimestampは一定の範囲でランダム化される
  • relay上ではvisibleなthreadingや会話グループ化がない

受信者は、unwrapした後には誰が送ったかを知ります。NIP-17が隠すのはネットワークに対する送信者identityであって、相手参加者に対してではありません。NIP-17を「private DMs」と呼ぶとき、この違いは重要です。

なぜ重要か

NIP-04 DMはcontentを暗号化しても、metadataは可視のままです。

  • 送信者pubkeyは公開される
  • 受信者pubkeyはpタグに入る
  • timestampは正確なまま

NIP-17は、その代償として実装が複雑になる一方、送信者を隠します。

この複雑さは実際のプライバシー改善をもたらします。relayはwrapped messageが誰宛てかは見えても、kind 4メッセージのように外側metadataだけで直接的な送信者-受信者グラフを構築できません。

相互運用メモ

NIP-17は、private messaging向けのinbox relay listも定義します。clientはkind 10050イベントを公開し、送信者がDM配信先としてどのrelayを使うべきか分かるようにします。DM routingをpublic content routingと分離することで、private trafficを誤った場所へ公開するリスクを減らせます。


Primary sources:

Mentioned in:

See also: