CE 使用指南
1. 模块介绍
1.1. 术语定义
术语 | 定义 | 注释说明 |
---|---|---|
CE | Crypto Engine | 硬件加解密算法引擎 |
DES | Data Encryption Standard | 一种对称分组密码算法 |
AES | Advanced Encryption Standard | 一种对称分组密钥算法 |
ECB | Electronic Code Book | 电子密码本模式 |
CBC | Cipher Block Chaining | 密码分组链模式 |
CTR | Counter | 计数器模式 |
XTS | XEX Tweakable Block Cipher with Ciphertext Stealing | 一种对称分组密码算法模式 |
CTS | Ciphertext Stealing | 一种对称分组密码算法模式 |
RSA | Rivest-Shamir-Adleman | 一种非对称密钥算法 |
MD5 | Message Digest Algorithm | 消息摘要算法 |
SHA | Secure Hash Algorithm | 安全散列算法 |
TRNG | True Random Number Generator | 真随机数生成器 |
SSK | Symmetric Secret Key | 对称密钥 |
HUK | Hardware Unique Key | 硬件唯一密钥 |
PNK | Part Number Key | 芯片型号密钥 |
PSK | Partner Secret Key | 合作伙伴密钥 |
1.2. 模块简介
CE 是一个独立的硬件加解密算法引擎,支持下列算法模式:
算法类型 | 算法列表 | 密钥位宽 |
---|---|---|
对称密钥算法 | AES ECB | 128/256 |
AES CBC | 128/256 | |
AES CTR | 128/256 | |
AES CTS | 128/256 | |
AES XTS | 256/512 | |
DES ECB | 64 | |
DES CBC | 64 | |
TDES ECB | 192 | |
TDES CBC | 192 | |
非对称密钥算法 | RSA | 512/1024/2048 |
消息摘要算法 | MD5 | |
SHA-1 | ||
SHA-224 | ||
SHA-256 | ||
SHA-384 | ||
SHA-512 |
同时具备下列功能:
- 真随机数产生器(TRNG)
- 安全访问 eFuse 密钥: eFuse 密钥仅 CE 可访问
- 安全 SRAM: 保护密钥安全
- 本地数据安全:加密的数据仅当前设备可解密,其他设备无法解密
- 硬件设备身份认证:软件可识别当前设备是否合法
- 可支持实现加密启动
- 可支持实现安全启动
- 可支持实现文件系统加密
1.3. 原理框图
图 8.10 CE 原理框图
2. 参数配置
2.1. 内核配置
使能 CE 相关的内核驱动,可在通过下列命令进行配置(在 SDK 顶层目录执行):
make linux-menuconfig
或者使用快捷命令:
make km
在内核的配置界面中,进行下列的选择:
Cryptographic API --->
<*> User-space interface for asymmetric key cipher algorithms
[*] Hardware crypto devices --->
[*] Support for artinchip cryptographic accelerator
<*> Artinchip's crypto engine driver
此处特别选择了 User-space interface for asymmetric key cipher algorithms
是因为默认的 Linux 内核仅对用户空间开放了下列四种类型的算法。
算法类型 | 内核开放接口 | 说明 |
---|---|---|
SKCIPHER | 是 | 对称密钥类算法,如 AES、DES 等 |
AEAD | 是 | 关联数据的认证加密类算法,如 GCM-AES,CCM-AES 等 |
HASH | 是 | 消息摘要类算法,如 MD5,SHA-256 等 |
RNG | 是 | 随机数类算法 |
AKCIPHER | 否 | 非对称密钥类算法,如 RSA |
内核中 非对称密钥类算法
默认并没有对用户空间开放。Artinchip 对内核打了补丁,使得内核支持用户空间程序 使用内核所提供的非对称密钥算法,在配置内核时使能上述配置即可。
2.2. DTS 配置
crypto: crypto-engine@10020000 {
compatible = "artinchip,aic-crypto-v1.0";
reg = <0x0 0x10020000 0x0 0x1000>;
interrupts-extended = <&plic0 33 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cmu CLK_CE>;
resets = <&rst RESET_CE>;
status = "okay";
};
3. 调试指南
3.1. 调试开关
可通过内核配置使能 CE 模块的 DEBUG 选项。在 SDK 根目录下执行:
make linux-menuconfig (or make km)
进入内核的配置界面:
Linux
Kernel hacking
Artinchip Debug
[*] CE driver debug
勾选使能该 DEBUG 选项后:
- CE 的驱动源码将以
-O0
编译- CE 驱动中的 pr_dbg() 和 dev_dbg() 调试信息会被编译
如果需要看到 pr_dbg() 和 dev_dbg() 的打印信息,还需要设置 loglevel=8
。
若需要在启动过程中即可看到打印,需要在 env.txt
中修改 bootargs,增加 loglevel=8
。 若仅需要在板子启动到 Linux shell 后使能相关打印,可以通过下列命令调整 loglevel:
echo 8 > /proc/sys/kernel/printk
4. 测试指南
CE 的测试主要覆盖以下几个要点:
- 驱动所实现的所有算法
- 不同数据长度的处理
- 输入输出 buffer 是否 4KB 对齐(需要支持不对齐的情况)
- 多进程/线程并发访问
测试的方式主要是通过对算法处理后的数据进行“比数”的方式进行,结果与参考结果一致,则表明测试通过。
4.1. 测试工具
主机端工具:
- OpenSSL (主机需要安装)
平台端工具:
- crypto_kcapi (编译 source/artinchip/test-ce)
编译 crypto_kcapi 需要在 SDK 顶层目录执行:
make menuconfig
选择配置:
Artinchip packages
Sample code
[*] test-ce
4.2. 测试对象
需要测试的算法有:
对称密钥算法 | 非对称密钥算法 | 消息摘要算法 |
---|---|---|
cbc(des3_ede)ecb(des3_ede)cbc(des)ecb(des)xts(aes)cts(aes)ctr(aes)cbc(aes)ecb(aes)huk-protected(xts(aes))huk-protected(cts(aes))huk-protected(cbc(aes))huk-protected(ecb(aes))ssk-protected(cbc(aes))ssk-protected(ecb(aes)) | rsapsk3-protected(rsa)psk2-protected(rsa)psk1-protected(rsa)psk0-protected(rsa)pnk-protected(rsa) | sha512sha384sha256sha224sha1md5hmac(sha256)hmac(sha1) |
4.3. 测试方法
4.3.1. 创建测试用例的脚本
HOST 端,通过 gen_xxx_test_data.sh
脚本,生成对应算法的测试脚本。 gen_xxx_test_data.sh
脚本所做的事情包括:
- 生成测试数据:指定长度的
0x00 ~ 0xFF
循环数据