25个版本
0.12.0 | 2024年7月3日 |
---|---|
0.11.0 | 2023年10月11日 |
0.10.0 | 2022年10月2日 |
0.9.0 | 2022年5月5日 |
0.1.8 | 2020年7月17日 |
#47 in 密码学
1.5MB
2.5K SLoC
rust-hpke
这是HPKE混合加密标准(RFC 9180)的实现。
注意
此crate尚未经过正式审计。虽然Cloudflare审查了版本0.8
我们选择的HPKE实现尚未经过正式审计,因此我们进行了自己的内部安全审查。我们分析了所使用的密码学原语和相应的库。在原语的组合和安全的编程实践,如正确零化内存和随机数生成器的安全使用之间,我们没有发现任何安全漏洞。
实现内容
此实现符合HPKE标准(RFC 9180)。
以下是规范中列出的所有原语。带有勾选框的原语是已实现的。
- 密钥封装机制(KEMs)
- DHKEM(Curve25519, HKDF-SHA256)
- DHKEM(Curve448, HKDF-SHA512)
- DHKEM(P-256, HKDF-SHA256)
- DHKEM(P-384, HKDF-SHA384)
- DHKEM(P-521, HKDF-SHA512)
- 密钥派生函数(KDFs)
- HKDF-SHA256
- HKDF-SHA384
- HKDF-SHA512
- 认证加密(AEADs)
- AES-GCM-128
- AES-GCM-256
- ChaCha20Poly1305
crate功能
默认功能标志:alloc
、x25519
、p256
。
功能标志列表
alloc
- 包括类似AeadCtxR::open()
和AeadCtxS::seal()
的分配方法x25519
- 启用基于X25519的KEMsp256
- 启用基于NIST P-256的KEMsp384
- 启用基于NIST P-384的KEMsp521
- 启用基于NIST P-521的KEMsstd
- 包括用于HpkeError
的std::error::Error
的实现。也做了alloc
所做的一切。
有关如何省略或包含功能标志的信息,请参阅Cargo关于功能的文档。
用法示例
请参阅客户端-服务器示例,了解如何使用HPKE。
破坏性变更
v0.12中的破坏性变更
移除了serde_impls
功能。如果您正在使用此功能且需要向后兼容的序列化/反序列化,请参阅此处的维基页面。
最低支持版本(MSRV)
当前最低支持的Rust版本(MSRV)是1.65.0(897e37553 2022-11-02)。
变更日志
请参阅CHANGELOG.md,了解过去版本中进行的更改列表。
测试
要运行所有测试,执行cargo test --all-features
。这包括已知答案测试,它们针对test-vector-COMMIT_ID.json
进行测试,其中COMMIT_ID
是测试向量所在的规范版本的简短提交。最终的规范使用提交5f503c5。请参阅参考实现,了解如何生成测试向量。
基准测试
要运行所有基准测试,执行cargo bench --all-features
。如果您设置了自定义功能标志,基准测试仍将正常工作,并运行它能够运行的子集。基准测试的结果可以作为一个整洁的网页在target/criterion/report/index.html
中阅读。
测试的加密套件
- 具有128位安全性的NIST加密套件:AES-GCM-128,HKDF-SHA256,ECDH-P256
- 具有128位安全性的非NIST加密套件:ChaCha20-Poly1305,HKDF-SHA256,X25519
每个加密套件中测试的函数
Kem::gen_keypair
setup_sender
,操作模式为Base,Auth,Psk和AuthPsksetup_receiver
,操作模式为Base,Auth,Psk和AuthPskAeadCtxS::seal
,明文长度为64,附加数据长度为64AeadCtxR::open
,密文长度为64,附加数据长度为64
敏捷性
定义:加密敏捷性指的是加密系统或协议改变其底层原语的能力。例如,TLS具有“加密敏捷性”,因为您可以使用许多不同的加密套件运行该协议。
该crate默认不支持加密敏捷性。这是因为加密原语被编码为满足某些约束的类型,并且类型需要在编译时确定(广义上)。尽管如此,您自己实现敏捷性没有任何阻碍。示例文件夹中有一个示例实现。示例实现很混乱,因为敏捷性很混乱。
许可证
根据您的选择许可
- Apache License,版本2.0,(LICENSE-APACHE)
- MIT许可证(LICENSE-MIT)
。
依赖关系
~3.5–5.5MB
~104K SLoC