知识库 在引擎盖下
协议和事件
Nymchat 实际上在网络上放置了什么,对于任何反对它的人来说, 对其进行审核,或从另一个 Nostr 客户端读取事件。
为了方便起见,此页面是机器翻译的。英文原件为适用版本。
事件种类
| 种类 | 用于 | 笔记 |
|---|---|---|
0 | 个人资料元数据 | 标准 Nostr 个人资料:名称、图片、横幅、关于、 lud16. |
5 | 删除请求 | NIP-09。 |
7 | 反应 | NIP-25,带有 ['k', originalKind] 标签,以便针对正确的渠道类型提交反应。 |
13 | 海豹 | NIP-17 消息的中间层。 |
14 | 私信辟谣 | 未签名,也从未单独出版。 |
1059 | 礼品包装 | NIP-59。实际上到达私人消息和群聊的中继。 |
1984 | 报告 | NIP-56。 |
9734 / 9735 | Zap 请求和 Zap 收据 | NIP-57。 |
10030 | 自定义表情符号包列表 | NIP-30。 |
20000 | Geohash 通道消息 | 短暂的,标记的 ['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-98 | HTTP 身份验证,用于托管端点。 |
密码学
| 在哪里 | 什么 |
|---|---|
| 身份和签名 | 具有 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.js 和
js/modules/key-vault.js 在网络应用程序中,并在
android-ios-app/lib/core/crypto/ 和
lib/services/mesh/noise/ 在 Flutter 应用程序中。这
存储库
是 AGPL-3.0 并且是完整的——没有封闭的组件需要信任。