跳转到内容

端到端加密

服务器看得到什么,密钥又是从哪里来的

笔记在你的设备上锁好,一路锁着,到另一台设备才打开。中间那台服务器只管存放和转发,它打不开这些文件:它拿不到你的库密码,也拿不到那把密钥。

服务器看得到什么,看不到什么

Section titled “服务器看得到什么,看不到什么”
看得到 看不到
一个库有多少文件、多少版本,每个文件多大 笔记里写了什么
每个版本是什么时候、由哪台设备存的 文件名和文件夹名
两个文件的内容是否完全相同(相同的只存一份) 库密码,以及由它算出的密钥

最后一行值得多说一句。服务器靠内容的一枚指纹来认文件,所以内容相同的文件只存一份。指纹透露不出文件里写了什么——但要是别人手上正好有同一份文件,他就能确认这份也在你的库里。

库密码在你的设备上变成一把密钥:PBKDF2,60 万轮 SHA-256,得到一把 256 位的 AES-GCM 密钥。服务器上存着一小段随机数据(salt),让每台知道密码的设备算出同一把钥匙;还存着一小段用这把钥匙加密的固定文字,新设备用它验证你输入的密码对不对——密码本身哪儿也不用去。

这里说的是库密码,不是服务器的登录密码;后者只在部署服务器时用一次。

密码从头到尾没有离开你输入它的那台设备。

没有找回密码这回事。 没有谁手里留着一把备用钥匙:我们没有,管这台服务器的人也没有。库密码忘了,那些笔记就一直锁着。请把它交给密码管理器,再让桌面端定期留本地备份。

加密的边界在设备上。 它保护的是往服务器去的路上、以及存在服务器上的笔记。到了你自己的电脑上,笔记就是普通文件:能读你磁盘的东西,就能读它们。

Courier 是开源的。从库密码算出密钥、加密、解密,全都跑在你设备上的插件和命令行工具里,代码在 GitHub 上。加密这件事,不需要你相信服务器。