notesnook 中文文档 下载 App

Notesnook 零知识加密架构 XChaCha20-Poly1305 + Argon2

加密技术栈

Notesnook 的加密实现全部基于 libsodium 库,Web、桌面、移动三端完全统一:

加密流程四步走

  1. 注册/登录阶段:客户端取用户密码,用 Argon2i + 固定客户端盐 + 用户邮箱(可预测盐)派生哈希值,只发送哈希到服务器。密码本身从不上传。
  2. 密钥生成:首次注册时,客户端生成两把密钥——数据加密密钥(真正用来加密每条笔记的 key)和从密码派生的主密钥(保护数据加密密钥本身)。
  3. 数据加密:同步时,每条笔记 JSON 对象独立加密。加密后输出包含密文、192-bit nonce、随机 salt、算法 ID 和条目 ID 的密文对象,发送到服务器。
  4. 密钥存储:桌面端和 Web 端的密钥存在浏览器 IndexedDB 的 CryptoKey 对象里——CryptoKey 无法导出、查看或复制,只有应用和浏览器本身能访问。

为什么服务商看不到

密钥永远在你的设备上生成和销毁。服务器只收到用密钥加密后的密文,没有任何解锁密钥在服务器上。这意味着:

密码变更时的密钥重加密

更改密码后,Notesnook 会用新密码派生新的主密钥,然后用新主密钥重新加密数据加密密钥。这个过程在你的设备上完成,服务器上的数据加密密钥是看不到的——它们只以被主密钥加密后的形式存储。

可以自己验证

Notesnook 提供了 Vericrypt 工具,让你可以用自己的密钥直接解密一条笔记的密文,独立验证加密过程。GitHub 仓库里也有完整的加密实现代码供审计。

继续阅读:Vault 创建与密码设置