havenmessenger/crypto
GitHub: havenmessenger/crypto
Haven Messenger 的密码学核心库,使用 Rust 实现 OpenPGP 与 MLS(RFC 9420)的加密原语,支持跨平台编译并通过可复现构建和已知答案测试保障安全性。
Stars: 1 | Forks: 1
# Haven Crypto
[Haven](https://havenmessenger.com) 的密码学核心 —— 一项私密的、端到端加密的电子邮件与消息服务。
本 crate 实现了 Haven 的 OpenPGP 和 MLS 相关的密码学原语(原生 + WASM)。它被公开且独立地发布,以便 Haven 所做的安全声明 —— *“只有你和你要联系的人能读取你的消息,连我们也不行”* —— 能够被任何人审查和验证,而不是仅仅停留在信任的基础上。
## 为什么使用它
- **开箱即用。** 这是生产级密码学,而非研究性 crate。测试套件中的字节兼容性测试夹具锁定了真实部署的客户端已经在使用的传输格式。
- **一套核心,全平台适用。** 同一个 crate 既可以编译为原生应用(Android、iOS、桌面端),也可以编译为 WASM(Web),因此密码学实现在各个平台上保持字节级一致,而不是按平台各自重新实现。
- **已知答案准则。** 172 个测试把关每一次更改:针对已发布的 RFC 和 NIST 向量进行 KAT(已知答案测试)、失败即停止证明,以及 zeroize-on-drop 证明。
- **仅使用经过审查的原语。** openmls(MLS, RFC 9420)、rPGP,以及 RustCrypto 套件(AES-GCM、HKDF、SHA-2、ed25519-dalek)。没有自行手写的加密算法。
- **内置密码敏捷性。** 密码套件的选择是一个单一策略切入点(`src/suite_policy.rs`);添加后量子(PQ)套件只需更改配置和 KAT,无需重写传输格式。一个可运行的 PQ 演示(`src/suite_policy_pq_demo.rs`)证明了该切入点是由配置驱动的。
- **默认拒绝的 MLS 外部操作。** 在结构上拒绝外部提交和外部提案(`src/profile.rs`),并通过负面测试证明了每一次拒绝。
- **可复现。** 两次独立的构建会产生字节完全相同的产物;配方位于 [`docs/REPRODUCIBLE_BUILDS.md`](docs/REPRODUCIBLE_BUILDS.md),并且 CI 会执行它。
- **成文的威胁模型。** [`docs/THREAT_MODEL.md`](docs/THREAT_MODEL.md) 涵盖了此代码能防范什么,以及它不能防范什么。
上述每一项声明都有本仓库中的测试或文档作为支撑;请随意核查它们。我们正在安排独立的第三方安全审计;在此之前,没有任何外部机构审查过此代码。
## 为什么将其开源
- **隐私声明可在此处检查。** 它取决于此代码如何处理密钥:你可以阅读密钥是如何生成、存储和使用的。
- **没有自行手写的加密算法。** 本 crate 组合了 openmls、rPGP 和 RustCrypto 套件(AES-GCM、HKDF、SHA-2、ed25519-dalek);针对已发布的 RFC/NIST 向量的已知答案测试把关每一次更改。
- **已计划进行第三方安全审计。** 这个独立的 crate 就是审计范围;[`docs/THREAT_MODEL.md`](docs/THREAT_MODEL.md) 包含了威胁模型以及在此之前已知的遗留问题。
## 存在于这里的内容(以及不在这里的内容)
**在这里(开源):** 客户端所依赖的密码学原语和密钥处理逻辑。
**不在这里(按设计闭源):** Haven 的服务器、反滥用系统和邮件投递基础设施。服务器在设计上就是不受信任的。
## 快速开始
```
git clone https://github.com/havenmessenger/crypto.git
cd crypto
cargo test --release
```
没有子模块,没有外部服务,除了在初始获取依赖项时访问 crates.io 外,不需要任何网络访问。在典型的机器上,一次干净的构建 + 完整的测试运行(172 个测试:针对已发布的 RFC/NIST 测试数据的已知答案向量,加上 fail-closed 和 zeroize 证明)大约需要两分钟。
## 许可证
[AGPL-3.0-only](LICENSE)。互操作性库
([havenmessenger/interop](https://github.com/havenmessenger/interop))采用 Apache-2.0 协议。
## 验证构建
可复现构建说明:[`docs/REPRODUCIBLE_BUILDS.md`](docs/REPRODUCIBLE_BUILDS.md)。
## 安全
发现了一个漏洞?请参阅 [`SECURITY.md`](SECURITY.md) —— 请使用协同披露流程。
此代码构建所遵循的(以及背后的原因)全局设计不变式已收录在 [`SECURITY-INVARIANTS.md`](SECURITY-INVARIANTS.md) 中。
标签:MLS, PGP, Rust, WASM, 即时通讯, 可视化界面, 密码学, 手动系统调用, 端到端加密, 网络流量审计, 通知系统