1. PSA Crypto API编码体系设计解析
在嵌入式安全领域,Arm的PSA Crypto API提供了一套标准化的密码学接口规范。其核心创新在于采用结构化整型编码方案,将算法标识符和密钥类型这两个关键要素进行了系统化组织。这种设计既保证了接口的类型安全性,又兼顾了运行时效率。
1.1 算法标识符(psa_algorithm_t)架构
PSA算法标识符采用32位无符号整型(psa_algorithm_t)存储,其位域划分如下图所示:
code复制31 30 24 23 22 21 16 15 8 7 0
+--+---------------+-----+-----+--------+--------+--------+
|V | CAT | S | B |LEN/T2 | T1 | H |
+--+---------------+-----+-----+--------+--------+--------+
各字段含义如下:
- V(31位):实现定义算法标志位(1表示厂商自定义)
- CAT(30-24位):算法类别,如哈希(0x02)、MAC(0x03)等
- S(23位):流密码/密钥拉伸算法标志
- B(22位):基于分组密码的算法标志
- LEN/T2(21-16位):MAC/AEAD标签长度或密钥协商子类型
- T1(15-8位):算法子类型
- H(7-0位):哈希算法子类型
这种编码方案的优势在于:
- 通过位运算即可快速提取算法特征
- 支持算法组合(如HMAC-SHA256)
- 保留扩展空间供厂商自定义
1.2 密钥类型(psa_key_type_t)设计
密钥类型采用16位编码,结构如下:
code复制15 14 13 12 11 1 0
+--+--+-----+-----------+--+
|V |A | CAT | type_spec |P |
+--+--+-----+-----------+--+
关键字段说明:
- V(15位):厂商自定义密钥类型标志
- A(14位):非对称密钥标志
- CAT(13-12位):密钥类别(原始数据/对称密钥/非对称密钥等)
- P(0位):奇偶校验位
这种设计使得密钥类型检查可以通过简单的位掩码操作完成,例如判断是否为非对称密钥:
c复制#define PSA_KEY_TYPE_IS_ASYMMETRIC(type) (((type) & 0x4000) == 0x4000)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 算法分类与编码详解
2.1 哈希算法实现
哈希算法编码固定CAT=0x02,H字段存储具体算法类型。标准定义包括:
markdown复制| 算法 | HASH-TYPE | 标识符值 |
|-------------|-----------|---------------|
| SHA-256 | 0x09 | 0x02000009 |
| SHA3-384 | 0x12 | 0x02000012 |
| SM3 | 0x14 | 0x02000014 |
特殊设计:
- 通配符PSA_ALG_ANY_HASH(0x020000FF)允许在签名操作中动态指定哈希算法
- 算法宏自动构造标识符,如:
c复制#define PSA_ALG_SHA3_256 0x02000011
2.2 MAC算法技术细节
MAC算法(CAT=0x03)的编码包含独特设计:
- W标志位(15位):表示通配策略(允许不小于指定长度的MAC)
- LEN字段(21-16位):指定MAC长度(0表示默认长度)
- B标志位(22位):指示是否基于分组密码
典型MAC算法编码示例:
c复制PSA_ALG_HMAC(PSA_ALG_SHA_25
