根据一项加密库漏洞的实证研究,加密库中37.2%的漏洞是内存安全问题,而只有27.2%是加密问题。
现在是时候不再使用C作为实现加密库的实际语言了。
由于Rust的高级特性与底层控制,没有垃圾收集器,可移植性和易于嵌入,Rust是我们取代当今最常用的加密库的最佳选择。OpenSSL, BoringSSL和libsodium,它们都是用C编写的。
2024年,Rust的加密生态系统相当成熟,比以往任何时候都更令人兴奋!我们现在至少有2个库可以在fips认证模式下使用。
废话不多说,让我们来看看Rust开发人员可以安全地使用加密原语的不同选择。
aws-lc-rs
虽然aw-lc-rs是最新的crate,但它也是最令人兴奋的!
aw-lc-rs是AWS的libcrypto的包装器,libcrypto是由AWS密码学团队为AWS及其客户维护的通用加密库。它支持大多数平台(Linux、Windows、macOS、Android)和最常见的体系结构(x86-64、aarch64)。
它的目标是提供与ring相同的API(见下文),这是惯用的Rust库并且易于使用。
它不仅提供了FIPS 140-3认证模式,还提供了后量子密钥封装机制(KEM)算法:Kyber512、Kyber768和Kyber1024。
ring
ring专注于通过易于使用的API,它公开了一组核心加密操作的实现、测试和优化。ring公开了一个Rust API,并用Rust、C和汇编语言进行混合编写。
ring提供了底层原语,可以在高级协议和应用程序中使用。主要维护者以对密码学和高质量代码非常认真而闻名。
ring的唯一问题是缺少一些算法,例如XChaCha20-Poly1305,并且它还没有提供任何后量子密码原语。
boring
boring是Cloudflare对Google的boringssl的安全包装。这个API太像c了,用起来不舒服,所以不推荐它。
dalek-cryptography
dalek-cryptography是一个GitHub组织,重组了多个关于纯rust椭圆曲线加密的包,如x25519和ed25519。
这些项目被密码学的组织使用,比如Signal和Diem。
Rust Crypto
Rust Crypto是一个GitHub组织,在纯Rust中,通过提供一个基本特征并为所有不同的算法实现它,重新组合了需要的所有加密原语。
不幸的是,并非所有的crate都由专业的第三方审核。
总结
crate | 审核 | fips认证 | 后量子原语 | 总下载量 |
aws-lc-rs | Yes ✅ | Yes ✅ | Yes ✅ | 1,777,000 |
boring | Yes ✅ | Yes ✅ | Yes ✅ | 1,096,000 |
ring | Yes ✅ | ❌ No | ❌ No | 125,140,000 |
RustCrypto | Partially 🟡 | ❌ No | Yes ✅ | 超过5亿(不同的crate) |
dalek-cryptography | ❌ No | ❌ No | ❌ No | 超过40,000,000(不同的crate) |
请注意,目前只有aws-lc-rs和ring可以与rust以及大多数HTTP客户端/服务器一起使用。