返回

文章详情

展示 HN: Rscrypto,纯 Rust 加密库,行业领先的公共基准

Hacker News2026年6月3日 16:41

纯 Rust 加密: RSA, Ed25519, X25519, AEADs, 哈希, KDFs, 密码哈希, CRCs, no_std , WASM 和硬件加速在一个依赖中。 rscrypto 是一个单一原语栈,适用于关注二进制大小、部署控制和速度的项目,而无需强制使用 C、OpenSSL 或系统库。为一个原语使用一个叶特性,为原语子集使用一个组,或对整个库使用全部特性。可移植的 Rust 后端始终存在。SIMD 和汇编只是加速器。目前的基准得分卡:Linux CI 的外部几何平均速度是 1.61 倍,3,545 / 5,832 胜利,5,210 / 5,832 胜平。苹果硅(MBP M1,macOS/aarch64 本地完整运行)外部几何平均速度是 1.25 倍,235 / 463 胜利,450 / 463 胜平。图表:2026-05-27 Linux CI 基准通过。2026-06-01 MBP M1 本地完整运行的苹果硅数据如下。值大于 1.00 倍意味着 rscrypto 比最快匹配的 Rust 基线更快。为什么选择 rscrypto?RSA 现在是一个一流的公民。严格的 DER 导入/导出,RSA-PSS,RSASSA-PKCS1-v1_5,OAEP,RSAES-PKCS1-v1_5,密钥生成,X.509/JWT/COSE/TLS 配置映射,盲私有操作和可重用的临时 API。一个连贯的原语栈。避免组合六个不同 API、功能模型和安全公约的 crate。小构建保持小。启用 sha2 , blake3 , aes-gcm , chacha20poly1305 , ed25519 , x25519 , argon2 或任何其他叶特性而无需引入额外的内容。可移植的 Rust 是事实的来源。SIMD 和 ASM 路径是加速器;可移植的后端仍然是参考实现。硬件调度是内置的。x86/x86_64, Arm/AArch64, 苹果硅, IBM Z, IBM POWER, RISC-V 和 WASM 均有可移植的后备方案,以及在有利情况下的优化内核。no_std 是一个一流目标。服务器、CLI、嵌入式、裸机和 WASM 构建使用相同的 crate 和功能模型。审计调节旋钮是明确的。portable-only 强制运行时调度到常量时间的可移植后端;getrandom , serde 和 rayon 是可选的。安全卫生是 API 的一部分。不透明的验证错误、恒定时间相等、零化的秘密类型、严格的算术、官方向量、模糊测试、Miri 和跨 CPU CI 被构建在项目纪律中。rscrypto 是一个原语 crate。它不是一个 TLS 栈,PKI 工具包,协议实现或 FIPS 140-3 验证模块。安装最小的 no_std SHA-2 构建:[ 依赖项 ] rscrypto = { version = "0.3.1" , default-features = false , features = [ "sha2" ] } 具有操作系统随机性的完整原语栈:[ 依赖项 ] rscrypto = { version = "0.3.1" , features = [ "full" , "getrandom" ] } 对于受限的 no_std 构建,请使用 default-features = false。仅在需要从操作系统生成盐、密钥或随机数时启用 getrandom。快速入门使用 rscrypto :: { Digest , Sha256 } ; let one_shot = Sha256 :: digest ( b"hello world" ) ; let mut h = Sha256 :: new ( ) ; h . update ( b"hello " ) ; h . update ( b"world" ) ; assert_eq ! ( h . finalize ( ) , one_shot ) ; 常见 API 形状故意简单/无聊:一次性使用时方便,流式传输时需要。验证 RSA 签名 [ 依赖项 ] rscrypto = { version = "0.3.1" , default-features = false , features = [ "rsa" ] } use rscrypto :: { RsaPssProfile , RsaPublicKey } ; fn verify_release_signature ( public_key_der : & [ u8 ] , message : & [ u8 ] , signature : & [ u8 ] ) -> bool { let Ok ( key ) = RsaPublicKey :: from_spki_der ( public_key_der ) else { return false ; } ; key . verify_pss ( RsaPssProfile :: Sha256 , message , signature ) . is_ok ( ) } 对于使用同一密钥的重复验证,仅分配一次临时空间:use rscrypto :: { RsaPssProfile , RsaPublicKey , RsaSignatureProfile } ; fn verify_batch ( public_key_der : & [ u8 ] , signed_messages : & [ ( & [ u8 ] , & [ u8 ] ) ] ) -> bool { let Ok ( key ) = RsaPublicKey :: from_spki_der ( public_key_der ) else { return false ; } ; let mut scratch = key . public_scratch ( ) ; signed_messages . iter ( ) . all ( | ( message , signature ) | { key . verify_signature_with_scratch ( RsaSignatureProfile :: pss ( RsaPssProfile :: Sha256 ) , message , signature , & mut scratch , ) . is_ok ( ) } ) } 启用 getrandom 进行操作系统支持的 RSA 密钥生成、签名盐/盲化、OAEP 加密随机性和私操作盲化:[ 依赖项 ] rscrypto = { version = "0.3.1" , default-features = false , features = [ "rsa" , "getrandom" ] } 加密数据 [ 依赖项 ] rscrypto = { version = "0.3.1" , default-features = false , features = [ "chacha20poly1305" ] } use rscrypto :: { Aead , ChaCha20Poly1305 , ChaCha20Poly1305Key , aead :: Nonce96 } ; let key = ChaCha20Poly1305Key :: from_bytes ( [ 0x11 ; 32 ] ) ; let nonce = Nonce96 :: from_bytes ( [ 0x22 ; Nonce96 :: LENGTH ] ) ; let cipher = ChaCha20Poly1305 :: new ( & key ) ; let aad = b"transfer:v1" ; let mut message = * b"pay bob 10" ; let tag = cipher . e

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