NIP-104定义了使用Double Ratchet协议(基于Signal架构)的端到端加密私信,为Nostr对话提供forward secrecy和post-compromise security。

为什么重要

现有的Nostr私信解决方案存在局限性:

  • NIP-04:加密内容但泄露元数据
  • NIP-17 + NIP-59:通过gift-wrapping解决元数据泄露问题,但缺乏forward/backward secrecy

NIP-104完善了整体方案:如果用户的私钥被泄露,攻击者无法读取过去的消息(forward secrecy),也无法无限期地继续读取未来的消息(post-compromise security)。

工作原理

初始设置(X3DH)

双方使用身份密钥和prekeys执行扩展的三重Diffie-Hellman交换,以派生初始共享根密钥。

Double Ratchet

  1. DH Ratchet:每次双方交换消息时,都会生成新的Diffie-Hellman密钥,产生新的根密钥和链密钥
  2. Symmetric Ratchet:独立的发送和接收链为每条消息派生单独的消息密钥

这种持续的密钥轮换确保即使一个密钥被泄露,也只会暴露最少的消息内容。

Event Kinds

  • Kind 442:发布用于X3DH初始化的用户prekeys
  • Kind 443:包含加密首条消息的初始对话设置
  • Kind 444:已建立对话中的后续加密消息

所有加密消息都封装在kind 1059 GiftWrap事件中以保护元数据。

关键标签

  • p - 接收者的公钥
  • prekey - 用于DH计算的接收者prekey
  • dh_sending - 当前DH发送公钥
  • current_index - 链中的消息编号
  • previous_length - 前一消息链的长度

限制

消息按设备-客户端配对工作。跨多设备同步需要为每个设备单独初始化,这是增强安全性的权衡。


主要来源:

提及:

另请参阅: