YTM32的HSM模块在信息安全场景中的应用

news2025/1/11 21:41:53

YTM32的HSM模块在信息安全场景中的应用

文章目录

  • YTM32的HSM模块在信息安全场景中的应用
    • 引言
    • 应用场景:一点点密码学基础
    • 硬件:YTM32的信息安全子系统
      • HCU外设模块
        • 硬件特性
        • 基本的应用操作流程,以计算AES-ECB为例
        • 硬件上对处理多块数据上的一些设计细节
          • 处理多块消息 for AES / SHA
          • 存储上下文数据,使用CR[CS]寄存器
          • 操作流步骤
        • 存放密钥Key
        • 关于FIFO
    • 软件资源
    • Performance
    • 小节

引言

随着汽车上通信系统越来越复杂,云端、远程通信的场景越来越多,信息安全变得越来越重要,在通信领域常用的AES、SHA、RSA等加密算法被越来越多地应用到汽车电子系统中。通常这类加解密算法都需要大量的数学运算,需要消耗相当多的CPU时间,但同时汽车应用场景对ECU有比较高的实时性要求,为了节省主CPU的资源,专用于执行加解密算法的硬件HSM模块应运而生。

广义上的HSM(Hardware Security Module),是MCU上专门用于实现加解密算法的外设模块,它一般会有一个独立的CPU,专门用来进行加解密运算,还有一些针对特定算法的硬件加速器(如AES-128、SHA-256等)。有了HSM模块,程序中就可以把加解密运算交给HSM来执行,同时主CPU就可以去做其他工作,一段时间后来查询结果,或等待HSM计算完成后通过中断等方式通知主CPU计算结果即可。HSM通常还拥有单独的存储区,包括RAM和NVM(Flash存储器),HSM的存储区在正常运行状态下应只允许HSM读写,主CPU不能读写。这样就可以把算法秘钥等重要数据存储在HSM存储区,与主CPU进行隔离,进一步加强安全性。此外HSM模块还会集成(或者共存)真随机数生成器等加密算法常用外设。

应用场景:一点点密码学基础

常用的加密方法,比较耳熟能详的是摘要算法(哈希算法,HASH)、对称加密、非对称加密等。

  • 摘要算法是不可逆的,主要作用是对信息的完整性一致性进行校验。
  • 对称加密算法是可逆的,主要作用是保证私密信息不被泄露。不同于摘要算法(HASH),是真正意义上的加密算法。
  • 相对于对称加密在加解密过程中使用同一个密钥,非对称加密在加密和解密过程中使用的密钥也是不同的(公钥和私钥)。

假设有发送方向接收方发送消息。如果没有任何加密算法,接收方发送的是一条明文消息:我是小灰
在这里插入图片描述

如果中间人截获到消息,即使中间人无法篡改消息,也可以窥探到消息的内容,从而暴露了通信双方的私密。

因此,我们不再直接传送明文,而改用对称加密的方式传输密文,画风就变成了下面这样:

在这里插入图片描述
具体工作的步骤如下:

  1. 发送方利用密钥123456,加密明文我是小灰,加密结果为TNYRvx+SNjZwEK+ZXFEcDw==
  2. 发送方把加密后的内容TNYRvx+SNjZwEK+ZXFEcDw==传输给接收方。
  3. 接收方收到密文TNYRvx+SNjZwEK+ZXFEcDw==,利用密钥123456还原为明文我是小灰。(使用相同密钥的对称加密方法)

硬件:YTM32的信息安全子系统

HCU外设模块

YTM32的HCU(Hardware Cryptography Unit)是HSM的一种典型实现,使用硬件计算引擎,可以实现对用户数据的加解密计算,其中包括AESSM4SHA等算法,并配合真随机数发生器TRNGHCU_NVR存储区,完成了对加解密系统的硬件支持。如图x所示。

在这里插入图片描述

图x YTM32的HCU外设系统框图

从HCU外设的系统框图中可以看到,HCU的核心是一个复用成多种模式的计算引擎,用户可以通过FIFO向计算引擎送数参与计算,并在计算结束后,通过FIFO读出计算结果。HCU的用户操作接口(寄存器)并不复杂,主要的配置选项都在选择计算引擎的工作模式上(HCU_CR寄存器),DMA和中断,以及标志位的设置,都是面向FIFO的常规功能。

