返回更新列表
新发布Sep 3, 2026

rscrypto v0.9.0

Rust 密码学,零必需依赖:哈希、校验和、MAC、KDF、密码哈希、AEAD、签名、RSA、密钥交换、ML-KEM 和 ML-DSA。可移植的 Rust 参考实现,带 SIMD 与 ASM 后端。

分享

rscrypto

Crates.io Docs.rs MSRV 1.100.0 License: MIT OR Apache-2.0

rscrypto 是一个 Rust 库,提供密码学原语、哈希、密码哈希和校验和。 一个特性模型控制所有这些功能。 可移植 Rust 是参考实现。 SIMD 和汇编后端在支持的平台上使其更快。 生产构建不依赖 C、FFI、OpenSSL 或系统库。

rscrypto 仅提供原语。 它不是 TLS 栈、PKI 工具包、密钥存储或协议实现。

安装

rscrypto 需要 Rust 1.100。 在 Rust 1.100 稳定之前,请使用 1.100 beta 或更新的 nightly。 加速的 POWER、IBM Z 和 RISC-V 构建需要 nightly 编译器; portable-only 构建支持声明的 MSRV。 参见工具链。

仅含 SHA-2 的最小 no_std 构建:

[dependencies]
rscrypto = { version = "0.11", default-features = false, features = ["sha2"] }

所有原语,使用操作系统随机性:

[dependencies]
rscrypto = { version = "0.11", features = ["full", "getrandom"] }

默认特性是 std。 设置 default-features = false 可移除它。 仅对从操作系统获取盐、密钥、nonce 或 RSA 密钥生成熵的 API 启用 getrandom。 特性指南说明了如何选择特性。 Cargo.toml 定义了确切的特性图。

快速开始

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);

哈希类型支持一次性使用和流式使用。 examples/README.md 包含 AEAD、签名、RSA、P-256 和 P-384 ECDH、 X25519、ML-KEM、密码哈希和后端内省的可运行示例。

原语与特性

系列原语特性
校验和CRC-16、CRC-24、CRC-32、CRC-32C、CRC-64/XZ、CRC-64/NVMechecksums 或叶子特性
密码学哈希SHA-2、SHA-3、SHAKE、cSHAKE、BLAKE2、BLAKE3、Ascon-Hash/XOF/CXOFcrypto-hashes 或叶子特性
快速哈希XXH3-64/128、RapidHash V3-64fast-hashes 或叶子特性
MAC 和 KDFHMAC-SHA-2/SHA-3、KMAC128/256、Poly1305、HKDF-SHA-2、PBKDF2-HMAC-SHA-2macs、kdfs 或叶子特性
密码哈希Argon2d/i/id、scrypt、有界 PHC 密码记录password-hashing 或叶子特性
签名和 RSAECDSA P-256/P-384、Ed25519、ML-DSA-44/65/87、SLH-DSA(全部 12 个 FIPS 205 集,pure 和 HashSLH-DSA)、RSA 签名、验证、加密和密钥生成signatures 或叶子特性
密钥交换和 KEMP-256 ECDH、P-384 ECDH、X25519、ML-KEM-512/768/1024key-exchange 或叶子特性
AEADAES-GCM、AES-GCM-SIV、AES-SIV-CMAC、ChaCha20-Poly1305、XChaCha20-Poly1305、AEGIS-256、Ascon-AEAD128aead 或叶子特性

