rscrypto: 高性能纯 Rust 加密库
概述
rscrypto 是一个全面的、纯 Rust 的加密原语栈,专为需要高性能、小二进制体积和严格部署控制的项目而设计。它为广泛的原语提供单一依赖项——包括 RSA、Ed25519、X25519、AEADs、哈希和 KDFs——消除了对强制性 C 库、OpenSSL 或多个 crate 的复杂组合的需求。
关键技术特性
统一的原语栈
rscrypto 将众多加密需求整合到一个 crate 中,以避免 API 碎片化和不一致的安全规范。该库支持:
- 加密哈希: SHA-2、SHA-3、SHAKE、cSHAKE256、BLAKE2、BLAKE3、以及 Ascon-Hash/XOF/CXOF。
- MACs 和 KDFs: HMAC-SHA-2、KMAC256、HKDF-SHA-2、以及 PBKDF2-HMAC-SHA-2。
- 密码哈希: Argon2d/i/id、scrypt、以及 PHC 字符串编码/验证。
- 公钥原语: Ed25519 签名、X25519 密钥交换、以及完整的 RSA 支持(签名、验证、OAEP、RSAES-PKCS1-v1_5 和密钥生成)。
- AEAD 加密: AES-GCM、AES-GCM-SIV、ChaCha20-Poly1305、XChaCha20-Poly1305、AEGIS-256、以及 Ascon-AEAD128。
- 校验和与非加密哈希: CRC-16/24/32/32C/64、XXH3、以及 RapidHash。
可移植性与硬件加速
该库使用可移植的 Rust 后端作为事实来源和参考实现。硬件特定的内核会在运行时根据 CPU 支持情况进行分发:
- x86/x86_64: SSE4.2、AVX2、AVX-512、AES-NI、SHA-NI、VAES、VPCLMULQDQ。
- Arm/AArch64/Apple Silicon: NEON、AES、PMULL、SHA2、SHA3、SVE2-PMULL。
- 其他架构: 支持 IBM Z (CPACF, MSA, VGFM)、IBM POWER (vector/crypto extensions)、RISC-V (RVV, Zbc, Zvkned, Zvbc) 以及 WASM (SIMD128)。
部署与安全控制
rscrypto 专为受限环境设计,包括 no_std 目标(嵌入式、裸机、WASM)。
- 基于特性的 Inclusion: 用户可以启用特定的叶子特性(例如
sha2)或组(例如hashes)以保持二进制体积较小。 - 可审计性:
portable-only特性强制使用恒定时间的可移植后端,通过绕过硬件加速器来实现确定性分发。 - 安全卫生: 该库为 MAC、AEAD 和签名验证实现了恒定时间相等性比较,在 drop 时将携带密钥的类型置零,并在使用不透明的验证错误来防止侧信道泄漏。
性能基准测试
与最快的匹配的 Rust 基准库(包括 aws-lc-rs、ring、RustCrypto 和 blake3)相比,rscrypto 报告了显著的加速。
| Metric | Linux CI Result | Apple Silicon (M1) Result | | :--- | :--- | :--- | | | Fastest External Geomean | 1.61x | 1.25x | | | Wins/Ties (Linux) | 5,210 / 5,832 | N/A | | | Wins/Ties (Apple) | N/A | 450 / 463 | | | BLAKE3 (>=64 KiB) | 2.31x | 1.80x | | | AEAD Geomean | 1.57x | 1.47x | | | RSA Import + Verify | 1.32x | 1.45x | |
已知性能弱点:
- PBKDF2-SHA256 在
iters=1时(Linux)。 - X25519 Diffie-Hellman (Linux)。
- RSA-4096 验证 (Linux)。
- 小消息 AEAD 开销。
- HMAC-SHA256 大量处理压力对比
aws-lc-rs(Apple Silicon)。
社区批评与安全警告
尽管有性能声明,但该库在 Hacker News 上遭到了加密社区的显著批评,特别是关于其安全态势和开发过程。
恒定时间实现缺陷
Rosenpass Protocol 的设计者 Karolin Varner 提出了担忧,认为该库并非完全是恒定时间的。作者承认,全局恒定时间声明不适用于:
- 解析器、导入器、DER/PHC 解码。
- 算法/配置文件的协商。
- 密钥生成和 OS 随机性路径。
- 公钥 RSA 验证/加密工作。
- 哈希和校验和作为整体 API。
- Argon2d/scrypt 作为通用原语。
审查与信任问题
批评者强调了在生产环境中使用 rscrypto 的若干风险:
- 缺乏第三方审计: 该库尚未经过专业的第三方安全审计。
- Pre-v1 状态: 作者将代码描述为 "pre-v1",但其宣传方式被批评者认为对于加密软件而言过于仓促。
- LLM 使用: 有关于使用大语言模型 (LLMs) 生成代码或文档的问题被提出,批评者认为这可能会引入细微的实现缺陷。
- 实现策略: 一些社区成员认为,创建一个新库而不是向现有的、经过验证的 Rust 加密生态系统(如
RustCrypto)贡献代码,会为社区的审查工作带来不必要的负担。
"如果你的项目需要安全,请不要使用它... 恒定时间安全性是所有加密代码必须遵循的基本保证。" — Karolin Varner
安装与使用
最小化 no_std SHA-2 构建:
[dependencies]
rscrypto = { version = "0.3.1", default-features = false, features = ["sha2"] }
带 OS 随机性的全栈构建:
[dependencies]
rscrypto
= { version = "0.3.1", features = ["full", "getrandom"] }
MSRV: Rust 1.91.0。