需要特别关注的是,HCU外设模块从Flash(EFM模块)存储器中导入Key到HCU_KEY寄存器的机制,以及众多面向具体加解密算法,需要通过专用的寄存器传入专用的参数,例如通过HCU_MSGINFO寄存器和HCU_MSGADL寄存器指定输入数据(“消息”,Message)的长度,通过HCU_ASECV寄存器为计算ASE-CTR算法时传入Counter参数,通过HCU_ASEIV寄存器为计算ASE-CBC算法时传入Initial Vector参数,通过HCU_ASEMAC寄存器为计算ASE-CMAC算法时传入或传出MAC值。

硬件特性
  • 支持使用128-bit、192-bit、256-bit等不同长度的密钥。
  • 可以实现加密和解密运算。
  • 可以使用安全的硬件密钥(存放在以Flash为存储介质的HCU_NVR)和灵活的软件密钥(可软件写入HCU_KEY寄存器)。
  • 实现了多种硬件加密算法的计算引擎
    • AES (ECB, CBC, CTR, CCM, CMAC )
    • SM4 (ECB)
    • SHA (SHA-256, SHA-384)
  • 以大端方式保存输入数据和输出数据,但支持按位、按字节和按16位字逆序。
  • 使用输入FIFO和输出FIFO缓存数据,最大缓存深度可达128 Byte。
  • 支持DMA和中断,可以从MCU的内存空间中取数和送数。
基本的应用操作流程,以计算AES-ECB为例

使用HCU计算引擎的流程大体相似:先准备密钥Key、配置引擎,到准备数据、执行计算,最后等待计算完成读取计算结果。这里以AES-ECB为例,具体说明使用HCU计算引擎的操作过程:

  • 导入计算过程的密钥,可以使用预先烧录至Flash存储区的HCU_NVR,也可以人工向HCU_KEY寄存器中写数。
  • 配置计算引擎,设置HCU_CR[ENGSEL]=1, HCU_CR[ALGSEL]=0,指定即将以AES-ECB模式进行计算。
  • 指定实际使用密钥的长度,设置HCU_CR[KEYLEN],例如,可指定长度为128。
  • 向HCU的数据FIFO中写入即将要参与计算的数据,向HCU_IFDAT寄存器中写数。
  • 指定即将要参与计算的数据长度,向HCU_MSGADL[MSGLEN]寄存器中写数。
  • [可选的步骤] 根据不同计算模式的需要,需要额外写入计算参数:
    • 对于AES-CBC计算,需要在这个阶段写入HCU_IV寄存器。
    • 对于AES-CTR计算,需要在这个阶段写入HCU_CTR寄存器。
  • 指定即将要进行的是加密计算还是解密计算,设置HCU_CR[ENC]寄存器。
  • 启动计算,设置HCU_GO[GO]=1
  • 等待计算完成。
  • 当硬件计算完成后,将有标志位HCU_SR[OD]=1
  • 从HCU的数据FIFO中读出计算的结果,从HCU_OFDAT寄存器中读数。

其他计算模式的过程大体相同,在软件应用上,可以直接调用SDK软件包中的API,或者阅读参考手册对照具体的操作。

硬件上对处理多块数据上的一些设计细节
处理多块消息 for AES / SHA

一般应用中,AES / SHA计算引擎处理一个消息块的长度小于 32768 / 65536 字节,对应在HCU外设的寄存器字段HCU_CR[MSGLEN]中配置。但当用户需要处理(加密或解密)长度大于 32768 / 65536 字节的消息块,就需要使用处理多块消息的机制:需要指定寄存器HCU_CR[MSGB]HCU_CR[MSGE],表示即将要进行处理的数据块是开始块(Begin Message)、中间块(Middle Message)或是结束块(End Message),并且需要配置HCU_CR[CS]=1指定即将处理完成数据块后,需要为下次计算保留种子(在AES-CBCAES-CTR两种计算模式下,除了Key之外,还需要配合IVCTR值才能启动数据块的计算)。

存储上下文数据,使用CR[CS]寄存器

大部分计算过程,都是对于一段不长的数据进行计算,经过一次计算就可以得到最终的结果。

但对于AES-CBCAES-CTR这两种计算过程,可能会计算一组比较长的数据。在开始计算数据前,还需要预先设定IV寄存器(Initial Vector)和CTR寄存器参与计算。当设置HCU_CR[CS]=1,处理完数据块后,产生的IV和CTR值将被载入到硬件的HCU_IV寄存器和HCU_CTR寄存器,供下一个数据块的处理过程使用,并以此类推。

操作流步骤

