generated at
NIP-17

> Private Direct Messages

nostrのユーザ同士で、他の人からは見られないダイレクトメッセージ(DM)を実現するための仕様。
昔のNIP-04は非推奨(unrecommended)になり、本仕様の利用が推奨されている。

hr
翻訳 commit=7dfb11b

プライベートなダイレクトメッセージ
本NIPは、NIP-44の暗号化とNIP-59の封印(seal)とギフトラップを使ったあん謳歌されたダイレクトメッセージ方式を定義する。

ダイレクトメッセージのkind
イベントの種類(kind) 14 はチャットメッセージである。 p タグはメッセージの一人以上の受領者を示す。
_.js
{ "id": "<usual-hash>", // 訳注:通常のハッシュ "pubkey": "<sender-pubkey>", // 訳注:送信者の公開鍵 "created_at": now(), // 訳注:現時刻 "kind": 14, "tags": [ ["p", "<receiver-1-pubkey>", "<relay-url>"], // 訳注:受領者 1 の公開鍵 ["p", "<receiver-2-pubkey>", "<relay-url>"], // 訳注:受領者 2 の公開鍵 ["e", "<kind-14-id>", "<relay-url>", "reply"] // リプライの場合 ["subject", "<conversation-title>"], // 訳注:会話のタイトル ... ], "content": "<message-in-plain-text>", // 訳注: 平文のメッセージ }

.content は平文でなければならない(MUST)。 id created_at は必須である。

メンション、引用、スレッド構造の構築のタグはNIP-10に従わなければならない(MUST)。

kind 14のイベントは一切署名してはならない(MUST)。署名されたなら、メッセージがリレーに漏洩し、完全に公開状態になるかもしれない。

チャットルーム
pubkey + p タグの組はチャットルームを定義する。新しい p タグが追加された場合あるいは既存のものが削除された場合、クリーンなメッセージ履歴を持つ新しいルームが作られる。

クライアントは同じルームのメッセージを継続するスレッドで描画すべきである(SHOULD)。

暗号化
NIP-59に従い、未署名 kind:14 チャットメッセージは、それぞれの受領者と送信者に対し、封印( kind:13 )され、ギフトラップ( kind:1059 )されなければならない(MUST)。

_.js
{ "id": "<usual hash>",   "pubkey": randomPublicKey, // 訳注: ランダムな公開鍵   "created_at": randomTimeUpTo2DaysInThePast(), // 訳注: 過去2日以内のランダムな時刻 "kind": 1059, // ギフトラップ   "tags": [     ["p", receiverPublicKey, "<relay-url>"] // 訳注: 受領者の公開鍵   ],   "content": nip44Encrypt(     { "id": "<usual hash>",       "pubkey": senderPublicKey, // 訳注: 送信者の公開鍵       "created_at": randomTimeUpTo2DaysInThePast(), // 訳注: 過去2日以内のランダムな時刻       "kind": 13, // 封印       "tags": [], // タグはなし       "content": nip44Encrypt(unsignedKind14, senderPrivateKey, receiverPublicKey),       "sig": "<signed by senderPrivateKey>" // 訳注: 送信者の公開鍵(senderPrivateKey)で署名される     },     randomPrivateKey, receiverPublicKey   ),   "sig": "<signed by randomPrivateKey>" }

暗号化アルゴリズムはNIP-44の最新バージョンを使用しなければならない(MUST)。

クライアントは kind:13 の公開鍵が kind:14 の公開鍵と同じであることを検証しなければならない(MUST)。さもなければ、単純に kind:14 の公開鍵を変更することによって、どんな送信者でも他者になりすますことができてしまう。

クライアントは created_at の分類によってメタデータが漏洩しないようにするため、封印とギフトラップの両方に対して過去二日以内で created_at をランダム化すべきである(SHOULD)。

ギフトラップの p タグには、受領者のメインの公開鍵、または受領者の身元を暴露することなくDMを受信するために作られたエイリアス鍵を使用できる。

クライアントは、それぞれの受領者のギフトラップにおいて expiration タグ(NIP-40)を設定するか、送信者の公開鍵に対してギフトラップを生成しないことによって、消えるメッセージを提供できる(CAN)。

公開
kind 10050 はユーザがDMを受けとるための好ましいリレーを示す。このイベントはリレーのURLを含む relay タグのリストを含まなければならない(MUST)。

_.js
{ "kind": 10050, "tags": [ ["relay", "wss://inbox.nostr.wine"], ["relay", "wss://myrelay.nostr1.com"], ], "content": "", //...その他のフィールド }

クライアントはkind 14 イベントを 10050 で挙げられたリレーに対して公開すべきである(SHOULD)。もしも見つからない場合はユーザがこのNIPに基づいてメッセージを受け取る準備ができないことを示しており、クライアントは送信を試みるべきでない。

リレー
// TODO 未完了のため続きを翻訳する