概述

简介

X5 芯片上的 Crypto IP 使用的是 ARM TE600,ARM TE600 是一款由 ARM 公司设计的 安全加密处理单元(Secure Crypto Engine),集成在 ARM 生态系统中,能够为嵌入式设备提供硬件加速的加密功能,并且作为加密硬件模块,与 ARM TrustZone 技术配合工作,旨在提供高性能、安全的加密操作。

安全算法

以下是硬件支持的算法列表:

算法 描述
AES 支持 ECB / CBC / CTR / OFB / XTS / CBC-MAC / CMAC / CCM / GCM,支持 128/192/256 三种密钥长度
XTS 仅支持 128/256
DES / TDES 支持 ECB / CBC / CBC-MAC / CMAC
HASH 支持 SHA1 / 224 / 256 / 384 / 512 / SM3 / MD5,
支持 HMAC-SHA1 / 224 / 256 / 384 / 512 / SM3 / MD5
RSA 支持 1024 / 2048 / 3072 / 4096 / 8192 等密钥规格
ECC 支持 NIST 标准曲线 P-192 / 224 / 256 / 384 / 512 / 521
SM2 256位密钥长度
TRNG 真随机数

硬件安全驱动

驱动源码

驱动相关文件位于:kernel/drivers/crypto/te

开启硬件安全

内核配置

在 menuconfig 配置中使能 te600 加解密驱动支持

te600_menuconfig

注意: 如果用户使用了其他配置文件,请确保 te600 配置选项 CONFIG_CRYPTO_DEV_TE 开启

dts 配置

X5 dts 中默认已开启了 te600 节点,路径 kernel/arch/arm64/boot/dts/hobot/x5.dtsi

te600: te600@20300000 {
    compatible = "armchina,trust-engine-600";
    status = "okay";
    reg = <0x20300000 0x00100000>;
    interrupt-parent = <&gic>;
    interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
    host-number = <1>;
    clocks = <&hpsclks X5_SEC_AXI_CLK>,
            <&hpsclks X5_SEC_APB_CLK>;
    clock-names = "axi_clk", "merak_clk";
};

注意: 如果用户使用了其他板级dtb,需要引用 x5.dtsi

加载驱动

modprobe te_crypto

通过命令cat /proc/crypto | grep "driver" | grep "\-te",可以查看当前系统 TE600 硬件支持的 crypto算法。

driver       : ecdh-nist-p256-te
driver       : ecdh-nist-p192-te
driver       : dh-te
driver       : rsa-te
driver       : gcm-sm4-te
driver       : gcm-aes-te
driver       : ccm-sm4-te
driver       : ccm-aes-te
driver       : cbcmac-3des-te
driver       : cbcmac-des-te
driver       : cbcmac-sm4-te
driver       : cbcmac-aes-te
driver       : cmac-3des-te
driver       : cmac-des-te
driver       : cmac-sm4-te
driver       : cmac-aes-te
driver       : sm3-te
driver       : hmac-sm3-te
driver       : sha512-te
driver       : hmac-sha512-te
driver       : sha384-te
driver       : hmac-sha384-te
driver       : sha256-te
driver       : hmac-sha256-te
driver       : sha224-te
driver       : hmac-sha224-te
driver       : sha1-te
driver       : hmac-sha1-te
driver       : md5-te
driver       : hmac-md5-te
driver       : ecb-3des-te
driver       : ecb-des-te
driver       : cbc-3des-te
driver       : cbc-des-te
driver       : ecb-sm4-te
driver       : ecb-aes-te
driver       : cbc-sm4-te
driver       : cbc-aes-te
driver       : ofb-sm4-te
driver       : ofb-aes-te
driver       : ctr-sm4-te
driver       : ctr-aes-te
driver       : xts-sm4-te
driver       : xts-aes-te

注意事项

硬件安全的使用方法通常是通过 libkcapi 和 openssl engine 提供的用户空间接口库。