签名和 KEM 密钥为 ECDSA、Ed25519、RSA、ML-DSA、ML-KEM 和 SLH-DSA 导入和导出标准 DER(PKCS #8 和 SubjectPublicKeyInfo)。

WebSocket accept 摘要仅出于协议兼容性而存在。 它需要 websocket-sha1 特性。 任何伞形特性(包括 full)都不会启用它。

有关确切的类型和方法,请参见 docs.rs。 API 兼容性说明解释了输出类型、集合种子和保留的方法名。 密码学韧性指南解释了安全假设、迁移边界,以及选择更强密码学时应审查的证据。

平台与分发

可移植 Rust 实现逐字节定义了正确的输出。 每个加速后端必须给出相同的输出。 在编译时,目标决定哪些后端可用。 使用 std 时,rscrypto 还会在运行时检测 CPU 特性并选择后端。 如果没有可用的加速后端,则运行可移植实现。

平台指南列出了支持的目标。 它还解释了分发、no_std 支持以及 portable-only 的限制。

保证

安全声明仅在其证据通过时成立。 缺失或过时的证据会移除声明;它绝不会削弱门禁。

  • 正确性: NIST、RFC、上游和 Wycheproof 向量、独立实现、 属性测试、负面测试和 Miri。
  • 模糊测试: 模糊测试目标在生产代码上运行,覆盖原语、解析器、状态机 和 trait 边界。 最小化输入作为测试重放。 单独的通道使用 sanitizer 运行它们。
  • 后端: 差分测试将每个加速后端与可移植 Rust 进行比较。 它们覆盖长度、对齐、尾部、状态转换、分发 以及原生目标上的回退。
  • 常量时间: ct.toml 列出了测试的确切操作。 证据结合了优化链接二进制文件的检查、 针对固定形状内核的 BINSEC 证明,以及针对端到端操作的 DudeCT 计时测试。
  • 机密: 拥有机密的类型在 Debug 输出中隐藏其内容, 并在 drop 时清除其已初始化的存储。 复制规则因类型而异;例如,带密钥的 BLAKE2 和 BLAKE3 状态支持 Clone。 机密所有权清单列出了每种类型。
  • 失败: 验证失败不会说明失败原因。 失败的 AEAD 打开会清除未认证的明文。

常量时间声明仅适用于其证据所覆盖的目标、特性、编译器、配置 和操作。 看起来无分支的源代码不是证明。

有关详细信息,请参见测试证据、常量时间模型、机密生命周期 和威胁模型。

rscrypto 尚未经过第三方安全审计。 项目目前无力支付审计费用,而自动化证据不能替代审计。 rscrypto 不声称已审计、通过 FIPS 140-3 验证、经过形式化验证, 或整个 crate 为常量时间。

通过 GitHub 私有漏洞报告报告疑似漏洞。 遵循 SECURITY.md 流程。 不要公开提交 issue。

性能

基准运行 #37092266645 于 2026-10-03 在八个平台上 测量了 v0.10.0 源代码。 每个平台有 346 项哈希、校验和、MAC、XOF 和 scrypt 的同类比较。 每项比较将最快外部 crate 的中位时间除以 rscrypto 的中位时间。 比率高于 1.00x 表示 rscrypto 更快。

平台更快3% 以内更慢中位比率
Intel Linux (c8i)21188471.09x
AMD Linux (c8a)2568191.13x
Intel Windows (c8i)186105551.05x
AMD Windows (c8a)26268161.09x
Graviton5 Linux (c9g)147121781.01x
POWER10 Linux206122181.07x
IBM Z Linux30119262.77x
RISC-V Linux19779701.05x

这些结果来自云和共享主机上的一次运行。 它们不包括 AEAD、签名、密钥交换、ML-KEM、ML-DSA、Argon2 或 RSA 用例, 也不包括 macOS。 基准概览给出了按系列分类的结果、 方法和限制。 比较契约定义了等效的 ML-KEM 和 Argon2 工作负载。 较旧的汇总表混合了不同的工作负载。它们是历史记录,不是当前声明。

项目

指南和示例描述了本仓库中的源代码。 对于已发布版本,请使用匹配的 API 文档。

在更改代码之前,请阅读 CONTRIBUTING.md。 CHANGELOG.md列出了已发布的更改。

许可证

根据 Apache-2.0 或 MIT 双重许可,由您选择。

分类