硬件加密引擎
使用技术:Security Unified API(AES/SM4/SHA/TRNG/KM)
学习目标
- 理解 WS63 硬件加密引擎的架构——对称加密(AES/SM4)+ 哈希(SHA256)+ 随机数(TRNG)+ 密钥管理(KM)
- 掌握 AES-128/256-CBC/GCM 硬件加解密
- 掌握 SM4-CBC(国密对称加密)硬件加解密
- 掌握 SHA256 硬件哈希和 TRNG 真随机数生成
- 理解软件加密 vs 硬件加密的性能差异——硬件 AES ~5MB/s,软件 AES ~50KB/s
基本概念
硬件加密 vs 软件加密
| 对比项 | 硬件加密 | 软件加密 |
|---|---|---|
| 速度 | ~5MB/s | ~50KB/s |
| CPU 占用 | 低(引擎独立运行) | 高(CPU 逐字节算) |
| 功耗 | 低 | 高 |
| 适用场景 | 大数据量:OTA 校验、日志加密 | 小数据:偶尔一次的密钥交换 |
国密 vs 国际算法
| 国密 | 等效国际 | 使用场景 |
|---|---|---|
| SM4 | AES | 对称加密 |
| SM2 | ECC | 非对称加密/签名 |
| SM3 | SHA256 | 哈希摘要 |
国内合规项目(政务、军工、金融)必须使用国密算法。
密钥管理(KM)
硬件密钥管理模块——密钥存储在安全区域(不可读,只能用来加密/签名),比存储在 NV 中更安全。即使攻击者获取固件 dump 也无法读取密钥。
涉及 API
| API | 用途 |
|---|---|
uapi_cipher_aes_cbc_encrypt(key, iv, in, out, len) |
AES-CBC 加密 |
uapi_cipher_sm4_cbc_encrypt(key, iv, in, out, len) |
SM4-CBC 加密 |
uapi_cipher_sha256(data, len, hash) |
SHA256 哈希 |
uapi_trng_read(buf, len) |
真随机数生成(用于密钥/IV) |
uapi_km_store_key(key_id, key, len) |
密钥存储到安全区域 |
uapi_km_use_key(key_id, in, out, len) |
使用安全密钥加解密 |
具体 API 以
security_unified/cipher.h、security_unified/km.h、security_unified/trng.h头文件为准。
案例说明
做什么
TRNG 生成随机密钥 → 存储到 KM 安全区域 → AES-CBC 加密传感器数据 → 通过 MQTT 发送密文 → 云端解密。
关键配置
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 加密算法 | AES(国际)/ SM4(国密) | 国内合规项目选 SM4 |
| 加密模式 | CBC / GCM | GCM 带认证防篡改 |
| 密钥长度 | AES-128: 16B / AES-256: 32B | 安全要求高选 256 |
代码详解
概念性代码:
/* TRNG 生成随机 IV */
uint8_t iv[16];
uapi_trng_read(iv, sizeof(iv));
/* KM 存储密钥 */
uint8_t key[16];
uapi_trng_read(key, sizeof(key));
uapi_km_store_key(KEY_ID_SENSOR, key, sizeof(key));
/* AES-CBC 加密传感器数据 */
uint8_t plaintext[64] = "sensor: temp=25.5C, hum=60%";
uint8_t ciphertext[64];
uapi_km_use_key(KEY_ID_SENSOR, iv, plaintext, ciphertext, sizeof(plaintext));
/* SHA256 校验 */
uint8_t hash[32];
uapi_cipher_sha256(plaintext, sizeof(plaintext), hash);
TRNG(True Random Number Generator)生成的真随机数比
rand()伪随机数安全得多——用于密钥和 IV 生成。