文章摘要
wolfCOSE是一个轻量级C库,基于wolfSSL加密后端实现CBOR和COSE标准。主要特点包括:支持40种算法和全COSE消息类型;具备后量子签名能力;零动态内存分配;极小内存占用(最小7.5KB);支持FIPS 140-3认证;适用于嵌入式系统。提供签名、加密和MAC算法,包括ES系列、EdDSA、ML-DSA和AES等。
文章总结
wolfCOSE 项目概述
wolfCOSE 是一个轻量级的 C 语言库,实现了 CBOR (RFC 8949) 和 COSE (RFC 9052/9053) 标准,使用 wolfSSL 作为加密后端。
主要特性
- 完整的 RFC 9052 消息集:支持所有六种 COSE 消息类型,包括多签名者
COSE_Sign和多接收者COSE_Encrypt/COSE_Mac - 后量子签名:支持 ML-DSA (Dilithium) 的所有三个安全级别
- 40 种算法:涵盖签名、加密、MAC 和密钥分发
- 零动态分配:所有操作使用调用者提供的缓冲区
- 极小体积:最小构建(Sign1+ECC)仅 7.5 KB
.text,完整构建(40 种算法)25.6 KB,零.data/.bss - 完整 COSE 生命周期仅需约 1KB RAM(不包括 wolfCrypt 内部使用)
- FIPS 140-3 认证路径:通过 wolfCrypt FIPS 证书 #4718
支持的算法
- 签名:ES256, ES384, ES512, EdDSA (Ed25519/Ed448), PS256/384/512, ML-DSA-44/65/87
- 加密:AES-GCM (128/192/256), ChaCha20-Poly1305, AES-CCM 变体
- MAC:HMAC-SHA256/384/512, AES-MAC
- 密钥分发:Direct, AES Key Wrap, ECDH-ES+HKDF
COSE 消息类型
wolfCOSE 实现了 RFC 9052 中定义的所有消息类型,包括单参与者和多参与者变体:
| 消息类型 | API | 用途 |
|---------|-----|------|
| COSE_Sign1 | wc_CoseSign1_Sign / wc_CoseSign1_Verify | 单签名者签名 |
| COSE_Sign | wc_CoseSign_Sign / wc_CoseSign_Verify | 多签名者(同一负载上的独立签名) |
| COSE_Encrypt0 | wc_CoseEncrypt0_Encrypt / wc_CoseEncrypt0_Decrypt | 单接收者 AEAD |
| COSE_Encrypt | wc_CoseEncrypt_Encrypt / wc_CoseEncrypt_Decrypt | 多接收者(通过 Direct / AES-KW / ECDH-ES 分发) |
| COSE_Mac0 | wc_CoseMac0_Create / wc_CoseMac0_Verify | 单接收者 MAC |
| COSE_Mac | wc_CoseMac_Create / wc_CoseMac_Verify | 多接收者 MAC(共享 MAC 密钥) |
| COSE_Key / COSE_KeySet | wc_CoseKey_Encode / wc_CoseKey_Decode | 所有密钥类型的序列化 |
构建选项
wolfCOSE 需要 wolfSSL 作为加密后端,最低支持版本为 v5.8.0-stable。提供多种构建配置: - 最小构建(ECC + AES-GCM):支持 COSE Sign1 (ES256/384/512) 和 Encrypt0 (AES-GCM) - 最小构建(后量子/仅 ML-DSA):纯后量子签名支持 - 完整构建(所有算法):支持全部 40 种算法
测试与合规性
- 持续集成:每次推送和 PR 时运行
- 全面测试:约 240 种算法组合测试
- 静态分析:cppcheck, Clang 分析器, GCC
-fanalyzer - MISRA C 合规:2012 和 2023 版本
- 代码覆盖率:wolfcose.c 达 99.3%,wolfcose_cbor.c 达 100%
文档与支持
完整文档可在 Wiki 获取,包括: - 入门指南 - 消息类型详解 - 算法列表 - API 参考 - MISRA 合规性说明
wolfCOSE 目前采用 GPLv3 许可,虽然由 wolfSSL 开发者维护,但尚未列为官方支持产品。如需商业许可或专业支持,请联系 wolfSSL。
评论总结
总结评论内容:
- 关于COSE的解释说明(无评分)
- 主要观点:介绍COSE是CBOR对象签名加密标准,类似JSON的JOSE标准
- 关键引用: "For those of us not in the loop, COSE is CBOR Object Signing and Encryption" "对于不了解的人来说,COSE是CBOR对象签名和加密" "It is patterned off JOSE, the JSON standards which includes favorites like JWK" "它模仿了JOSE标准,即包含JWK等常用功能的JSON标准"
- 对项目readme的批评(无评分)
- 主要观点:指出项目文档中关于内存分配的表述不准确
- 论据: a) 未说明架构/编译器参数的.text大小无意义 b) 栈分配不等于零分配,代码中存在大量栈分配
- 关键引用: "Saying it takes 0 .bss and .data just means it allocates everything elsewhere" "说占用0.bss和.data只是表示它在其他地方分配" "Some of this code will allocate hundreds if not low thousands of bytes onto the stack" "这些代码会在栈上分配数百甚至数千字节"
不同观点保持平衡:第一条是技术解释,第二条是技术批评,都聚焦于技术细节本身。