Show HN: 纯Rust加密库Rscrypto,公开展示行业领先性能
速览
开发者发布了名为Rscrypto的纯Rust加密库,旨在提供高性能且安全的加密解决方案。该项目通过公开展示行业领先的基准测试结果,证明了其在速度和安全性方面的竞争力。作为Show HN项目,它展示了Rust语言在系统级编程和密码学领域的潜力。
AI 深度解读
Show HN: Rscrypto,纯 Rust 实现且拥有行业领先基准测试的密码学库
背景
在 Rust 生态系统中,密码学库的选择往往需要在功能完整性、二进制体积、依赖复杂度以及性能之间做出权衡。传统的做法通常涉及组合多个独立的 crate(如 sha2、ed25519、aes-gcm 等),这不仅引入了不同的 API 风格、特性模型和安全惯例,还可能导致依赖树臃肿。此外,许多高性能实现依赖 C 语言后端(如 OpenSSL)或系统级库,这带来了部署控制的复杂性以及 no_std 环境下的兼容性问题。
在此背景下,rscrypto 作为一个单一的原始密码学栈(primitive stack)应运而生。它旨在为那些关注二进制大小、部署控制速度,且不希望强制依赖 C 或 OpenSSL 的项目提供解决方案。该项目强调“纯 Rust”实现,同时通过内置的硬件加速支持,在保持代码简洁性的同时追求极致的性能表现。
核心内容
rscrypto 是一个统一的密码学原语库,支持 RSA、Ed25519、X25519、AEAD(认证加密)、哈希函数、KDF(密钥派生函数)、密码哈希、CRC 校验等,并全面支持 no_std、WASM 以及硬件加速。其核心设计理念是提供一个一致的原语栈,避免用户组合半打具有不同 API 和特性的 crate。
架构与设计哲学
- 单一依赖,分层特性:用户可以使用单个叶子特性(leaf feature)启用单个原语,使用组特性启用子集,或使用
full启用全部功能。 - 便携式 Rust 为基准:便携式 Rust 后端是“唯一真理源”(source of truth)。SIMD 和汇编代码仅作为加速器存在,确保即使在没有硬件加速的环境中,代码也能正确运行且行为一致。
- 硬件分发内置:支持 x86/x86_64、Arm/AArch64、Apple Silicon、IBM Z、IBM POWER、RISC-V 和 WASM。所有架构均有便携式回退机制,并在性能收益显著时启用优化内核。
no_std一等公民:服务器、CLI、嵌入式、裸机(bare-metal)和 WASM 构建使用相同的 crate 和特性模型。
性能基准测试
根据最新的公开基准测试数据,rscrypto 在多个平台上展现了极具竞争力的性能:
- Linux CI (2026-05-27):
- 几何平均速度比外部 crate 快 1.61x。
- 在 5,832 项测试中,赢得 3,545 项,平局或获胜 5,210 项。
- 注意:此轮测试为过滤模式,未包含 Argon2、scrypt 或 Ascon-AEAD。
- Apple Silicon (MBP M1, macOS/aarch64, 2026-06-01):
- 几何平均速度比外部 crate 快 1.25x。
- 在 463 项测试中,赢得 235 项,平局或获胜 450 项。
- 此轮为本地全量运行,包含 Argon2、scrypt 和 Ascon-AEAD。
注:速度提升计算方式为 external_crate_time / rscrypto_time,值大于 1.00x 表示 rscrypto 更快。由于 Linux 和 Apple Silicon 数据来自不同提交和测试范围,不建议合并为单一聚合值。
主要功能模块
-
RSA 支持:
- 成为一等公民,支持严格 DER 导入/导出、RSA-PSS、RSASSA-PKCS1-v1_5、OAEP、RSAES-PKCS1-v1_5。
- 支持密钥生成、X.509/JWT/COSE/TLS 配置文件映射、盲化私钥操作以及可重用的 scratch(临时缓冲区)API。
- 示例展示了如何使用
RsaPublicKey::from_spki_der加载密钥,并通过verify_pss验证签名。对于批量验证,推荐使用public_scratch()预分配缓冲区以提高效率。
-
轻量级构建:
- 仅启用所需原语(如
sha2、blake3、aes-gcm等)即可保持构建小巧,无需引入整个生态。 - 对于受限的
no_std构建,建议设置default-features = false。
- 仅启用所需原语(如
-
AEAD 与 ChaCha20-Poly1305:
- 提供简洁的 API 进行加解密。
- 示例展示了如何初始化密钥和非门(nonce),执行
encrypt_in_place和decrypt_in_place,并验证结果。
-
密码哈希 (Argon2):
- 支持 Argon2id,提供参数构建、哈希字符串生成及验证策略。
- 需启用
getrandom特性以支持 OS 级别的随机数生成(用于盐值、密钥或 nonce)。
-
非密码学哈希与 CRC:
- 提供快速非密码学哈希(如 CRC32)用于索引、校验和、去重和数据完整性检查。
- 警告:明确禁止将这些用于密码、签名、MAC、密钥派生或认证,因为它们不具备安全性。
安全与审计机制
- 显式审计旋钮:
portable-only:强制运行时分发至常量时间的便携式后端,禁用硬件加速。getrandom、serde、rayon均为可选启用(opt-in)。
- 安全卫生(Security Hygiene):
- 不透明的验证错误:避免泄露失败细节。
- 常量时间相等性检查。
- 秘密类型在 drop 时自动清零(zeroize),并屏蔽
Debug输出。 - 严格的算术运算:针对计数器、长度、偏移量和索引进行严格检查。
- AEAD 失败开放路径会擦除输出缓冲区。
- 便携式和加速后端进行差异测试,确保输出字节完全一致。
- CI 集成:包含官方测试向量、模糊测试(fuzzing)语料库回放、Miri 检查、
cargo deny和cargo audit。
已知弱点与局限性
尽管性能优异,但基准测试也揭示了当前的短板:
- Linux CI:PBKDF2-SHA256 (iters=1) 仅为 0.81x,X25519 Diffie-Hellman 为 0.92x,RSA-4096 验证为 0.94x,以及小消息 AEAD 开销。
- Apple Silicon:BLAKE3 64 KiB 性能损失,HMAC-SHA256 在
aws-lc-rs面前存在压力,空消息 ChaCha20-Poly1305 开销,以及 SHA3-256 流式处理损失。 - 定位说明:
rscrypto是一个原语 crate(primitives crate),不是 TLS 栈、PKI 工具包、协议实现或 FIPS 140-3 验证模块。
关键要点
- 统一栈:
rscrypto提供了一个单一的原语栈,涵盖 RSA、Ed25519、X25519、AEAD、哈希、KDF 等,避免了组合多个 crate 带来的 API 碎片化和依赖复杂性。 - 纯 Rust 与硬件加速:核心为便携式 Rust 实现,SIMD 和汇编仅作为可选加速器。这种设计确保了
no_std、
