你大概听过“端到端加密”这个词。多数云存储服务的意思是——文件在传输时加密了,在服务器上又以加密形式存放,但服务器那边握着密钥。如果有人彻底控制了服务器,你的数据也就不再是秘密。Silvora 这套设计换了一种思路:服务器上只存密文,整个服务端连一行解密代码都没有。即便攻击者拿到了全部服务器权限,在数学上也无法读出哪怕一个文件的内容。这个保证不是营销话术,而是由一套实打实的密码学架构支撑起来的。
我自己做了两年,白天教编程,晚上和周末写代码,一点点把 Silvora 的加密骨架搭好。下面要说的,不是宣传页面上的精简版,而是每一个密码学组件的选型理由,以及它们共同形成的安全边界。
第一层:主密钥的诞生与存活
一切都从用户设置的密码开始。但你的密码从不离开设备——甚至连哈希值都不会传到服务器去。在注册或解锁时,设备本地使用 Argon2id 算法从密码派生出主密钥,具体参数是:内存使用量 64MB、迭代次数 3、并行度 2。这几个数字全都超过了 OWASP 推荐的底线。而且服务端还设了一道硬门槛:如果客户端试图提交用更弱参数算出的结果,请求会被直接拒绝。这样就没有人可以为了省电而在本地偷偷降低派生强度,然后指望服务器睁一只眼闭一只眼。
主密钥诞生之后,也只在内存里活一小段时间。它从来不会写到磁盘上,也不会出现在任何日志里。一旦你把保险库锁定,或者把应用切到后台,这段内存就会被 fillRange(0) 逐字节清零,然后再释放。换句话说,即便同一台设备后来被人做了内存转储,也很难拼凑出先前存在过的主密钥。
第二层:每个文件一把新钥匙
用唯一的主密钥直接加密所有文件,是个设计上的陷阱。因为只要某一天主密钥意外泄露,所有文件就会在同一瞬间全部沦陷。于是每个文件都拥有属于自己的独立加密密钥,通过 HKDF-SHA256 从主密钥派生出来:
per_file_key = HKDF(master_key, salt=file_id, info="silvora-file-encryption-v1", length=32)
这里 info 字段担任的是一种“域分离”角色。它确保即使 salt 和主密钥不变,为文件加密派生出来的密钥,也绝对不能被用在其他场景——比如恢复密钥的派生、或者分块密钥的派生里。每一个应用场景都有专属的 info 标签,密码学上彼此隔绝。
在文件之下,每个分块(chunk)也同样采用 HKDF 派生专钥,并且使用各自独立的域分离符。这样做的意义很直白:就算同一个文件内部,不同分块的密钥之间也毫无关联,一块被破解不会牵连其他块。
第三层:加密与认证
每个分块都使用 XChaCha20-Poly1305 AEAD 算法进行加密和认证。为什么不用 AES?原因有四:
1. 192 位的 nonce 非常大,即使在极大规模下发生 nonce 重复的概率也低到可以忽略;
2. XChaCha20 是流密码,不依赖特定硬件加速,在所有设备上都能做到常数时间执行,不会有侧信道时间差异;
3. 它天然避免填充预言攻击这类困扰块密码的问题;
4. Poly1305 提供数据认证——任何篡改都会被立即检测出来,密文完整且不可伪造。
每次调用加密时,都会生成一个全新的随机 nonce。在这层防护之上,服务器端还会额外检查是否出现过 nonce 重放,作为第二道防线。这样一来,即便客户端在极端异常情况下错误复用了 nonce,服务端也能捕获并拒绝写入。
第四层:恢复却不让服务器知道
传统系统里忘了密码,可以在服务端重置,因为服务器一侧至少存着一些验证凭据。但 Silvora 的服务器什么也不知道,这条路就走不通了。于是有了另一套方案:注册时,您的设备会生成一个符合 BIP39 标准的 24 词恢复短语,提供 256 位的熵。主密钥会被这个短语派生的密钥加密,然后把加密后的 blob 存到服务器上——依旧是密文。整个恢复过程全部在本地完成:服务器将加密 blob 返回给客户端,您输入的恢复短语在本地解开主密钥,服务器自始至终都看不到恢复短语或主密钥的一丁点内容。
为了确保用户真的记录下了短语,引导流程里有一个不能跳过的验证步骤:系统随机挑出 3 个单词,你必须正确点选出来。这个设计背后是一个冷酷的事实——在零知识体系里,丢失恢复短语就等于永久丢失数据。没有后门,没有客服能帮你找回。用一个无法逃避的确认动作,去匹配这份不可挽回的后果,才足够诚实。
这些决策堆积起来,构成了一个清晰的边界:所有的加密、解密、派生、认证运算全部跑在用户的设备上。服务器看到的,只是一堆不可读的字节。密钥层级的设计使得单点泄露不会演变成全局灾难,而恢复机制的完全客户端化则守住了“服务器零知识”这条红线。下次有人问起,一个不信任服务器的云存储到底能做到多安全,或许可以把这篇拆解当作注脚——它至少说明,不需要把信任交给云端,也能把文件保护得相当严密。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.