softdeadlock/voron-crypto
GitHub: softdeadlock/voron-crypto
一个端到端加密即时通讯的密码学与协议核心库,包含 X3DH-lite、Double Ratchet、群组 sender-keys 和洋葱路由传输,专为外部安全审查而公开。
Stars: 1 | Forks: 0
# Voron crypto/protocol 库 — 请求审查
这是一个小型 E2EE 即时通讯项目的加密与消息协议核心,为了进行外部审查而单独提取出来。
它**不是**完整的成品 —— Android 客户端和部署配置被刻意排除了;这里只是需要大家帮忙把关的部分。
## 包含的内容
- `common/` — 库本身:
- `e2ee/` — X3DH-lite(异步密钥协商)+ 建立在其上的 Double Ratchet,基于
Curve25519/ChaCha20-Poly1305/Ed25519/HKDF(JDK 提供的原语,该层没有任何手工实现的加密)。
- `crypto/` — 对这些 JDK 原语的轻量级封装。
- `group/` — 通过 sender-keys 方案实现的群组消息传递(早期
WhatsApp/Signal 群组使用的 MLS 前身方案),外加一个客户端侧的签名哈希链事件日志,用于记录
成员资格/角色,因为中继服务器完全没有任何群组的概念。
- `onion/` — 一个可选的分层加密传输(固定跳数,大小分桶填充),
以防止中继服务器直接将连接的 IP 与其 identity key 关联起来。
- `client/`、`transport/`、`backup/` — 通信协议、Noise_IK 传输握手,以及
加密备份格式。
- `server/` — 一个参考中继服务器实现:存储转发路由、prekey 目录、
离线邮箱、onion-hop 角色。故意设计为最小信任:中继服务器永远看不到明文,
保存消息的时间绝不会超过送达所需时间,并且(在设计上)对群组成员资格
零感知。
- `client/` — 一个普通的 JVM 控制台测试平台(不是真正的应用程序),用于在集成测试中
驱动 `common`/`server` 相互交互,以及一些独立的漏洞利用 PoC(见下文)。
- `security-audit/` — 来自先前内部审查阶段的报告、发现的 bug,以及
已经修复的 bug。在报告问题之前请先阅读此内容 —— 它很有可能
已经记录在这里了。`REPORT.md` 是主要的报告;`ADVERSARIAL_REVIEW_PAVEL.md` 是之后一次范围更窄的审查;
`fuzz/` 和 `client/.../exploit/` 中有可运行的 PoC,而不仅仅是描述。
## 威胁模型,简版
- 中继服务器**不是**受信任的一方。它路由密文和目录数据(发布
的 prekeys),并且被假设为主动恶意的,而不仅仅是出于好奇 —— `security-audit/` 中几个已修复的 bug
正是关于“恶意中继服务器能做什么”。
- 1:1 会话旨在实现前向保密(X3DH)和入侵后安全(其上的 DH-ratchet
)。群组会话使用 sender-keys:成员资格更改会重新生成整个群组的密钥,但单个
受损的 sender key 会暴露该 epoch 的消息 —— 在
群组层没有针对单条消息的 ratchet(不是完整的 MLS/TreeKEM,这是刻意的范围裁减,记录在 `group/GroupCryptoSession.kt` 中)。
- Onion routing 对只看到一跳的中继服务器隐藏了 IP↔identity 的关联,并将 frame
填充到固定大小的桶中,这样跨跳的被动大小关联就不会轻易地对
线路进行去匿名化。它**并不能**向同时在两端进行监视的攻击者隐藏时间相关性 ——
这需要 cover traffic / 混淆,但并未实现。这一点在
`security-audit/REPORT.md` 和 `ADVERSARIAL_REVIEW_PAVEL.md` 中已明确指出,并非刻意隐瞒。
## 我们特别希望检查的内容
- X3DH-lite ↔ Double Ratchet 的集成(`common/src/main/kotlin/messenger/common/e2ee/`)——
这是这里唯一真正定制的密码学构造,其下的所有内容都是
现成的。它已经在内部进行了多次审查(见 `security-audit/`),但从未
由本项目之外的人员审查过。
- 群组控制日志的授权模型(`common/src/main/kotlin/messenger/common/group/GroupControlLog.kt`)
—— 一个完全没有服务器强制执行的客户端侧签名哈希链。
- onion-routing 层中任何尚未被上述记录在案的
时间相关性警告所涵盖的内容。
## 运行方式
```
./gradlew test
```
标准的 Gradle/Kotlin 项目,JDK 17+。单元测试套件不需要网络访问或运行任何
服务。`security-audit/README.md` 包含了实时中继服务器模糊测试和
onion-correlation PoC 的说明,这些确实需要运行本地进程(切勿将其中任何一项指向
生产主机)。
## 这不是什么
尚未对此进行过独立的密码学审计。`security-audit/` 中的所有内容都是
内部工程审查 —— 虽然仔细,但属于自我审查,没有形式化证明的支持,也没有
任何专业/机构的业绩记录作为背书。请将其视为审查的起点,而
非认证。
标签:后台面板检测