#加密 #密钥交换 #AEAD #加密

无需std hpke

纯Rust实现的HPKE混合加密标准(RFC 9180)

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 密码学

Download history 5835/week @ 2024-05-03 6216/week @ 2024-05-10 24212/week @ 2024-05-17 31995/week @ 2024-05-24 34578/week @ 2024-05-31 24073/week @ 2024-06-07 25387/week @ 2024-06-14 34791/week @ 2024-06-21 25930/week @ 2024-06-28 23421/week @ 2024-07-05 35921/week @ 2024-07-12 28769/week @ 2024-07-19 31559/week @ 2024-07-26 26562/week @ 2024-08-02 24548/week @ 2024-08-09 22566/week @ 2024-08-16

111,399 每月下载量
用于 19crate (8个直接使用)

MIT/Apache

1.5MB
2.5K SLoC

rust-hpke

Version Docs CI

这是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功能

默认功能标志:allocx25519p256

功能标志列表

  • alloc - 包括类似AeadCtxR::open()AeadCtxS::seal()的分配方法
  • x25519 - 启用基于X25519的KEMs
  • p256 - 启用基于NIST P-256的KEMs
  • p384 - 启用基于NIST P-384的KEMs
  • p521 - 启用基于NIST P-521的KEMs
  • std - 包括用于HpkeErrorstd::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和AuthPsk
  • setup_receiver,操作模式为Base,Auth,Psk和AuthPsk
  • AeadCtxS::seal,明文长度为64,附加数据长度为64
  • AeadCtxR::open,密文长度为64,附加数据长度为64

敏捷性

定义:加密敏捷性指的是加密系统或协议改变其底层原语的能力。例如,TLS具有“加密敏捷性”,因为您可以使用许多不同的加密套件运行该协议。

该crate默认不支持加密敏捷性。这是因为加密原语被编码为满足某些约束的类型,并且类型需要在编译时确定(广义上)。尽管如此,您自己实现敏捷性没有任何阻碍。示例文件夹中有一个示例实现。示例实现很混乱,因为敏捷性很混乱。

许可证

根据您的选择许可

依赖关系

~3.5–5.5MB
~104K SLoC