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-rsringRustCryptoblake3)相比,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。

Sources