NIP-17
Private Direct Messages
昔のNIP-04は非推奨(unrecommended)になり、本仕様の利用が推奨されている。 /icons/hr.icon
翻訳 commit=7dfb11b
プライベートなダイレクトメッセージ
本NIPは、NIP-44の暗号化とNIP-59の封印(seal)とギフトラップを使ったあん謳歌されたダイレクトメッセージ方式を定義する。 ダイレクトメッセージのkind
イベントの種類(kind) 14はチャットメッセージである。pタグはメッセージの一人以上の受領者を示す。
code:_.js
{
"id": "<usual-hash>", // 訳注:通常のハッシュ
"pubkey": "<sender-pubkey>", // 訳注:送信者の公開鍵
"created_at": now(), // 訳注:現時刻
"kind": 14,
"tags": [
...
],
"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)。 code:_.js
{
"id": "<usual hash>",
"pubkey": randomPublicKey, // 訳注: ランダムな公開鍵
"created_at": randomTimeUpTo2DaysInThePast(), // 訳注: 過去2日以内のランダムな時刻
"kind": 1059, // ギフトラップ
"tags": [
],
"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)。
code:_.js
{
"kind": 10050,
"tags": [
],
"content": "",
//...その他のフィールド
}
クライアントはkind14イベントを10050で挙げられたリレーに対して公開すべきである(SHOULD)。もしも見つからない場合はユーザがこのNIPに基づいてメッセージを受け取る準備ができないことを示しており、クライアントは送信を試みるべきでない。
リレー
// TODO 未完了のため続きを翻訳する