【嵌入式经验系列】S32K-CSEc硬件加密模块深度解析

2023-11-05 07:59

本文主要是介绍【嵌入式经验系列】S32K-CSEc硬件加密模块深度解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

【嵌入式经验系列】S32K-CSEc硬件加密模块深度解析

  • 一、序言
  • 二、CSEc模块特性
  • 三、CSEc功能详细介绍
    • 3.1 启动CSEc功能
    • 3.2 加密和解密
      • 3.2.1 密钥加载
      • 3.2.2 更新密钥
      • 3.2.3 授权密钥
    • 3.3 CMAC生成与验证
    • 3.4 安全启动
      • 3.4.1 安全启动模式
      • 3.4.2 使能安全启动
      • 3.4.3 添加BOOT_MAC

一、序言

本文档主要着重去介绍硬件加密模块CSEc的功能以及特性,CSEc安全模块已经在恩智浦S32K1xx系列设备中实现。该模块完全兼容HIS-SHE和GM-SHE+标准的功能规范。


二、CSEc模块特性

CSEc安全加密模块的功能特性如下所示:

  • 符合HIS-SHE和GM-SHE+安全规范的要求;
  • 更安全的加密密钥存储(范围从3到17个用户密钥);
  • AES-128加密和解密;
  • AES-128 CMAC验证码的生成和验证;
  • ECB(电子Cypher Book)模式-加密和解密;
  • CBC(密码块链接)模式-加密和解密;
  • 真和伪随机数生成;
  • Miyaguchi-Preneel压缩功能;
  • 安全引导模式(用户可配置)。

三、CSEc功能详细介绍

3.1 启动CSEc功能

CSEc的主要功能都是在闪存模块(FTFC)的核心中实现的,实现方式如下所示。
在这里插入图片描述

要启动CSEc功能,必须将器件配置为模拟EEPROM操作。Flash的分区命令(PRGPART)用于启用CSEc,同时还提供了密钥大小的机制。根据密钥的大小,EEERAM的最后128/256/512字节将从仿真EEPROM中减少并变为不可寻址。该存储区域被保护并用于存储加秘密钥,此外,系统中的任何其他主设备都无法访问此存储区域。安全存储区域如图1.1中的灰色部分所示。

一旦用户为FTFC模块配置CSEc功能并加载用户密钥以进行安全操作,设备就可以进行任何与安全相关的操作。

CSEc PRAM接口用于为安全操作提供数据和命令头。该过程涉及将系统存储器内容块传送到CSEc PRAM空间以进行加密操作,并且一旦操作完成,然后将结果传送回系统存储器。所有数据块大小均为128位,如果块大小小于128位,则需要由应用程序填充。

写入CSEc命令头后,命令执行开始,CCOB接口,EEERAM和CSEc PRAM被锁定。此外,在完成正在进行的命令之前,不能启动其他命令。

CSEc相关操作的状态在Flash状态寄存器(FSTAT)和CSEc状态寄存器(FCSESTAT)中报告。使用此状态信息,还可以在完成CSEc命令时生成中断。此外,CSEc命令执行期间发生的任何错误都会报告在CSEc PRAM的错误位位置。

分区启用CSEc功能后的Flash结构如下所示。
在这里插入图片描述


3.2 加密和解密

加密解密这一节主要介绍的是关于密钥加载、更新密钥以及授权密钥的概念。

3.2.1 密钥加载

要加载密钥,必须使用HIS-SHE规范中定义的协议,这可以保证密钥的机密性、完整性、真实性并且防止重放攻击。HIS-SHE要求为了更新包括密钥的内存,必须通过一定的算法计算M1M2M3的值并且将其传递给CSEc模块。

这些值通常在脱机计算机上派生,并在头文件中创建为数组。也可以使用目标部分(S32K1xx)和CSEc导出值。CSEc PRAM第1页至第4页装有M1,M2和M3。然后,应写入(第1页)CSE_LOAD_KEY命令头以启动命令执行。执行完成后,CSEc PRAM页面5到7将返回M4和M5。

可以根据预先计算的离线值验证这些值,以便完美地添加密钥。

3.2.2 更新密钥

如果密钥设置了WRITE_PROT属性,则无法再更新该密钥。将设备的密钥编程到安全闪存中并且设备不再处于出厂状态后,可能需要更新一个或多个密钥。HIS-SHE描述了执行此操作的机制,这已通过CMD_LOAD_KEY命令在CSEc模块中实现。

3.2.3 授权密钥

为了保证密钥的安全,HIS-SHE要求在尝试更新特定密钥之前要知道授权密钥。通常,需要知道特定密钥以更新该特定密钥。MASTER_ECU_KEY是具有特殊含义的密钥,可用于在不知道这些密钥的情况下授权更新所有密钥(BOOT_MAC_KEY,BOOT_MAC和所有KEY_1到KEY_17)。


3.3 CMAC生成与验证

CSEc使用AES-128 CMAC算法进行消息验证。从一个存储器插槽中选择CMAC操作的密钥。必须启用密钥才能进行身份验证(KEY_USAGE = 1)。

