汽车信息安全 -- 存到HSM中的密钥还需包裹吗?
目录
1.车规芯片的ROM_KEY
2.密钥加密与包裹
3.瑞萨RZ\T2M的密钥导入
4.小结
在车控类ECU中,我们通常把主控芯片MCU中的HSM以及HSM固件统一看做整个系统安全架构的信任根。
所以大家默认在HSM内部存储的数据等都是可信的,例如CycurHSM方案中使用HSM硬件存储认证启动所需要的公钥,保证该公钥不被篡改;vHSM同理。
但是,最近交流听说有工具可以将某芯片的所有Flash全部dump出来,首先我对这个保持怀疑,其次结合之前从实际调试来看,有部分OEM或者Tier1以明文形式将存储这些密钥信息(最多加个厂家自定义混淆算法)存储在HSM独占DFlash中。假设这个工具是确实存在,那这些明文形式的密钥就有泄露的风险。
所以今天就来看看关于密钥包裹的一系列话题。
1.车规芯片的ROM_KEY
目前国外大多数车规MCU的HSM设计雏形都来源于SHE(Secure Hardware Extensions)。所以我们首先来回顾下,SHE长什么样,如下图所示:

从上图可以看到,SHE中的RAM、NvM、ROM用于存储密钥, 密钥槽定义格式如下:

其中,SECRET_KEY存储在ROM中,是由芯片厂在流片时固化到SHE中,仅能有SHE读取,用户端只能通过索引引用。
这个做法也沿用到了现在的芯片上,例如英飞凌TC3xx的HSM AES引擎中包含了两个Key,分别是PRIVATE_KEY(UID)和SECRET_KEY,如下图:

瑞萨RH850-U2A的AES引擎包含了3个ROM_KEY供其使用;

同样的,NXP S32K3内部也包含了ROM KEY作为设备的信任根,如下图:

一般来说,ROM_KEY 主要是用于密钥的导入、导出和派生。
2.密钥加密与包裹
回到我们开头的话题,如果说工具真能DUMP出HSM内部Flash的数据,那么密钥就会存在泄露的风险,因此就需要对密钥进行数据混淆处理。
首先大家想到的肯定是对密钥进行加密后再存储到Flash中,如下图:

使用的时候再解密出来,但这有个问题,如果存在Flash中的密钥由于ECC等错误造成了加密后的数据出现错误,那么解密出来的数据就不是原来的密钥的呀。

为此,我们需要做什么?
当然是再添加一个完整性,这也就是所谓的密钥包裹(Wrap)。
Key Wrapping = Encryption + Intergrity
这一点我们可以在TC3xx的HSM中得到印证。
TC3xx HSM中的AES引擎前两个密钥槽给到的是Private Key和Secret Key,如何保证数据完整性和机密性?如下图所示:

首先在HSM BootRom里有两个MASK Key和IV,其中Mask-Key2用于解密Encrypted Private Key\Secret Key,Mask-Key1和IV用于计算上述区域的MAC(Hash),完成比对后再把Key进行加载,这样最大限度保证了数据的机密性和完整性。
3.瑞萨RZ\T2M的密钥导入
有了上述ROM KEY、Key Wrapping、Key Encryption的概念后,最后我们来拓展拓展芯片厂自研的一些密钥管理系统。其实主要还是关心用户密钥是如何灌装到芯片内部的。
以瑞萨RZ/T2M为例,它是一款行业领先的高性能、多功能MPU,可实现 AC 伺服系统和工业电机等工业设备的高速处理、高精度控制和功能安全。
RZ/T2M 具有最大频率为 800 MHz 的双 Arm® Cortex®-R52 内核,可进行实时控制,而且还拥有能够与 CPU 直接连接的大容量TCM (576KB),以实现高性能实时处理。 此外,它还可以将电机控制的外设布置到能直接连接至 CPU 的 LLPP(低延迟外设端口)上,来实现较低的延迟访问。它本身还包含Security,因此有一套很完善的密钥管理工具,可以帮助用户端安全导入密钥。
其大致步骤如下:
- 用户端首先设置自己的256bit密钥(User Flash Programming Key--UFPK),然后使用瑞萨设备生命周期管理服务器包裹出W-UFPK,如下图:

