← 返回信息流
AI 资讯Hacker News·23 小时前

Show HN: 纯Rust加密库Rscrypto,公开展示行业领先性能

原标题:Show HN: Rscrypto, pure-Rust crypto with industry leading public benches

速览

开发者发布了名为Rscrypto的纯Rust加密库,旨在提供高性能且安全的加密解决方案。该项目通过公开展示行业领先的基准测试结果,证明了其在速度和安全性方面的竞争力。作为Show HN项目,它展示了Rust语言在系统级编程和密码学领域的潜力。

AI 深度解读

Show HN: Rscrypto,纯 Rust 实现且拥有行业领先基准测试的密码学库

背景

在 Rust 生态系统中,密码学库的选择往往需要在功能完整性、二进制体积、依赖复杂度以及性能之间做出权衡。传统的做法通常涉及组合多个独立的 crate(如 sha2ed25519aes-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 数据来自不同提交和测试范围,不建议合并为单一聚合值。

主要功能模块

  1. 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() 预分配缓冲区以提高效率。
  2. 轻量级构建

    • 仅启用所需原语(如 sha2blake3aes-gcm 等)即可保持构建小巧,无需引入整个生态。
    • 对于受限的 no_std 构建,建议设置 default-features = false
  3. AEAD 与 ChaCha20-Poly1305

    • 提供简洁的 API 进行加解密。
    • 示例展示了如何初始化密钥和非门(nonce),执行 encrypt_in_placedecrypt_in_place,并验证结果。
  4. 密码哈希 (Argon2)

    • 支持 Argon2id,提供参数构建、哈希字符串生成及验证策略。
    • 需启用 getrandom 特性以支持 OS 级别的随机数生成(用于盐值、密钥或 nonce)。
  5. 非密码学哈希与 CRC

    • 提供快速非密码学哈希(如 CRC32)用于索引、校验和、去重和数据完整性检查。
    • 警告:明确禁止将这些用于密码、签名、MAC、密钥派生或认证,因为它们不具备安全性。

安全与审计机制

  • 显式审计旋钮
    • portable-only:强制运行时分发至常量时间的便携式后端,禁用硬件加速。
    • getrandomserderayon 均为可选启用(opt-in)。
  • 安全卫生(Security Hygiene)
    • 不透明的验证错误:避免泄露失败细节。
    • 常量时间相等性检查。
    • 秘密类型在 drop 时自动清零(zeroize),并屏蔽 Debug 输出。
    • 严格的算术运算:针对计数器、长度、偏移量和索引进行严格检查。
    • AEAD 失败开放路径会擦除输出缓冲区。
    • 便携式和加速后端进行差异测试,确保输出字节完全一致。
  • CI 集成:包含官方测试向量、模糊测试(fuzzing)语料库回放、Miri 检查、cargo denycargo 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
查看原文 →github.com