汽车信息安全 -- 存到HSM中的密钥还需包裹吗?

devtools/2024/9/29 5:07:03/

目录

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 的概念,拓展了密钥导入的案例,为之后密钥管理系统的设计奠定基础。 


http://www.ppmy.cn/devtools/118218.html

相关文章

代码随想录算法训练营Day10

150. 逆波兰表达式求值 力扣题目链接&#xff1b;. - 力扣&#xff08;LeetCode&#xff09; Collection——Deque——LInkedList类 class Solution {public int evalRPN(String[] tokens) {Deque<Integer> myquenew LinkedList<>();for(String a:tokens){if(a.…

OJ在线评测系统 代码沙箱优化模版方法模式 使用与有规范的流程 并且执行流程可以复用

代码沙箱优化模版方法模式 上次我们代码沙箱的docker实现和原生实现 我们可以使用模版方法设计模式去优化我们的代码 我们原生的java实现代码沙箱和docker实现代码沙箱是有更多重复点的 比如说把文件 收集文件 进行校验 我们要用模版方法设计模式 定义一套通用的执行流程 让…

【芋道源码】gitee很火的开源项目pig——后台管理快速开发框架使用笔记(微服务版之本地开发环境篇)

后台管理快速开发框架使用笔记&#xff08;微服务版之本地开发环境篇&#xff09; 后台管理快速开发框架使用笔记&#xff08;微服务版之本地开发环境篇&#xff09; 后台管理快速开发框架使用笔记&#xff08;微服务版之本地开发环境篇&#xff09;前言一、如何获取项目&#…

提升论文质量必备!2024年顶尖8款AI写作工具!

各位好&#xff01;在这个信息化迅速发展的年代&#xff0c;AI技术已经成为我们学术探索的重要辅助力量。本次&#xff0c;我将向大家展示2024年八款必备的尖端AI应用。这些工具不仅能极大提升我们撰写学术论文的效率&#xff0c;还能改善研究的质量。 首先我们来看“梅子AI论…

PyTorch源码系列(一)——Optimizer源码详解

目录 1. Optimizer类2. Optimizer概览3. 源码解析3.1 构造方法3.1.1 全局设置情形3.1.2 局部设置情形3.1.3 覆盖测试3.1.4 逐行讲解 3.2 add_param_group3.3 step3.4 zero_grad3.5 self.state3.6 state_dict3.7 load_state_dict 4. SGD Optimizer5. 极简版Optimizer源码6. 自定…

DAY16||513.找树左下角的值 |路径总和|从中序与后序遍历序列构造二叉树

513.找树左下角的值 题目&#xff1a;513. 找树左下角的值 - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: […

Java中的Junit、类加载时机与机制、反射、注解及枚举

目录 Java中的Junit、类加载时机与机制、反射、注解及枚举 Junit Junit介绍与使用 Junit注意事项 Junit其他注解 类加载时机与机制 类加载时机 类加载器介绍 获取类加载器对象 双亲委派机制和缓存机制 反射 获取类对象 获取类对象的构造方法 使用反射获取的构造方法创建对象 获…

Elasticsearch深度攻略:核心概念与实践应用

目录 一、Elasticsearch简介1、Elasticsearch是什么2、Elasticsearch的应用场景3、Elasticsearch的核心概念 二、Elasticsearch安装与配置1、安装Elasticsearch&#xff08;1&#xff09;系统要求&#xff08;2&#xff09;下载Elasticsearch&#xff08;3&#xff09;解压安装…