值得注意是蓝色的密钥为硬件根密钥,这个就是一个系列MCU的密钥。
这一系列交互是在瑞萨提供的DLM服务器上完成,如下图:

- 使用UFPK 对用户真正的密钥进行加密和MAC计算,得到包裹好的用户密钥 W-EUK:

- 最后,用户将W-UFPK和W-EUK通过编程接口刷写进芯片中,如下图:

在该步骤中,我们可以看到还使用了HUK(Hardware Unique Key)在SCE内部进一步包裹,目的是为了增加另一种防御措施--克隆保护。经由HUK包裹的密钥只能由当前MCU\MPU打开,所以即使攻击者获取到了DFlash中的密钥,在其他MCU里也无法克隆使用。如下图:

4.小结
本文简单描述了密钥加密Key Encryption和包裹Key Wrapping 的概念,拓展了密钥导入的案例,为之后密钥管理系统的设计奠定基础。
相关文章:
汽车信息安全 -- 存到HSM中的密钥还需包裹吗?
目录 1.车规芯片的ROM_KEY 2.密钥加密与包裹 3.瑞萨RZ\T2M的密钥导入 4.小结 在车控类ECU中,我们通常把主控芯片MCU中的HSM以及HSM固件统一看做整个系统安全架构的信任根。 所以大家默认在HSM内部存储的数据等都是可信的,例如CycurHSM方案中使用HSM…...
【PostgreSQL】入门篇——SELECT、INSERT、UPDATE 和 DELETE 语句,SQL 中最常用的四种操作用法
1. SELECT 语句 描述 SELECT 语句用于从数据库中查询数据。可以选择特定的列或所有列,并可以通过条件过滤结果。 语法 SELECT column1, column2, ... FROM table_name WHERE condition;示例 假设我们有一个名为 employees 的表,结构如下:…...
【Ubuntu】安装常用软件包-mysql
我的几个服务是部署在docker的同一个网络里,这样相互访问就可以通过docker容器的名字访问,比如容器A访问容器B,就可以http://B:8080/xxx 这样访问,不用关心ip是多少。 所以mysql前面文章给安装到主机里,感觉有点坑自己…...
幂等性及技术解决方案
文章目录 定义幂等性 为什么需要幂等性幂等性设计注意事项幂等性的范围分布式锁解决幂等性 设计 延伸阅读 定义幂等性 简单地说,我们可以多次执行幂等运算而不改变结果或者使用相同的输入参数中被调用多次,则不具有额外效果的操作,也就是多…...
正向代理 反向代理
正向代理 正向代理是一种网络服务,它作为客户端和目标服务器之间的中间人,代表客户端向目标服务器发送请求并接收响应。以下是关于正向代理的详细解释: 工作原理 客户端配置: 客户端(如浏览器)配置为使用…...
【分布式微服务云原生】如何在ActiveMQ中优雅处理提前支付的延时订单
摘要 本文将深入探讨在ActiveMQ中如何处理用户提前支付的延时订单问题。我们将介绍如何通过更新订单状态、检查延迟任务、取消延迟消息、使用死信队列、消息选择性消费、设置合理的超时时间以及及时反馈和日志记录等策略,来确保系统的一致性和及时响应用户操作。文…...
Easy Excel从入门到精通!!!
目录 1.文件导入 1.1基本方式读取excel文件内容 1.2注解模型映射器读取excel 1.3多行表头读取 1.4文件上传读取 2.文件导出 2.1基本方式导出 2.2模型映射导出 2.3设置行高、列宽等内容 2.4合并单元格 2.5导出设置超链接、批注、公式 2.6模板填充对象导出 2.7模板填…...
简易CPU设计入门:取指令(三),ip_buf与rd_en的非阻塞赋值
在开篇,还是请大家首先准备好本项目所用的源代码。如果已经下载了,那就不用重复下载了。如果还没有下载,那么,请大家点击下方链接,来了解下载本项目的CPU源代码的方法。 下载本项目代码 准备好了项目源代码以后&…...
【算法】---归并排序(递归非递归实现)
参考 左程云算法 算法导论 前言 本篇介绍 归并排序分治法 前置知识 了解递归, 了解数组。 引入 归并排序 归并排序最早是由公认的现代计算机之父John von Neumann发明的, 这是一种典型的分治思想应用。 我们先介绍分治思想 分治思想 分治思想的…...
UniVue大版本更新:UniVue2.0.0-preview
大版本发布说明 距离上次更新好像已经过去很久了,最近太忙了没时间维护新版本,也是自己在使用的过程中发现了很多问题也有了更多的灵感,由于和之前的版本区别太大,决定重新开一个大版本。这个UniVue2之后的版本追求是性能…...
RabbbitMQ篇(环境搭建 - 下载 安装)(持续更新迭代)
目录 一、Windows 1. 下载安装程序 2. 安装配置erlang 3. 安装rabbitMQ 4. 验证 二、Linux 1. 下载rpm包 1.1. 下载Erlang的rpm包 1.2. 下载socat的rpm包 1.3. 下载RabbitMQ的rpm包 2. 安装 2.1. 安装Erlang 2.2. 安装socat 2.3. 安装RabbitMQ 3. 启动RabbitMQ服…...
C++基础补充(02)C++其他控制语句break continue goto等
文章目录 1. break2. continue 语句3. goto 语句goto的存在 4. 跳出多重循环4.1 goto 直接跳转4.2 C11及其后版本的 return 语句4.3 使用标志变量 在C中,控制语句用于管理程序的执行流程。常见有 break、continue 和 goto。 1. break break语句主要用于在循环或者s…...
决策树中联合概率分布公式解释说明
学习决策树时书本中有一公式 7-3 是: P ( X x i , Y y j ) p i j ( i 1 , 2 , … , m , j 1 , 2 , … , n ) P(X x_i, Y y_j) p_{ij} \quad (i 1, 2, \dots, m, \ j 1, 2, \dots, n) P(Xxi,Yyj)pij(i1,2,…,m, j1,2,…,n) 这个公式表示的是随机变…...
计算机毕业设计 农场投入品运营管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
php email功能实现:详细步骤与配置技巧?
php email发送功能详细教程?如何使用php email服务? 无论是用户注册、密码重置,还是订单确认,电子邮件都是与用户沟通的重要手段。AokSend将详细介绍如何实现php email功能,并提供一些配置技巧,帮助你更好…...
MapBox Android版开发 6 关于Logo
MapBox Android版开发 6 关于Logo Logo的显示查看源码及思路(Logo)第一步第二步 隐藏Logo示例查看源码及思路(Info)第一步第二步 隐藏Logo和Info示例 看到有网友留言问如何移除Logo,今天看了下V9源码,发现M…...
2024年房市
24年8月15日,国家统计局公布,“7月末,商品房待售面积73926万平方米”。(原文链接:https://www.stats.gov.cn/sj/zxfb/202408/t20240815_1955982.html) 7.39亿平方存量商品房,估价均价1万每平,总价约&am…...
index索引
index索引: create index 【1】on 【2】(【3】) 1为索引名,通常为id_表名_列名。2为表名。3为列名。 CREATE INDEX id_account_id ON account(id); -- 根据id创建索引 CREATE INDEX id_account_idname on account(id,name); -- 创建组合索引 索…...
理解互联网链路:从本地ISP到Tier 1 ISP运营商
1. 互联网服务提供商(ISP) 互联网服务提供商(ISP)是指提供互联网接入服务的公司或组织。它们负责将用户连接到互联网,并提供相关的服务,如电子邮件、网站托管和其他在线服务。ISP可以分为不同的层级&#…...
基于元神操作系统实现NTFS文件操作(三)
1. 背景 本文主要介绍DBR的读取和解析,并提供了基于元神操作系统的实现代码。由于解析DBR的目的是定位到NTFS磁盘分区的元文件$Root进行文件操作,所以只解析了少量的部分,其它部分可以参考相关文档进行理解。 DBR存在于磁盘分区的第一个扇区…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