通过HCU_MSGINFOHCU_MSGADL分别指定完整数据块的长度和每次参与计算的数据子块的长度。设置HCU_CR[CS]=1,启用保存计算上下文。设置[HCU_CR[MSGB]:HCU_CR[MSGE]]的值为0b100b000b01,指定即将处理最开始的子数据块、若干个中间子数据块和最后一个字数据块。

  1. 配置准备开始执行分多块的计算:
  • 配置HCU_MSGINFO寄存器,设定真个长消息的数据长度(如果是AES-CCM,则不包含额外的数据长度)。
  • 设置HCU_CR[CS]=1,启用保存计算上下文。
  1. 配置计算第一个数据块:
  • 设置HCU_CR[MSGB]=1, HCU_CR[MSGE]=0,指定即将处理长消息的第一个子数据块。
  • 设置HCU_MSGADL[MSGLEN],指定即将处理的一个子数据块的长度。
  • 配置执行加解密引擎。
  • 设置HCU_GO[GO]=1,启动计算引擎。等待计算完成。
  • 当硬件计算完成后,将有标志位HCU_SR[OD]=1
  1. 配置计算中间的数据块:
  • 设置HCU_CR[MSGB]=0, HCU_CR[MSGE]=0,指定即将处理长消息的中间子数据块。
  • 其余操作同上述计算过程相同。
  1. 配置计算最后的数据块:
  • 设置HCU_CR[MSGB]=0, HCU_CR[MSGE]=1,指定即将处理长消息的中间子数据块。
  • 其余操作同上述计算过程相同。

注意:

  • 分多块计算的功能仅适用于AES(CCM / CMAC)和 SHA 引擎。
  • 设置各分块的大小,在计算SHA-256时,应为64字节的倍数,在计算SHA-384时,应为128字节的倍数。
存放密钥Key

根据手册中存储空间(Memory Map)和EFM模块(Embedded Flash Module)章节中的介绍,YTM32微控制器片内的Flash中,还划分了一块区域HCU_NVR,专门用于存放同HCU相关的密钥数据。如图x所示。

在这里插入图片描述

图x YTM32B1ME微控制器的存储映射

HCU_NVR中可以存放32组 AES-256的Key。用户可通过配置EFM_CTRL[AES_KEY_SEL]寄存器,指定AES-256的Key序号,然后在EFM_CMD寄存器中写入Load AES Key命令,如图x所示,就可以将对应的Key从Flash中的HCU_NVR载入到HCU_KEY寄存器中,参与AES算法的计算。这就是使用硬件密钥的方法。

在这里插入图片描述

图x EFM中的CMD寄存器可以识别的命令

当然,在调试阶段,或者需要使用灵活密钥的情况下,用户软件也可以不使用预先存放在硬件Flash中的密钥,而直接向HCU_KEY寄存器中写入Key值参与计算。

出于安全的考虑,用户软件(通过CPU)不能直接读取HCU_NVR存储区和HCU_KEY寄存器中的数据。用户可以通过写Flash的方式(带有KEY)向HCU_NVR中写数,但除了最初写数的人,别人是无法再读出正确的数。

关于FIFO

Input FIFO入口寄存器的位宽是32b,但手册上明确说明,要求每次向FIFO中写数必须为128b,这也就意味着对Input FIFO的操作,每次都要加倍再加倍,连续4次写入才算完成一次操作。

在这里插入图片描述

图x Input FIFO每次必须以128b写入

Input FIFO可以通过Watermark触发中断,但Watermark的值是以字(1 Word)为单位的,这也就意味着Watermark的实际设定值必须是4的倍数(4个Word对应128b)。

至于Input FIFO Watermark的中断,这里有一个逻辑。在Operation Done事件到来之前,Input FIFO Watermark的事件都是按需触发的,即只要当前FIFO中的数据量(Word数量)小于Watermark的设定值,就可以触发对应的中断。但若Operation Done事件到来,此时Input FIFO的检测逻辑就停了,哪怕Input FIFO中的数据已经耗尽,库存低于Watermark值,(刚消耗掉最后一组128b数据后),也不会再产生Input FIFO Watermark的中断。因此在YTMicro SDK的样例代码中,停用Input FIFO Watermark中断的操作并不是等着一个空的Input FIFO触发,而是同Operation Done事件放在一起停用的。

