锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

英飞凌 AURIX 系列单片机的HSM详解(5)——HSM硬件加速模块的使用

时间:2022-09-16 09:00:00 hsm数显温度变送器

本系列的其他文章:

英飞凌 AURIX 单片机系列HSM详解(1)-什么是HSM》

《英飞凌 AURIX 单片机系列HSM详解(2)——与HSM相关的UCB和寄存器》
《英飞凌 AURIX 单片机系列HSM详细说明(3)-开发方法
《英飞凌 AURIX 单片机系列HSM详解(4)——Tricore核与HSM核之间的通信方法
《英飞凌 AURIX 单片机系列HSM详解(5)——HSM使用硬件加速模块

1. 概述


我们前面说过,HSM该模块专门用于实现加解密算法。对于一些常见的算法,硬件加速器比软件快。TC3XX系列MCU的HSM硬件加速模块包括:TRNG、AES-128、HASH SHA-256、PKC本文重点介绍了前三种常用的硬件加速模块的使用方法。

2. TRGN


TRGN(True Random Number Generator)这个模块相对简单,是真正随机数生成器的缩写,是寄存器TRNG_CTRL控制硬件随机数生成器的开启和关闭,一个结果寄存器TRNG_DATA32可用于在生成器打开后读取生成的32位随机数,还有一个状态寄存器TRNG_STAT指示随机数生成结果,是否出错等状态。

寄存器的定义和地址如下:

/*------------- TRNG Module     ----------------------------------------------*/ typedef struct {   __I  uint32_t TRNG_DATA32              ; // True RNG Data Register        uint32_t RESERVED0[2]             ;   __IO uint16_t TRNG_STAT                ; // TRNG status register        uint16_t RESERVED1                ;   __IO uint16_t TRNG_CTRL                ; // TRNG control register } HSM_TRNG_TypeDef;  #define HSM_TRNG_BASE                  (0xEC000200UL)  #define HSM_TRNG                       ((HSM_TRNG_TypeDef *) HSM_TRNG_BASE) 

3. AES-128


AES加解密有两种方法:ECB和CBC,这里不重点介绍AES算法和这两种方法的区别,网上有很多信息,可以自己搜索。

AES硬件加速器可以实现这两种方法,AES模块中有4个输入寄存器:AESIN0-3,每个可以装载4字节数据,可以用于方向AES将密钥、待解密数据和使用的硬件模块CBC模式的初始向量。将数据放入4个输入寄存器后,可以控制寄存器AESCTRL将数据放入相应的位置。

AES硬件模块可以同时记录8组密钥值和5组初始向量值。不同的密钥和初始向量可以同的密钥和初始向量。在程序中同步操作多组AES加解密程序。

执行加解密时,可以通过AESCTRL选择寄存器ECB加密、ECB解密、CBC加密和CBC解密。加解密后,将通过状态寄存器AESSTAT加解密结果存储在4个输出寄存器中AESOUT0-3中。

AES硬件加速器的寄存器定义和地址如下:

 /*------------- AES Module      ----------------------------------------------*/ typedef struct {    __IO uint32_t AESIN0                   ; // AES INPUT register 0   __IO uint32_t AESIN1                   ; // AES INPUT register 1   __IO uint32_t AESIN2                   ; // AES INPUT register 2   __IO uint32_t AESIN3                   ; // AES INPUT register 3   __IO uint32_t AESCTRL                  ; // AES Control Register   __I  uint32_t AESSTAT                  ; // AES Status Register        uint32_t RESERVED0[2]             ;   __I  uint32_t AESOUT0                  ; // AES OUTPUT register 0   __I  uint32_t AESOUT1                  ; // AES OUTPUT register 1   __I  uint32_t AESOUT2                  ; // AES OUTPUT register 2   __I  uint32_t AESOUT3                  ; // AES OUTPUT register 3   __I  uint32_t AESOUTSAVE0              ; // AES OUTPUT save register 0   __I  uint32_t AESOUTSAVE1              ; // AES OUTPUT save register 1   __I  uint32_t AESOUTSAVE2              ; // AES OUTPUT save register 2   __I  uint32_t AESOUTSAVE3              ; // AES OUTPUT save register 3 } HSM_AES_TypeDef;  #define HSM_AES_BASE                   (0xE8000000UL) #define HSM_AES                        ((HSM_AES_TypeDef *) HSM_AES_BASE)  

4. 摘要算法


摘要算法也叫哈希算法(HASH),是单向不可逆的加密算法,即密文不能解密为明文,常用于数字签名。常用的摘要算法有CRC、MD5、SHA1、SHA2等,TC3XX系列的HSM支持硬件MD5、SHA1、SHA2(256),其中SHA-256是目前汽车通信中最安全的摘要算法。

SHA-256输入数据的长度是64字节(512位)的整数倍,输出摘要为32字节(256位)。

在使用HSM硬件加速器的摘要算法CFG寄存器选择使用哪种算法和其他属性,如是否使用初始向量、输入输出数据端等。

然后向DATA待加密数据分批装入寄存器,每批64字节,写入寄存器的数据将装入硬件加速模块的输入数据FIFO。在安装数据的同时,硬件加速器开始计算摘要,每次安装64字节时应进行检查STAT寄存器中的DF_NF(Data FIFO Not Full),下一批数据可以继续装载,而不是1。

等待硬件加速模块计算摘要完成,直到所有数据完成(寄存器)STAT中的BSY位不为1)之后,就可以从寄存器开始了VAL中读计算结果,每次读4字节,寄存器STAT中CNT值为剩余可读计算结果的数量(4字节为单位),每读一次CNT值减1,直到0后结果读取完成。

该算法的寄存器和地址定义如下:

 typedef struct {   __IO HSM_HASH_CFG_Type CFG        ; // HASH Configuration Register   __I  HSM_HASH_STAT_Type STAT                ; // HASH Status Register   __IO uint32_t HASH_IVIN                ; // Hash Initialization Value Register   __I  HSM_HASH_VAL_Type VAL                 ; // Hash Output Value Register   __IO HSM_HASH_DATA_Type DATA                ; // Hash Data Input Register } HSM_HASH_TypeDef;  #define HSM_HASH_BASE                  (0xE8000400UL) #define HSM_HASH                       ((HSM_HASH_TypeDef *) HSM_HASH_BASE) 
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章