对于未存储在非易失性存储器插槽中的密钥,可以使用CMD_LOAD_PLAIN_KEY命令将纯文本密钥加载到RAM_KEY插槽中。但是,由于此方法意味着潜在的安全风险,因此这可能仅对开发调试有用。

CMD_VERIFY_MAC命令支持将计算的MAC值与输入MAC值进行比较。


3.4 安全启动

CSEc有一种机制,允许用户在flash中验证启动代码。可以配置MCU,以便在每次启动时,对一段代码进行认证,并将生成的MAC与先前存储在安全存储器插槽中的值进行比较。

3.4.1 安全启动模式

S32K1xx设备支持如下3种安全启动模式。

  • 顺序启动模式:在此模式下,在RESET之后,闪存系统退出RESET,内核保持在RESET状态,或者可以从ROM代码执行。安全启动过程验证应用程序固件块。如果安全启动成功,则密钥将可用于安全任务,否则将阻止标记为启动保护的密钥用于所有任务。最后,核心开始执行应用程序固件。
  • 严格的顺序启动模式:在此模式下,在RESET之后,闪存系统退出RESET,内核保持在RESET状态,或者可以从ROM代码执行。安全启动过程验证应用程序固件块。如果安全启动成功,则密钥将可用于安全任务。否则,如果CMAC比较失败,则主核心保持在RESET状态(因此不执行应用程序固件)或者可以执行ROM代码。(这种启动模式是不可逆转的;这意味着一旦设置,启动模式就无法更改为其他启动模式。)
  • 并行启动模式:在此模式下,在RESET之后,闪存系统和主内核从RESET出来,主内核开始执行应用程序固件。与主核心执行并行,CSEc使用安全启动过程验证应用程序固件块。如果安全启动成功,则密钥将可用于安全任务,否则将阻止标记为启动保护的密钥用于所有任务。主核仍然可以执行固件。

3.4.2 使能安全启动

CMD_BOOT_DEFINE命令配置需要进行身份验证的引导模式(flavor)和引导代码大小。下图和下面的描述说明了S32K1xx器件中的安全引导流程。
在这里插入图片描述

用于验证引导代码的密钥是BOOT_MAC_KEY。假设已经编程了BOOT_MAC_KEY,如果不是,则设备中止安全启动过程并清除FCSESTAT[SB]位。

一旦配置了安全启动,在每次复位时,自动安全启动在程序闪存块上运行,从地址“0”开始,以BOOT_SIZE位数结束。在此过程中,MAC在代码的这一部分上计算,并与存储在安全闪存中的BOOT_MAC进行比较。如果BOOT_MAC插槽为空,则CSEc自动存储计算的BOOT_MAC并中止安全启动过程,设置FCSESTAT [BIN](== 1)位。

如果计算的MAC值与BOOT_MAC_KEY的比较成功,则设置FCSESTAT [BOK]位(== 1)。安全启动过程结束后,应用程序执行CMD_BOOT_OK命令。这将设置FCSESTAT [BFN](== 1)位以标记安全引导过程的结束。

如果安全引导过程成功并且执行了CMD_BOOT_OK,则应用程序代码可以使用标记为Boot Protected(BOOT_PROT)的键。否则启动保护密钥将保持锁定。

3.4.3 添加BOOT_MAC

添加BOOT_MAC的方式有两种,一种是手动添加,一种是CSEc模块自动添加,下面分别介绍这两种方式。

  1. 手动添加:
    a. 使用要保护的代码对代码flash进行编程;
    b. 将BOOT_MAC_KEY编程为安全闪存(此时也可以编程其他用户密钥);
    c. 使用CMD_BOOT_DEFINE命令定义安全启动模式和BOOT_SIZE;
    d. 使用BOOT_MAC_KEY计算要保护的代码的初始BOOT_SIZE部分的二进制记录的MAC,它可以离线完成或使用CSEc的
    RAM_KEY功能。
  2. 自动添加:(出厂设备没有存储在安全闪存中的用户密钥,如果遵循以下顺序,CSEc将计算并将BOOT_MAC存储在安全闪存中)
    a. 使用要保护的代码对代码flash进行编程;
    b. 将BOOT_MAC_KEY编程为安全闪存(此时也可以编程其他用户密钥)
    c. 使用CMD_BOOT_DEFINE命令定义安全引导风格和BOOT_SIZE;
    d. 重置设备。CSEc计算BOOT_MAC并将其存储在安全存储器插槽中;
    e. 再次重置设备; CSEc确认先前计算的BOOT_MAC并设置FCSESTAT [BOK] = 1(安全启动OK位);

这篇关于【嵌入式经验系列】S32K-CSEc硬件加密模块深度解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/348468

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

韦季李输入法_输入法和鼠标的深度融合

在数字化输入的新纪元,传统键盘输入方式正悄然进化。以往,面对实体键盘,我们常需目光游离于屏幕与键盘之间,以确认指尖下的精准位置。而屏幕键盘虽直观可见,却常因占据屏幕空间,迫使我们在操作与视野间做出妥协,频繁调整布局以兼顾输入与界面浏览。 幸而,韦季李输入法的横空出世,彻底颠覆了这一现状。它不仅对输入界面进行了革命性的重构,更巧妙地将鼠标这一传统外设融入其中,开创了一种前所未有的交互体验。 想象