8 个版本
0.6.2 | 2024 年 6 月 24 日 |
---|---|
0.6.1 | 2024 年 6 月 22 日 |
0.6.0 | 2024 年 5 月 17 日 |
0.5.1 | 2024 年 3 月 5 日 |
0.4.1 | 2023 年 12 月 12 日 |
#163 in 网络编程
514 每月下载量
145KB
3K SLoC
lakers ─

Rust 中的 EDHOC (RFC 9528) 实现
什么是 EDHOC?
EDHOC(在 COSE 上使用短暂 Diffie-Hellman)是 IETF 的一项新标准,它提供了一个非常轻量级的认证密钥交换,非常适合在受限制的环境中使用,例如物联网环境。
EDHOC 特性
- 轻量级:完整认证密钥交换仅需 101 字节
- 安全:双向认证、前向安全和身份保护
- 传输无关:可以在有或没有 IP 连接的场景中使用;传输 EDHOC 的常用方法是 通过可靠的 CoAP
- 代码重用:由于在物联网场景中常用的技术(如 COSE、CBOR 和 CoAP)的重用而实现
- 最后,EDHOC 的主要用途是建立 OSCORE 安全上下文
lakers 特性
- 易于使用的类型声明 API,适用于发起者和响应者
- 微控制器优化:
无 std
,无堆分配,零依赖(除了加密后端之外) - 可配置的加密后端
- C 和 Python 绑定
- 支持 EDHOC 扩展,包括 零接触授权
它目前支持认证模式 STAT-STAT 和密码套件 2(AES-CCM-16-64-128、SHA-256、8、P-256、ES256、AES-CCM-16-64-128、SHA-256)。
入门指南
要在您的Rust项目中使用 lakers
,请在Cargo.toml中添加它,使用以下命令:cargo add lakers
。
以下是Initiator角色的API快速预览(对于Responder角色以及更多细节,请查看示例或单元测试)
// perform the handshake
let initiator = EdhocInitiator::new(default_crypto());
let (initiator, message_1) = initiator.prepare_message_1(None, &None)?; // c_i and ead_1 are set to None
let (initiator, _c_r, id_cred_r, _ead_2) = initiator.parse_message_2(&message_2)?;
let valid_cred_r = credential_check_or_fetch(Some(CRED_R), id_cred_r)?; // CRED_R contains Responder's public key
let initiator = initiator.verify_message_2(I, cred_i, valid_cred_r)?; // I is Initiator's private key
let (mut initiator, message_3, i_prk_out) = initiator.prepare_message_3(CredentialTransfer::ByReference, &None)?; // no ead_3
// derive a secret to use with OSCORE
let oscore_secret = initiator.edhoc_exporter(0u8, &[], 16); // label is 0
// update the prk_out key (context taken from draft-ietf-lake-traces)
let context = &[0xa0, 0x11, 0x58, 0xfd, 0xb8, 0x20, 0x89, 0x0c, 0xd6, 0xbe, 0x16, 0x96, 0x02, 0xb8, 0xbc, 0xea];
let prk_out_new = initiator.edhoc_key_update(context);
C API
C兼容的静态库和头文件可以在发布页面下载。
Python API
lakers-python
可在PyPI上找到,要安装它,请运行pip install lakers-python
。
开发
要开发lakers
本身,请按照以下说明操作
-
确保您已安装Rust。
-
下载、编译并运行测试
git clone [email protected]:openwsn-berkeley/lakers.git && cd lakers
cargo build
cargo test
lakers
可以根据启用的功能进行不同的配置。要了解有哪些可用功能以及如何为构建和测试的多个配置选择它们,请查看GitHub Actions文件。
示例:在原生主机上使用CoAP的EDHOC
在一个终端中运行示例CoAP服务器
cargo run --bin coapserver
在另一个终端中运行客户端
cargo run --bin coapclient
在输出中,您应该找到EDHOC握手消息和派生的OSCORE密钥/盐。
这些示例的源代码位于examples/coap/src/bin
。
示例:在不同加密后端上的nRF52840设备上的EDHOC
要构建在nrf52840dk上运行的示例应用程序,请按以下步骤操作
# head to the example `no_std` example
cd ./examples/lakers-no_std
# build using the cryptocell310 crypto backend (hardware-accelerated)
cargo build --target="thumbv7em-none-eabihf" --release
# build using the psa crypto backend (software-based)
cargo build --target="thumbv7em-none-eabihf" --no-default-features --features="crypto-psa, ead-none, rtt" --release
构建并烧录到板子
- 安装cargo-embed
- 运行上述命令之一,但将
build
替换为embed
。例如:cargo embed"thumbv7em-none-eabt class="pun-def pun-def-str">"
目录结构
此库结构为cargo workspace。其主要成员包括:
lib
:提供EDHOC实现的库。crypto
:不同的加密后端(例如psa、cryptocell310、rustcrypto)。ead
:通过外部授权数据(EAD)字段实现EDHOC的扩展。shared
:定义在库成员中使用的共享结构和模块。lakers-c
:提供从C代码中使用lakers
的外部函数接口。lakers-python
:用于在Python中使用lakers
的API。examples
:演示如何使用库的示例应用程序。
依赖项
~87KB