跳至内容
返回 Nymchat

知识库 在引擎盖下

协议和事件

Nymchat 实际上在网络上放置了什么,对于任何反对它的人来说, 对其进行审核,或从另一个 Nostr 客户端读取事件。

事件种类

种类用于笔记
0个人资料元数据标准 Nostr 个人资料:名称、图片、横幅、关于、 lud16.
5删除请求NIP-09。
7反应NIP-25,带有 ['k', originalKind] 标签,以便针对正确的渠道类型提交反应。
13海豹NIP-17 消息的中间层。
14私信辟谣未签名,也从未单独出版。
1059礼品包装NIP-59。实际上到达私人消息和群聊的中继。
1984报告NIP-56。
9734 / 9735Zap 请求和 Zap 收据NIP-57。
10030自定义表情符号包列表NIP-30。
20000Geohash 通道消息短暂的,标记的 ['g', geohash].
23333命名频道消息短暂的,标记的 ['d', channel].
24420 / 24421公共打字指示器和已读回执Nymchat 特定的,用于公共频道。
25051 / 25052点对点信令和文件传输状态Nymchat 特定的。
30030自定义表情符号集NIP-30。
30078应用数据NIP-78。民意调查和加密设置同步。
69420私人阅读收据和递送状态Nymchat 特有的,作为谣言放在礼品包装中携带。一种单独的类型 14 故意这样做,因此其他 NIP-17 客户端不会为每个收据呈现空白直接消息。

Nymchat 实现的 NIP

Nymchat 提供了什么
NIP-07使用浏览器扩展登录。
NIP-09删除请求。
NIP-13工作证明。传出消息至少被挖掘为 16 位。
NIP-17私人直接消息,以及群聊的基础。
NIP-25反应。
NIP-30自定义表情符号。
NIP-40过期时间戳——消失的消息。
NIP-44版本化加密,用于密封、包装和设置同步。
NIP-46远程签名—— bunker://.
NIP-56报告。
NIP-57电闪雷鸣。
NIP-59礼品包装。
NIP-78任意应用程序数据。
NIP-98HTTP 身份验证,用于托管端点。

密码学

在哪里什么
身份和签名具有 Schnorr 签名 (BIP-340) 的 secp256k1,如 Nostr 指定的那样。
私信和群聊NIP-44 v2:secp256k1、HKDF-SHA256、ChaCha20 上的 ECDH 和 HMAC-SHA256 以及填充,以便密文长度不会泄露消息长度。
蓝牙网状网络会话Noise XX — X25519、ChaCha20-Poly1305 (IETF)、Ed25519 用于公布签名、SHA-256 和 HMAC。
静止时的身份AES-GCM-256。密钥来自 PBKDF2-SHA256(密码或 PIN 码的 310,000 次迭代),或者来自通过 HKDF-SHA256 的 WebAuthn PRF 输出,用于密钥或生物识别。
通话和文件传输WebRTC 自己的 DTLS-SRTP,通过 NIP-17 封装的信令进行协商。
随机性整个平台 CSPRNG — 密钥、随机数和礼品包装时间戳抖动。

元数据保护

礼品包装路径中的两个细节值得一提,因为它们是单独的 NIP-59 来自“加密,但显然是从你到他们”:

  • 每份包装都有签名 一次性钥匙 仅针对该消息生成的, 所以没有两个包裹共享一个发件人。
  • 每一个包裹的 created_at随机回溯最多两个 小时 使用 CSPRNG,因此发送和接收时间无法对齐。

群聊添加旋转短暂 接受者 上面的键——参见 群组加密的工作原理.

阅读源码

加密原语位于 js/nym-crypto.jsjs/modules/key-vault.js 在网络应用程序中,并在 android-ios-app/lib/core/crypto/lib/services/mesh/noise/ 在 Flutter 应用程序中。这 存储库 是 AGPL-3.0 并且是完整的——没有封闭的组件需要信任。