
rscrypto v0.9.0
Rust 加密库,零默认依赖:BLAKE3、Ed25519/X25519、哈希、MAC、KDF、AEAD 和校验和,支持完整 SIMD/ASM 加速
rscrypto
rscrypto 将密码学原语、加密与快速哈希、密码哈希以及校验和整合到一个功能模型中。面向目标的 SIMD 和汇编加速了可移植的 Rust 后端,无需生产级 C/FFI、OpenSSL 或系统库依赖。
rscrypto 是一个原语库,而非 TLS 协议栈、PKI 工具包、密钥存储或协议实现。
实测性能
2026-08-18 快照将提交 7eb44e9 与八个 Linux CI 运行器上每个平台、原语、操作和输入形状的最快匹配外部实现进行了比较。外部基线是逐案选择的,而非跨竞争对手取平均值。比值为 外部实现 / rscrypto;数值越高越好。
在 6,144 个精确案例比较中,rscrypto 在 3,780 个案例中快于 5% 以上,在 1,695 个案例中差距在 5% 以内,在 669 个案例中较慢。几何平均加速比为 1.62 倍,其中校验和为 6.18 倍,RSA 为 1.65 倍,AEAD 为 1.61 倍,ML-KEM 为 1.55 倍。
图表中的 Apple Silicon 结果是单独的 2026-07-04 本地快照;未包含在 Linux 汇总数据中。
这是整体套件领先,而非声称每项操作都胜出。同一快照同时发布了 s390x ECDSA 回归以及较慢的 rapidhash-stream/one-write 路径,连同每一行原始数据。在将结果应用于部署工作负载之前,请阅读 基准测试概览 获取完整记分卡,以及 基准测试指南。
保证
安全声明采用失败即关闭原则:缺失或过时的证据会移除声明,而非削弱门槛。
- 正确性证据结合了 NIST、RFC、上游和 Wycheproof 测试向量,以及独立实现、属性测试、负向测试和 Miri。
- 模糊测试目标覆盖原语、解析器、状态机和 trait 边界上的生产实现。最小化种子作为测试重放,并配有独立的 sanitizer 通道。
- 可移植与加速实现的差分测试覆盖长度、对齐、尾部、状态转换、分派以及原生目标上的回退行为。
- 恒定时间测试框架在
ct.toml中盘点精确操作,并结合优化的链接二进制检查、针对声明的固定形状内核的 BINSEC 证明,以及针对声明的端到端案例的 DudeCT 时序测试。 - 固定大小秘密持有者在
Debug中掩码、省略普通相等性比较,并在 drop 时覆盖所拥有的字节。验证失败不透明;失败的 AEAD 打开会清除调用方输出缓冲区。
恒定时间声明仅在匹配的签名版本包含经认证的证据包,且其所需的目标、功能、编译器、配置文件和操作门全部通过时才存在。看起来无分支的源码不被视为证明。发布产物受签名标签门控,通过 crates.io Trusted Publishing 发布,并受 GitHub 构建来源认证覆盖。
请查阅 测试证据、恒定时间模型、秘密生命周期、威胁模型 和 发布契约。
剩余的独立审查缺口是第三方安全审计。项目目前无法负担此项费用。自动化证据不能替代该审查,因此 rscrypto 不声称已通过审计、FIPS 140-3 验证、形式化验证,或作为整个库具备恒定时间特性。
请通过 GitHub 私有漏洞报告 按照 SECURITY.md 流程报告疑似漏洞,而非公开 issue。
仅安装你所需的功能
最小化 no_std SHA-2 构建:
[dependencies]
rscrypto = { version = "0.9", default-features = false, features = ["sha2"] }
启用操作系统随机数的完整原语栈:
[dependencies]
rscrypto = { version = "0.9", features = ["full", "getrandom"] }
默认功能为 std;default-features = false 可移除它。仅当 API 需要从操作系统获取盐、密钥、nonce 或 RSA 密钥生成熵时,才启用 getrandom。功能指南 负责精确的依赖关系和部署控制。
快速开始
use rscrypto::Sha256;
let one_shot = Sha256::digest(b"hello world");
let mut hasher = Sha256::new();
hasher.update(b"hello ");
hasher.update(b"world");
assert_eq!(hasher.finalize(), one_shot);
哈希 API 支持一次性与流式使用。AEAD、签名、RSA、X25519、ML-KEM、密码哈希和后端内省的可运行工作流位于 examples/README.md。
原语与功能映射
| 类别 | 包含内容 | 启用方式 |
|---|---|---|
| 校验和 | CRC-16、CRC-24、CRC-32、CRC-32C、CRC-64/XZ、CRC-64/NVMe | checksums 或叶子功能 |
| 加密哈希 | SHA-2、SHA-3、SHAKE、cSHAKE、BLAKE2、BLAKE3、Ascon-Hash/XOF/CXOF | crypto-hashes 或叶子功能 |
| 快速哈希 | XXH3-64/128、RapidHash V3-64 | fast-hashes 或叶子功能 |
| MAC 与 KDF | HMAC-SHA-2/SHA-3、KMAC128/256、Poly1305、HKDF-SHA-2、PBKDF2-HMAC-SHA-2 | macs、kdfs 或叶子功能 |
| 密码哈希 | Argon2d/i/id、scrypt、有界 PHC 密码记录 | password-hashing 或叶子功能 |
| 签名与 RSA | ECDSA P-256/P-384、Ed25519、RSA 签名、验证、加密和密钥生成 | signatures 或叶子功能 |
| 密钥交换与 KEM | X25519、ML-KEM-512/768/1024 | key-exchange 或叶子功能 |
| AEAD | AES-GCM、AES-GCM-SIV、AES-SIV-CMAC、ChaCha20-Poly1305、XChaCha20-Poly1305、AEGIS-256、Ascon-AEAD128 | aead 或叶子功能 |
使用 docs.rs 获取精确的类型和方法。替换其他库时请使用 迁移指南。
平台与分派
可移植 Rust 实现是逐字节一致的权威。编译时目标支持以及(启用 std 时)检测到的运行时 CPU 能力会选择符合条件的 SIMD 或汇编内核。不支持的加速会回退到可移植 Rust。
平台指南 负责目标矩阵、分派模型、no_std 覆盖范围以及 portable-only 的限制。
项目
修改代码前请阅读 CONTRIBUTING.md。已发布的变更记录在 CHANGELOG.md 中。
许可证
根据 Apache-2.0 或 MIT 双许可,由您选择。