Notesnook 加密原理:端到端加密如何做到零知识

端到端加密这个词被用得很宽泛,隐私也应当是可验证的,而不只是可以相信的。 这一页只回答四个具体问题:加密笔记的密钥从哪来、数据在哪加密、 服务端能看到什么、你如何自己确认这三点。

技术细节核对:2026 年 11 月 依据:源码、官方文档与 Vericrypt

技术规格

加密栈的六个关键事实

以下参数均可在开源仓库与官方文档中查到,不依赖任何厂商单方面陈述。

内容加密算法
XChaCha20-Poly1305 带认证的流加密,附加数据被篡改时解密会直接失败,而非返回错误明文。
密钥派生
Argon2 内存硬性密钥派生函数,显著提高针对弱密码的离线暴力破解成本。
加密库
libsodium(经 @notesnook/crypto 封装) 业界广泛审计的密码学库,避免自行实现底层原语带来的风险。
架构模型
零知识(Zero-Knowledge) 服务端在结构上不持有解密所需密钥,因此无法读取内容,也无法被要求交出明文。
开源许可
GPLv3(客户端与服务端) 代码可自由审阅、构建与自托管,加密声明可被独立复核。
数据存放地
德国 服务器由 Hetzner 承载,附件存储使用 iDrive e2,附件下载经 Cloudflare CDN 加速分发。

密钥生命周期

密码不出设备,密钥分权使用

Notesnook 不把「一个密码加密一切」当作终点。主密钥经过派生与拆分,分别承担同步加密与本地解密职责, 降低单点泄露的影响面。

01

派生

用户密码经 Argon2 派生出主密钥。该过程在设备本地完成,原始密码从不离开设备,也不上传。

02

拆分

主密钥拆分为加密密钥与本地密钥。加密密钥用于保护可同步数据;本地密钥不参与同步。

03

封装

加密密钥以密码派生的密钥加密后上传,用于新设备登录时取回。缺少密码则无法解开。

用户密码(仅本地) │ ├─ Argon2 ──▶ 主密钥 │ ├─▶ 加密密钥 ──加密后上传──▶ 同步服务端(用于跨设备取回) │ │ └─▶ 用于笔记 / 附件 / 剪藏内容的 XChaCha20-Poly1305 加密 │ └─▶ 本地密钥 ──▶ 仅存本机,不参与同步 │ └─ 保险库密码 ──独立派生──▶ 保险库密钥(第二道锁)

「零知识」在这里指什么

零知识是一个常被模糊使用的说法。在 Notesnook 的语境里,它有一个可检验的定义: 服务端保存的数据是以用户密钥加密的密文,而用户密钥不以任何形式存在于服务端。 这意味着即使服务器被完整接管、数据库被整体导出,攻击者拿到的也只是无法解密的字节。

由此可以推出几个具体结论,它们同时也是使用上的约束:

  • 官方无法读取你的笔记内容,也无法基于内容做广告投放或模型训练。
  • 官方无法替你重置密码并恢复云端数据——因为没有可用的解密密钥。
  • 收到执法或行政调取要求时,可提供的只有密文与运行必需的元数据。
  • 密码或恢复码丢失,云端数据即不可恢复,本地导出备份成为唯一退路。

请务必保存恢复码。零知识架构的代价是「无人可代你恢复」。注册后立即将恢复码离线保存(打印或存入密码管理器),并定期导出加密备份。

服务端能看到什么,看不到什么

严格来说,端到端加密保护的是内容,而非全部信息。为了完成账号校验与多端同步,服务端必然接触一部分运行数据。 如实区分两者,比笼统宣称「完全匿名」更可信。

  • 看不到:笔记标题与正文、附件内容、剪藏正文、标签名称、笔记本名称、笔记间的链接关系。
  • 可见:注册邮箱、账户创建时间、订阅状态、设备数量与类型、同步发生的时间与数据量级。
  • 不收集:官方声明不做行为跟踪、不建立广告画像、不向第三方出售数据。

如何自己验证

任何「我们加密了你的数据」的声明,只有能被第三方复核才有意义。Notesnook 提供三条互相独立的验证路径, 按投入成本从低到高排列。

