本系列的其它几篇文章:

《英飞凌 AURIX 系列单片机的HSM详解(1)——何为HSM》
《英飞凌 AURIX 系列单片机的HSM详解(2)——与HSM相关的UCB和寄存器》
《英飞凌 AURIX 系列单片机的HSM详解(3)——开发方法》
《英飞凌 AURIX 系列单片机的HSM详解(4)——Tricore核与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 Registeruint32_t RESERVED0[2]             ;__IO uint16_t TRNG_STAT                ; // TRNG status registeruint16_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 Registeruint32_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)

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

  1. 英飞凌 AURIX 系列单片机的HSM详解(1)——何为HSM

    本系列的其它几篇文章: <英飞凌 AURIX 系列单片机的HSM详解(2)--与HSM相关的UCB和寄存器> <英飞凌 AURIX 系列单片机的HSM详解(3)--开发方法> ...

  2. 英飞凌 AURIX 系列单片机的HSM详解(2)——与HSM相关的UCB和寄存器

    本系列的其它几篇文章: <英飞凌 AURIX 系列单片机的HSM详解(1)--何为HSM> <英飞凌 AURIX 系列单片机的HSM详解(2)--与HSM相关的UCB和寄存器> ...

  3. 英飞凌 AURIX 系列单片机的HSM详解(4)——Tricore核与HSM核之间的通信方法

    本系列的其它几篇文章: <英飞凌 AURIX 系列单片机的HSM详解(1)--何为HSM> <英飞凌 AURIX 系列单片机的HSM详解(2)--与HSM相关的UCB和寄存器> ...

  4. STM8L101系列单片机串口配置详解(基于IAR自带库)

    STM8L101f3p6  有一个串口如图 本历程基于库操作 不讨论具体寄存器操作 有兴趣的同学可以自行参考编程手册 下面看一下手册的了解一下特点 本人英语是个小白只可意会不可言传了 内部结构了由于是 ...

  5. html代码硬件加速优化,详解CSS3开启硬件加速的使用和坑

    前言 最近在看在github上看iscroll的文档.虽然是英文的,但是为了装逼,没办法硬着头皮看完了,觉得作者写得不错(我有那么好耐心写那么长的文档就好了[捂脸]),然后为了更好地装逼,有看了一遍, ...

  6. 单片机执行指令过程详解

    单片机执行指令过程详解: 单片机执行程序的过程,实际上就是执行我们所编制程序的过程,即逐条指令的过程. 计算机每执行一条指令都可分为三个阶段进行.即取指令-----分析指令-----执行指令. (1) ...

  7. h2 不能访问localhost_SpringBoot2.x系列教程44--H2数据库详解及搭建Web控制台

    SpringBoot2.x系列教程44--H2数据库详解及搭建Web控制台 作者:一一哥 我在上一章节中讲解了Spring Boot中整合Mybatis,接下来我给大家介绍一款内存数据库--H2. H ...

  8. 大型网站系统架构系列:负载均衡详解(一)

    大型网站系统架构系列:负载均衡详解(一) 2016-03-20 架构说 面对大量用户访问.高并发请求,海量数据,可以使用高性能的服务器.大型数据库,存储设备,高性能Web服务器,采用高效率的编程语言比 ...

  9. 【百度飞浆】YOLO系列目标检测算法详解

    YOLO系列目标检测算法详解 1 YOLO发展史 2 YOLO v3目标检测原理 3 PaddleDetection中YOLO v3模型介绍 4 YOLO v3配置演练 1 YOLO发展史 2 YOL ...

最新文章

  1. PAGER set to stdout_Python || 学习笔记(4):dictamp;amp;set
  2. 分布式开放 消息系统 (RocketMQ) 的原理与实践
  3. k8s创建Deployment报错:no matches for kind “Deployment“ in version “extensions/v1beta1“
  4. 我的docker随笔11:Dockerfile编写
  5. Xml序列化、反序列化帮助类
  6. Web前端笔记(1)
  7. Kubernetes在游戏业务应用调研
  8. OpenCasCade中一个V3d_Viewer对应多个示例窗口V3d_View
  9. fusion360界面字体模糊处理方法
  10. URL在线编码/解码工具
  11. 木马 java_Java恶意软件来袭 木马病毒也要跨平台
  12. 今天开机发现,在光标左边多了一个长方形的带有箭头的,怎么去掉?
  13. 前端代码 (html css JavaScript DOM JSON)
  14. php易盾,内容审核统一管控!网易易盾智能审核管理系统开放试用
  15. Problem B: 薪酬计算 之二
  16. 判断是不是平衡二叉树
  17. 历史的温度3:时代扑面而来,转瞬即成历史 读后感
  18. list对象转map stream /去重( 根据属性转Map或者分组)
  19. 【ABAP学习】数据类型
  20. 产品研发杂谈(GJB5000A)

热门文章

  1. KB奇遇记(4):困难重重的ERP选型
  2. 揭秘:各大视频网站是这样密谋秀场的
  3. 社交新零售崛起将是未来的最大风口
  4. TP-link 无线路由器WDS设置方法图解_无线桥接设置
  5. linux命令 renice,Linux命令之renice命令
  6. ssm + maven 上传文件(图片)
  7. 英雄联盟、星际大战、CS、海贼王... 让你热血沸腾的建模原型
  8. 加强团队凝聚力建设方面采取的方法
  9. chatgpt赋能Python-python3_7如何安装matplotlib
  10. 「神即道,道法自然,如来」