hwyzw 发表于 2025-3-7 01:06:39

深入解析恩智浦S32K1xx系列CSEc硬件加密模块功能与特性

    关注且发送"201"即可获取完整全文内容;

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

    一、序言

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

    二、CSEc模块特性

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

    三、CSEc功能详细介绍 3.1 启动CSEc功能

    CSEc 的主要功能是在闪存模块(FTFC)的核心里得以实现的,其实现方式具体如下。

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

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

    CSEc PRAM 接口的作用是为安全操作提供数据和命令头。这个过程包含将系统存储器的内容块传输到 CSEc PRAM 空间,以便进行加密操作。并且在操作完成之后,还要将结果传输回系统存储器。所有的数据块大小都是 128 位,如果块的大小小于 128 位,就需要由应用程序来填充。

    写入 CSEc 命令头后,命令开始执行。CCOB 接口以及 CSEc PRAM 被锁定。并且,在完成正在进行的命令之前,无法启动其他命令。

    CSEc 相关操作的状态会在 Flash 状态寄存器(FSTAT)以及 CSEc 状态寄存器()里进行报告。利用这些状态信息,能够在 CSEc 命令完成时触发中断。并且,在 CSEc 命令执行过程中出现的任何错误,都会在 CSEc PRAM 的错误位位置被报告出来。

    分区启用CSEc功能后的Flash结构如下所示。

    3.2 加密和解密

    https://img1.baidu.com/it/u=3451408551,199760930&fm=253&fmt=JPEG&app=138&f=JPEG?w=500&h=697

    加密解密这一节主要介绍的内容有:密钥加载的相关概念;更新密钥的相关概念;授权密钥的相关概念。

    3.2.1 密钥加载

    要加载密钥,需使用 HIS-SHE 规范所定义的协议,这样能保证密钥的机密性、完整性与真实性,还能防止重放攻击。HIS-SHE 规定,为更新包含密钥的内存,必须通过特定算法计算出一个值,并将其传递给 CSEc 模块。

    这些值通常是在脱机的计算机上推导出来的,并且在头文件中被创建为数组。还可以运用目标部分()以及 CSEc 导出值。CSEc PRAM 的第 1 页到第 4 页装载着 M1、M2 和 M3。接着,应当写入(第 1 页)的命令头来启动命令的执行。执行完毕后,CSEc PRAM 的第 5 页到第 7 页将会返回 M4 和 M5。

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

    3.2.2 更新密钥

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

    3.2.3 授权密钥

    为保证密钥安全,HIS-SHE 要求在尝试更新特定密钥之前需知晓授权密钥。一般来说,要更新某特定密钥就需先知道该特定密钥。存在具有特殊含义的密钥,利用这些密钥可在不知其他密钥的情况下授权更新所有密钥(包括所有 KEY_1 到……)。

    3.3 CMAC生成与验证

    CSEc通过使用 AES-128 CMAC 算法来进行消息验证。在进行消息验证时,需要从一个存储器插槽中挑选出用于 CMAC 操作的密钥。并且只有当密钥被启用( = 1)时,才能够进行身份验证。

    如果密钥未存储在非易失性存储器插槽中,那么可以通过命令把纯文本密钥加载到插槽里。不过,因为这种方法存在潜在的安全风险,所以它可能只对开发调试有作用。

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

    3.4 安全启动

    CSEc 具备一种机制,这种机制能够让用户在 flash 当中对启动代码进行验证。能够对 MCU 进行配置,使得在每次启动的时候,都可以对一段代码展开认证操作,并且把生成的 MAC 和之前存储在安全存储器插槽里面的值进行对比。

    3.4.1 安全启动模式

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

    3.4.2 使能安全启动

    命令配置需要对引导模式进行身份验证,同时还需要配置引导代码大小。以下的图以及描述阐述了器件中的安全引导流程。

    https://img0.baidu.com/it/u=1291559061,1459679734&fm=253&fmt=JPEG&app=138&f=JPEG?w=829&h=500

    用于验证引导代码的密钥是。如果已经进行了编程,那么就继续;如果没有编程,设备就会中止安全启动过程并清除位。

    配置安全启动后,每次复位时,自动安全启动会在程序闪存块上运行,从地址“0”开始,到特定位数结束。在这个过程中,MAC 会在代码的这一部分进行计算,并且会与存储在安全闪存中的 MAC 进行比较。如果插槽为空,CSEc 会自动存储计算出的 MAC 并中止安全启动过程,同时设置 (== 1)位。

    如果计算的 MAC 值与某个对象比较成功,那么就设置 位(其值为 1)。在安全启动过程结束之后,应用程序会执行相应命令。此命令会设置 位(其值为 1),以标记安全引导过程的结束。

    如果安全引导过程成功并且被执行了,那么应用程序代码就能够使用标记为 Boot()的键。若不是这样,启动保护密钥将会保持锁定状态。

    3.4.3 添加

    添加的方式存在两种。其一为手动添加;其二为 CSEc 模块自动添加。接下来将分别对这两种方式进行介绍。

    手动添加:

    a. 使用要保护的代码对代码flash进行编程;

    b. 将编程为安全闪存(此时也可以编程其他用户密钥);

    c. 使用命令定义安全启动模式和;

    使用计算要保护的代码的初始部分的二进制记录的 MAC 这种操作,它既可以离线进行,也可以使用 CSEc 来完成。

    功能。自动添加:出厂设备未将用户密钥存储在安全闪存中时,如果遵循以下顺序,CSEc 将进行计算并将其存储在安全闪存中。

    a. 使用要保护的代码对代码flash进行编程;

    b. 将编程为安全闪存(此时也可以编程其他用户密钥)

    c. 使用命令定义安全引导风格和;

    d. 重置设备。CSEc计算并将其存储在安全存储器插槽中;

    再次对设备进行重置;CSEc 确认之前所计算的内容,并将 设置为 1(即安全启动 OK 位);
页: [1]
查看完整版本: 深入解析恩智浦S32K1xx系列CSEc硬件加密模块功能与特性