kamil-kielbasa/libedhoc
GitHub: kamil-kielbasa/libedhoc
该项目是 RFC 9528 EDHOC 轻量级认证密钥交换协议的 C 语言实现,为资源受限的 IoT 设备提供安全上下文建立能力。
Stars: 16 | Forks: 6
# libedhoc
[](https://github.com/kamil-kielbasa/libedhoc/actions/workflows/ci-linux.yml)
[](https://github.com/kamil-kielbasa/libedhoc/actions/workflows/ci-zephyr.yml)
[](https://github.com/kamil-kielbasa/libedhoc/actions/workflows/ci-sandbox.yml)
[](https://codecov.io/gh/kamil-kielbasa/libedhoc)
[](https://kamil-kielbasa.github.io/libedhoc/)
[](https://github.com/kamil-kielbasa/libedhoc/releases)
[](LICENSE)
[](https://datatracker.ietf.org/doc/html/rfc9528)
[](https://datatracker.ietf.org/doc/rfc9529/)
Ephemeral Diffie-Hellman Over COSE (EDHOC) 协议的 C 语言实现——这是一种为资源受限设备设计的轻量级认证密钥交换协议。EDHOC 提供双向认证、前向保密和身份保护,旨在用于受限场景;其主要用例是建立受限 RESTful 环境(OSCORE)安全上下文。由 IETF 标准化为 [RFC 9528](https://datatracker.ietf.org/doc/html/rfc9528),并已通过 [RFC 9529](https://datatracker.ietf.org/doc/html/rfc9529) 测试向量进行验证。
## 功能
- 基于上下文的 API,使用上下文句柄实现安全访问控制
- 对 CoAP 友好的消息组合与处理
- 导出 OSCORE 会话以建立安全通信通道
- 为加密密钥、操作、凭据和 EAD 提供独立接口
- 私钥只能通过标识符访问;从不暴露原始密钥材料
- 所有 CBOR 编码/解码均被封装并对用户隐藏
- 可插拔的内存后端:通过 VLA 使用栈(默认,无堆)、堆(calloc / k_calloc)或自定义分配器
- 原生支持 Zephyr RTOS 并集成了 west manifest
- 已通过 cppcheck、clang-tidy、ASan、UBSan、Valgrind 和 LibFuzzer 验证
### 加密套件
| Suite | AEAD | Hash | ECDH | Signature |
|-------|--------------------|---------|---------|-----------|
| 0 | AES-CCM-16-64-128 | SHA-256 | X25519 | EdDSA |
| 2 | AES-CCM-16-64-128 | SHA-256 | P-256 | ES256 |
| 24 | A256GCM | SHA-384 | P-384 | ES384 |
### 认证方法
支持所有四种 EDHOC 认证方法 (0–3),结合了发起者和响应者的签名密钥(Signature Keys)和静态 DH 密钥(Static DH Keys)。
## 指标
| 指标 | 值 |
|--------------------------|----------------------------------------------------------------|
| 行覆盖率 | 92.8% |
| 函数覆盖率 | 100% |
| 测试数量 | 706+ (单元、集成、模糊测试) |
| 库的闪存占用 | ~20 KiB (加密套件 2, P-256/ES256, native_sim) |
| 静态 RAM (data + bss) | 0 字节 (默认栈后端;所有状态都在栈上) |
覆盖率详情请见 [Codecov 仪表板](https://codecov.io/gh/kamil-kielbasa/libedhoc)。内存和时间基准测试可作为 [CI artifacts](../../actions/workflows/ci-zephyr.yml) 获取。
## 文档
完整文档托管在 GitHub Pages 上: 。
| 文档 | 你将找到的内容 |
|---------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|
| [简介](https://kamil-kielbasa.github.io/libedhoc/getting_started/introduction.html) | EDHOC 和 libedhoc 是什么,支持的方法和加密套件 |
| [快速入门](https://kamil-kielbasa.github.io/libedhoc/getting_started/quick_start.html) | 最小可行构建与握手骨架 |
| [概念一览](https://kamil-kielbasa.github.io/libedhoc/getting_started/concepts.html) | EDHOC 心智模型 —— 角色、方法、加密套件、导出器 |
| [协议流程](https://kamil-kielbasa.github.io/libedhoc/guide/protocol_flow.html) | 完整的 CoAP + EDHOC 消息交换图 |
| [配置](https://kamil-kielbasa.github.io/libedhoc/guide/configuration.html) | Kconfig / 编译时选项和日志 |
| [API 参考](https://kamil-kielbasa.github.io/libedhoc/api/index.html) | 生命周期、错误模型以及各模块 API 页面 |
| [错误代码](https://kamil-kielbasa.github.io/libedhoc/reference/error_codes.html) | `enum edhoc_error_code` 和运行时获取错误的 API |
| [值](https://kamil-kielbasa.github.io/libedhoc/reference/values.html) | CBOR 快捷常量以及提取/扩展标签 |
| [词汇表](https://kamil-kielbasa.github.io/libedhoc/reference/glossary.html) | 文档中使用的每个 EDHOC / libedhoc 术语的定义 |
| [测试](https://kamil-kielbasa.github.io/libedhoc/project/testing.html) | 测试架构以及如何运行测试套件 |
| [贡献](https://kamil-kielbasa.github.io/libedhoc/project/contributing.html) | 提交更改的工作流 |
## 安全
有关漏洞报告和支持版本的策略,请参阅 [SECURITY.md](SECURITY.md)。
## 许可证
MIT 许可证。详情请参阅 [LICENSE](LICENSE) 文件。
## 相关项目
- [node-edhoc](https://github.com/stoprocent/node-edhoc) — EDHOC 的 TypeScript/Node.js 实现。
## 联系方式
email: kamkie1996@gmail.com
标签:Bash脚本, CoAP, OSCORE, 客户端加密, 密码学, 密钥交换, 嵌入式, 手动系统调用, 物联网