void HCU_IRQHandler(void)
{
    /* Operate done handler */
    if ((HCU_GetStatusFlag(OPERATION_DONE_FLAG)) && (HCU_GetIntMode(OPERATION_DONE_FLAG)))
    {
        /* clear flags. */
        HCU_ClearStatusFlag(OPERATION_DONE_FLAG); /* Clear operate done flag */

		/* disable interrupts. */
        HCU_SetIntMode(OPERATION_DONE_FLAG, false);
        HCU_SetIntMode(INPUT_FIFO_WATERMARK_FLAG, false);  /* Disable input watermark interrupt */
        ...
}

软件资源

YTMicro SDK中,提供了HCU外设模块的驱动程序,以及一个基本的样例工程hcu_ecb

从笔者的经验看来,目前设计这个样例工程更多是为验证HCU驱动代码,并简单演示HCU模块的应用流程。从用户角度看,如果需要更充分有效地利用好HCU外设,原厂的开发团队应该在后续会设计和发布专门的功能安全软件组件,将这些硬件细节隐藏在将来会逐渐统一的通用HSM软件接口之下(例如集成到AutoSAR软件体系中),因为HSM的开发者大多是算法专家,相对于某个具体的外设模块的实现,他们更多关注的是软件的应用场景,以及实际计算的速率。

所以,这里还是期待原厂的软件开发团队继续为开发者带来一些惊喜。

Performance

HCU模块在YTM的M系列中都有集成,但每个子系列中的HCU功能略有不同,如表x所示。

在这里插入图片描述
在这里插入图片描述
以 YTM32B1ME0 为例,在系统时钟为 120MHz PLL 下,测量各个算法处理 1KB 明文与 4KB 明文所需的时间。如下表所示。

在这里插入图片描述

小节

本文简要介绍了密码学在汽车电子系统中的应用场景,详细介绍了YTM32信息安全子系统中的核心模块HCU外设模块,以及基本用法,在文末汇总了HCU在YTM32微控制器中的分布情况,以及执行速度的参考指标。

本文尚未深入探究HCU以及信息安全的应用,期待后续HSM技术的应用规范逐渐形成标准,开发团队可依据规范开发和发布专用信息安全软件包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1405602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

S7-200 SMART 编程连接故障常见诊断方法

使用 S7-200 SMART PLC 时,您是否遇到过无法下载、上传或监控程序状态的情况?或者通信接口一片空白、编程电缆的驱动不存在、搜索不到 CPU 的 IP 地址、编程软件提示端口被占用等情况…… 本文将针对 S7-200 SMART 无法建立编程连接的情形,从…

架构的演进

1.1单体架构 单体架构也称之为单体系统或者是单体应用。就是一种把系统中所有的功能、模块耦合在一个应用中的架构方式。 存在的问题: 代码耦合:模块的边界模糊、依赖关系不清晰,整个项目非常复杂,每次修改代码都心惊胆战迭代困…

黑马——Java学生管理系统

一、学生管理系统 学生管理系统 需求: 采取控制台的方式去书写学生管理系统。 loop:while(true){ for(){ break loop;//给while循环取名loop,break loop;可以跳出while循环 } } 或者使用System.exit(0);停止虚拟机运行,相当于让所有代码停…

代码随想录算法训练营29期|day28 任务以及具体安排

93.复原IP地址 class Solution {List<String> result new ArrayList<>();public List<String> restoreIpAddresses(String s) {StringBuilder sb new StringBuilder(s);backTracking(sb, 0, 0);return result;}private void backTracking(StringBuilder s,…

Element中的el-input-number+SpringBoot+mysql

1、编写模板 <el-form ref"form" label-width"100px"><el-form-item label"商品id&#xff1a;"><el-input v-model"id" disabled></el-input></el-form-item><el-form-item label"商品名称&a…

excel 设置密码保户

目录 前言设置打开密码设置编辑密码 前言 保户自己的数据不被泄漏是时常有必要的&#xff0c;例如财务数据中最典型员工工资表&#xff0c;如果不设置密码后果可想而知&#xff0c;下面我们一起来设置excel查看密码和编辑密码。我用的是wps,其它版本类似&#xff0c;可自行查资…

教育大模型浪潮中,松鼠Ai的“智适应”故事好讲吗?

“计算机对于学校和教育产生的影响&#xff0c;远低于预期&#xff0c;要改变这一点&#xff0c;计算机和移动设备必须致力于提供更多个性化的课程&#xff0c;并提供有启发性的反馈。” 这是2011年5月份乔布斯与比尔盖茨最后一次会面时的记录&#xff0c;当时的电脑还十分落后…

webrtc线程代码研究

webrtc线程类的实现集成了socket的收发&#xff0c;消息队列&#xff0c;值得研究&#xff0c;基于webrtc75版本。 主要类介绍 Thread类 虚线&#xff1a;继承 实线&#xff1a;调用 橙色&#xff1a;接口 Thread继承MessageQueueThread提供两个静态方法,分别用来创建带socke…

如何正确使用RC滤波网络

众所周知&#xff0c;最有效的滤波电路应靠近噪声源放置&#xff0c;滤波的作用是对噪声电流进行及时有效地阻止和转移&#xff0c;实际设计中&#xff0c;工程师经常使用高的串联阻抗&#xff08;电阻、电感和铁氧体&#xff09;阻止电流&#xff0c;并使用低的并联阻抗&#…

蓝桥杯真题(Python)每日练Day4

题目 OJ编号2117 题目分析 第一种先采用暴力的思想&#xff0c;从第一根竹子开始&#xff0c;找到连续的高度相同的竹子&#xff0c;砍掉这些竹子&#xff0c;一直循环这个方法&#xff0c;直到所有的竹子高度都为1。很明显&#xff0c;依次遍历竹子的高度复杂度为O&#x…

RabbitMQ消息应答与发布

消息应答 RabbitMQ一旦向消费者发送了一个消息,便立即将该消息,标记为删除. 消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个很长的任务并仅仅执行了一半就突然挂掉了,在这种情况下,我们将丢失正在处理的消息,后续给消费者发送的消息也就无法接收到了. 为了…

C语言之反汇编查看函数栈帧的创建与销毁

文章目录 一、 什么是函数栈帧&#xff1f;二、 理解函数栈帧能解决什么问题呢&#xff1f;三、 函数栈帧的创建和销毁解析3.1、什么是栈&#xff1f;3.2、认识相关寄存器和汇编指令3.2.1 相关寄存器3.2.2 相关汇编命令 3.3、 解析函数栈帧的创建和销毁3.3.1 预备知识3.3.2 代码…

Ansible详解(架构,模块)及部署示例

目录 Ansible概述 Ansible作用 Ansible特点 Ansible架构 工作流程 ansible 环境安装部署 环境准备 安装Ansible服务 Ansible 命令行模块 模块详解 ansible-doc command模块 shell模块 cron 模块 user模块 group模块 copy 模块 file 模块 hostname 模块 pin…

【论文+视频控制】23.08DragNUWA1.5:通过集成文本、图像和轨迹来进行视频生成中的细粒度控制 (24.01.08开源最新模型)

论文链接&#xff1a;DragNUWA: Fine-grained Control in Video Generation by Integrating Text, Image, and Trajectory 代码&#xff1a;https://github.com/ProjectNUWA/DragNUWA 一、简介 中国科学技术大学微软亚洲研究院 在 NUWA多模态模型、 Stable Video Diffusion …

mockjs(3)

mockjs&#xff08;1&#xff09; mockjs&#xff08;2&#xff09; 这篇主要是Mock.random工具类&#xff0c;前段要用的话主要是在模版中的占位符。mockjs&#xff08;1&#xff09;里面的3.2 6 Mock.random Mock.Random 是一个工具类&#xff0c;用于生成各种随机数据。 …

即插即用篇 | YOLOv8 引入 SENetv2 | 多套版本配合使用

卷积神经网络(CNNs)通过提取空间特征并在基于视觉的任务中实现了最先进的准确性,彻底改变了图像分类。所提出的压缩激励网络模块收集输入的通道表示。多层感知机(MLP)从数据中学习全局表示,在大多数用于学习图像提取特征的图像分类模型中起到关键作用。在本文中,我们引入…

论文阅读2---多线激光lidar内参标定原理

前言&#xff1a;该论文介绍多线激光lidar的标定内参的原理&#xff0c;有兴趣的&#xff0c;可研读原论文。 1、标定参数 rotCorrection&#xff1a;旋转修正角&#xff0c;每束激光的方位角偏移&#xff08;与当前旋转角度的偏移&#xff0c;正值表示激光束逆时针旋转&…

实用的SQLite数据库可视化管理工具推荐

前言 俗话说得好“工欲善其事&#xff0c;必先利其器”&#xff0c;合理的选择和使用可视化的管理工具可以降低技术入门和使用门槛。今天推荐7款实用的SQLite数据库可视化管理工具(GUI)&#xff0c;帮助大家更好的管理SQLite数据库。 什么是SQLite&#xff1f; SQLite是一个…

【新闻感想】谈一下PandoraNext的覆灭(潘多拉Next-国内可访问的免费开放GPT共享站将于2024年1月30日关闭)

文章目录 悲报&#xff1a;TIME TO SAY GOODBYE&#xff01;PandoraNext&#xff01;PandoraNext作者言&#xff1a;你们赢了&#xff0c;但我却没有输我如何了解到PandoraNext的合照留念于是开始逆向&#xff01; 悲报&#xff1a;TIME TO SAY GOODBYE&#xff01;PandoraNext…

外包干了2个多月,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…