路径一:使用 Vericrypt 逐项核对

官方提供的 Vericrypt 工具会在浏览器中复现客户端的加密流程,并给出可对照的中间结果, 用于确认密钥派生、内容加密与上传格式是否与文档描述一致。适合不打算读源码但希望动手确认的用户。

路径二:审阅开源代码

客户端与服务端均以 GPLv3 发布。加密相关的核心逻辑集中在 @notesnook/crypto 与 @notesnook/core 两个包中,同步服务端为独立仓库,可单独审阅。 对开发者而言,这是最直接的证据。

路径三:自建服务端并抓包

将同步服务端部署在自己的服务器上,把客户端指向该地址,然后在服务端侧观察落盘内容。 如果看到的确实是密文,那么「上传前已加密」这一条即被实证。这也是对隐私要求最高的用户的推荐做法。

自托管:把最后一环也握在手里

即使服务端无法解密内容,仍有用户不希望同步流量经过任何第三方。Notesnook 的同步服务端已开源, 可部署在自有服务器或内网环境中,客户端通过设置自定义服务器地址接入。

需要注意的实际约束:自托管意味着备份、可用性、升级与安全补丁都由你自己负责。 对个人用户,官方托管通常更稳妥;对团队或有合规要求的场景,自托管的价值才真正显现。

这套机制的边界

负责任的安全说明应当包含局限。以下几点并不构成缺陷,但使用者应当知情:

  • 端到端加密不防护已被入侵的终端。设备上存在键盘记录器或恶意软件时,明文仍会在输入环节泄露。
  • 「发布笔记为网页」会生成公开链接,这是由用户主动发起的明文出口,可选密码保护但不属于端到端加密范围。
  • 截图、剪贴板、系统级备份不在应用控制范围内,敏感内容需自行规避这些路径。
  • 加密强度依赖密码强度。使用短密码或复用密码会实质削弱 Argon2 的防护效果。

资料来源

本页技术描述整理自下列公开来源,建议以官方原文为准。

实践建议

四件小事,让加密真正生效

加密提供的是上限,实际安全性取决于使用习惯。

用长密码,不要复用

Argon2 提高了暴力破解成本,但无法把「123456」变成安全密码。用密码管理器生成 16 位以上的随机密码,并与其他账号区分开。

注册后立刻保存恢复码

恢复码是找回账户访问权的唯一凭据。打印一份放在安全位置,或存入密码管理器,不要只留在同一台设备上。

定期导出加密备份

在设置中导出加密备份并异地留存。零知识意味着服务端故障或账户异常时,备份是唯一的独立退路。

用保险库与两步验证补上两个缺口

私人保险库(免费版可用)挡住「手机被借走」的场景,两步验证挡住密码泄露后的异地登录。应用锁需 Pro 套餐,若暂不升级,请依赖系统锁屏。

常见问题

关于安全的直接回答

使用的加密算法是什么?
内容加密采用 XChaCha20-Poly1305,密钥派生采用 Argon2,底层依赖 libsodium。 具体实现位于开源包 @notesnook/crypto,可自行审阅。
忘记密码能找回吗?
无法由官方代为恢复。零知识架构下服务端不持有解密密钥。请依靠恢复码,并定期导出加密备份作为兜底。 保险库设有独立的恢复码机制,与账户密码分开管理。
服务器能看到我的笔记吗?
看不到内容。上传的是本地加密后的密文,服务端不持有解密密钥。可见的信息限于账户邮箱、订阅状态、 设备与同步时间等运行必需数据。
可以自己部署服务端吗?
可以。官方开源了 notesnook-sync-server,可部署在自有服务器并通过客户端接入, 数据完全不经过官方基础设施。代价是运维与备份需自行负责。
如何验证加密声明属实?
三种方式:用 Vericrypt 复现加密流程、审阅 GPLv3 开源代码、或自建服务端抓包确认上传内容为密文。 三条路径互不依赖,可交叉印证。

先看原理,再决定要不要用

如果你认同这套取舍,下一步就是把它装到设备上。免费版已包含全部加密能力。