返回更新列表
新发布Aug 7, 2026

rscrypto v0.8.0

Rust 加密库,零默认依赖:BLAKE3、Ed25519/X25519、哈希、MAC、KDF、AEAD 和校验和,支持完整 SIMD/ASM 加速

分享

rscrypto

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

rscrypto 将密码学原语、密码学哈希与快速哈希、密码哈希以及校验和统一在一个特性模型之下。 目标平台门控的 SIMD 与汇编可加速可移植的 Rust 后端,而无需生产环境中的 C/FFI、OpenSSL 或系统库依赖。

rscrypto 是一个原语库,而非 TLS 栈、PKI 工具包、密钥存储或协议实现。

实测性能

性能声明仅限于确切的保留测试活动和等效工作负载。 修正后的 2026 年 9 月测试活动包含 19,614 个已完成用例, 其中包括修正后的 ML-KEM 和 Argon2 对比, 但尚未整理出替代的汇总评分卡。 混合了熵、密钥准备、输出表示或盐长度的旧汇总数据仍属历史记录,并非当前性能声明。

基准测试概览 记录了各测试活动、特定目标的结果以及剩余限制。 对比契约 定义了等效的 ML-KEM 和 Argon2 工作负载。

保障

安全声明采用失败关闭机制:缺失或过期的证据会移除该声明,而非放宽门槛。

  • 正确性证据结合了 NIST、RFC、上游和 Wycheproof 测试向量, 并辅以独立实现、属性测试、负向测试和 Miri。
  • 模糊测试目标覆盖生产实现中的原语、解析器、状态机和 trait 边界。 最小化种子可作为测试重放,并设有独立的 sanitizer 通道。
  • 可移植与加速版本的差分测试覆盖原生目标上的长度、对齐、 尾部、状态转换、分派和回退行为。
  • 常量时间测试框架在 ct.toml 中清点确切操作, 并结合优化后的链接二进制检查、针对声明固定形状内核的 BINSEC 证明, 以及针对声明端到端用例的 DudeCT 计时测试。
  • 秘密所有者会遮蔽 Debug 并在 drop 时清除已初始化的存储。 复制规则因类型而异:带密钥的 BLAKE2/BLAKE3 状态支持 Clone。 所有权清单 列出了这些边界。 验证失败是不透明的;失败的 AEAD 解密会清除未认证的明文。

常量时间声明仅在所需目标、特性、编译器、配置文件和操作的证据通过时才成立。 看起来无分支的源代码不被视为证明。

请查阅 测试证据、常量时间模型、秘密生命周期 和 威胁模型。

剩余的独立审查缺口是第三方安全审计。 项目目前无法资助此类审计。 自动化证据不能替代该审查,因此 rscrypto 不声称已通过审计、 FIPS 140-3 验证、形式化验证,或整个 crate 为常量时间。

请通过 GitHub 私有漏洞报告 按照 SECURITY.md 流程报告疑似漏洞,而非公开 issue。

仅安装你使用的部分

最小 no_std SHA-2 构建:

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

启用操作系统随机性的完整原语栈:

[dependencies]
rscrypto = { version = "0.10", 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);

哈希 API 支持一次性与流式使用。 AEAD、签名、RSA、P-256 和 P-384 ECDH、X25519、ML-KEM、密码哈希 以及后端自省的可运行工作流位于 examples/README.md。

原语与特性映射

类别包含内容启用方式
校验和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、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 或叶子特性

仅用于兼容性的 WebSocket accept 摘要需要 websocket-sha1, 该特性被排除在 full 及所有其他伞形特性之外。

请使用 docs.rs 查看确切的类型和方法。

平台与分派

可移植的 Rust 实现是逐字节的权威。 编译时目标支持,以及在启用 std 时检测到的运行时 CPU 能力, 会选择符合条件的 SIMD 或汇编内核。 不支持的加速会回退到可移植 Rust。

平台指南 说明了支持的目标目录、分派、no_std 覆盖范围 以及 portable-only 的限制。

项目

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

更改代码前请阅读 CONTRIBUTING.md。 已发布的更改记录在 CHANGELOG.md 中。

许可证

在 Apache-2.0 或 MIT 下双许可,由你选择。

分类