Happy 对所有数据使用端到端加密(E2E)。你的消息、代码和会话元数据在发送到服务器之前会在你的设备上加密。服务器只存储它无法解密的加密数据块。
零知识架构
Happy 服务器是一个零知识中继。它在你的设备之间同步加密数据,但:
- 它无法读取你的消息或代码
- 它无法解密你的会话元数据
- 它无法访问你的加密密钥
- 它只存储加密的密文
即使服务器被攻破,你的数据仍然是加密的。
工作原理
密钥生成
当你首次运行 Happy 时,会生成一个 NaCl(Networking and Cryptography library) 密钥对:
- 私钥 — 本地存储在
~/.happy-next/access.key(永远不会离开你的设备)
- 公钥 — 作为你的身份发送到服务器
消息加密
消息使用 TweetNaCl Box(Curve25519 + XSalsa20 + Poly1305)加密:
- 你的设备使用会话密钥加密消息
- 加密后的密文发送到服务器
- 服务器存储密文但无法读取
- 你的其他设备下载并在本地解密
多设备密钥交换
当你配对新设备时(例如用手机扫描二维码),设备之间会交换公钥并建立共享加密密钥。这通过安全的 NaCl Box 密钥交换完成 — 服务器协助交换过程但无法看到共享密钥。
会话共享
当你与其他用户共享会话时:
- 私密共享使用 NaCl Box 为接收者的公钥加密会话密钥
- 公开链接从共享令牌派生解密密钥(密钥嵌入在 URL 中)
密钥备份
请备份 ~/.happy-next/access.key。 此文件是你的加密私钥。如果丢失,你将永久失去对加密会话历史的访问权限。没有恢复机制 — 这是刻意设计的。
Happy 使用以下加密库:
| 库 | 用途 |
|---|
| TweetNaCl | 核心加密(NaCl Box、签名) |
| libsodium | 移动端加密(React Native 绑定) |
| @noble/ed25519 | Ed25519 密钥操作 |