S32K1xx 安全启动介绍

一、 概述

NXP 推出的 S32K1xx 系列 MCU,针对汽车应用,提供了汽车功能安全中所需的安全相关功能,该芯片内置安全服务引擎(CSEc),集成了相关的加密解密算法、秘钥管理以及安全启动等功能,下面将重点介绍 S32K1xx 系列芯片的 CSEc 模块的相关特性以及安全启动功能。

二、 CSEc 安全模块

CSEc 模块集成在 S32K1xx 内部的 FTFC 控制器模块中,如下图所示,

                                                                               图 2.1 集成 CSEc 的 FTFC 模块框图

CSEc 模块包括以下特性

  • 满足 HIS-SHE 规范和 GM-SHE 安全规范的需求
  • 更多安全秘钥的存储(3~17 个用户秘钥)
  • AES-128 的加密和解密
  • AES-128 CMAC(基于秘钥的消息认证码) 生成和校验
  • ECB 模式加密和解密
  • CBC 模式加密和解密
  • 真/伪随机数生成
  • Miyaguchi-Preneel 压缩功能
  • 安全启动功能

 

2.1 CSEc 秘钥

加密和解密的过程中都需要用到秘钥,CSEc 提供了多种秘钥的管理,每种秘钥的 ID、内存类型、秘钥大小、秘钥属性等特性如下图所示:

                                                                                   图 2.2 各种秘钥的属性

  • Secret_Key,该秘钥是在芯片制造过程中使用随机数生成,该秘钥的值无法公开,用于内部生成派生的秘钥(例如用来生成伪随机数)
  • UID,芯片的唯一识别号,每个芯片都不一样,由厂商生产的时候写入
  • MASTEER_ECU_KEY,用于将 CSEc 恢复到工厂模式的状态,或者修改其它的秘钥
  • BOOT_MAC_KEY,用于安全启动时验证软件的真实性
  • BOOT_MAC,用于存储安全启动过程中所需的 MAC 值
  • KEY01~KEY17,这些秘钥存储在 EEERAM 里面,可配置秘钥的大小和数量,可配置成 3 ~ 17 个秘钥
  • RAM_KEY,存放在易失存储器的秘钥,可用于任何操作

 

每个秘钥都有一个 KEY_ID 跟其绑定,用来区分每个秘钥,此外对于用户的秘钥 KEY01~KEY17 还有 KBS 来区分,KBS 表示秘钥的区块,KEY0~KEY10 的 KBS 为 0,即所在区块是 Bank0,KEY11~KEY17 的 KBS 为 1,即所在区块是 Bank-1,通过 KEY_ID 和 KBS 我们可以来区分不同的秘钥。

Key_Size 用来指示秘钥的大小,Key_Counter 则是用来指示秘钥更新的次数,每次更新秘钥该值会加一,该计数器的大小为 28 位的宽度。

另外,每个秘钥都有对应的属性,总共有六种属性,每种属性使用 1 Bit 来表示,包括:

  • 写保护标志位(WRITE_PROT),该位置 1 则不允许秘钥被修改
  • 启动保护标志位(BOOT_PROT),该位置 1 则表示当启动过程计算出的 MAC 值和 BOOT_MAC 的值不匹配时该秘钥不允许被使用
  • 使用标志位(KEY_USAGE),该位决定秘钥的使用用途,该位置 1 则表示秘钥用于 CMAC 的生成和校验,否则用于加密
  • 仅用于检验标志位(VERIFY_ONLY),该标准位用于满足 GM-SHE 规范的功能要求,该功能可以通过 PGMPART 命令来进行配置,决定是否使能该功能。该位置 1 时,表示秘钥只能用在 VERIFY_MAC 命令。
  • 调试使用标志位(DEBUG_PROT),该位置 1 则表示在调试过程中不允许使用该秘钥
  • 外卡保护标志位(WILDCARD),该位置 1 时表示当提供特定的外卡 ID 时秘钥不能被使用

2.2  CSEc PRAM 接口

CSEc PRAM 接口用来发布 CSEc 命令并传递相关数据用于安全操作,CSEc 的 PRAM 由 8 个 128 位的 Page 组成,可通过字节或字来进行访问,PRAM 接口如下图所示,

                                                                                                图 2.3 PRAM 接口

        从上图可以看出 PRAM 接口总共有 8 个 Page,每个 Page 128 位。第一个 Page 包括了命令头(Page0 Word0)和控制信息的长度(Page0 Word 3),其它 Pages 用来放置一些 输入/输出 的数据。

        当对命令头写入数据后,CSEc PRAM 接口将锁住,禁止其它的请求,并且开始执行 CSEc 命令,因此,命令头总是最后才进行写入的。关于命令头的功能说明如下图所示:


                                                                                      图 2.4 CSEc 命令头

Byte3为 Func ID,指定使用哪个命令,总共有 16 个命令,Byte2 为 Func format,指定数据传输的方式,通过复制或者通过指针进行访问。Byte1 为 CallSeq,当数据的长度大于 7 个 Page 时,可以用该字段来分段传输数据再执行命令。Byte 0 为 KEYID,指定具体的秘钥,Byte7 和 Byte6 用来标识错误。

三、 安全启动

了解完 CESc 的相关特性后,接下来来了解安全启动的功能,S32K 中的 CESc 中内置了安全启动的功能,其内部实现了一个状态机,允许用户鉴定启动代码是否合法,每次启动时会对指定区域的代码进行鉴定,利用该代码段生成 MAC 值和预先内置的值进行比对,比对通过则正常启动。

 

3.1 安全启动模式

S32K1xx 支持以下几种安全启动模式:

  • 顺序启动模式

在该模式下,系统复位后,Flash 系统离开复位状态而内核保持在复位状态,CESc 模块会执行安全启动的流程对应用代码进行校验,如果校验通过,则相关的秘钥在允许被使用,否则,秘钥将不允许被使用。校验后将正常启动应用代码。

  • 严格顺序启动模式

该模式跟顺序启动模式的区别在于固件的校验如果不通过,内核将一直保持在复位的状态。

  • 并行启动模式

该模式下,系统复位后,Flash 系统和内核都离开复位状态并且开始执行应用代码,在执行代码的同时,CSEc 模块也会执行安全启动的流程,检验通过则秘钥允许被使用,否则秘钥不允许被使用。

3.2 安全启动流程

如下图所示为 S32K1xx 的安全启动流程,

                                                                    图 3.1 S32K1xx 安全启动流程

启动流程由 CSEc 模块执行,大致有几个步骤:

  • 执行安全启动的命令
  • 判断 BOOT_MAC_KEY 和 BOOT_MAC 是否为空,否则停止安全启动
  • 利用 BOOT_MAC_KEY 计算出 MAC,将 MAC 和 BOOT_MAC 的值进行比对,比对一致则安全启动成功

 

在使用安全启动之前我们需要往 CSEc 中写入 BOOT_MAC_KEY 和 BOOT_MAC,BOOT_MAC_KEY 是安全启动中用于生成 BOOT_MAC 的秘钥,CSEc 内部会根据我们预先设定的校验区块的大小以及 BOOT_MAC_KEY 生成一个 MAC,因此我们需要实现写入 BOOT_MAC_KEY,BOOT_MAC_KEY 的写入我们可以通过 CSEc 提供的命令进行写入。而 BOOT_MAC 的写入提供了两种方法:(1)手动写入 (2)自动写入

手动写入的流程为:

  • 将需要设置保护的代码写入 Flash
  • 写入 BOOT_MAC_KEY
  • 设置安全启动模式以及要设置保护的代码的大小
  • 计算 MAC 值,可以通过离线计算或者 CSEc 提供的 RAM_KEY 的特性进行计算
  • 将计算的 MAC 值加载到存放 BOOT_MAC 的位置
  • 复位设备,CSEc 确认之前存进来的 BOOT_MAC

 

自动写入的流程为:

  • 将需要设置保护的代码写入 Flash
  • 写入 BOOT_MAC_KEY
  • 设置安全启动模式以及要设置保护的代码的大小
  • 复位设备,CSEc 会计算出 BOOT_MAC 的值并存储到对应位置
  • 再次复位设备,CSEc 确认之前计算出的 BOOT_MAC 的值

 

至此,关于 S32K1xx 安全启动的内容便介绍完了。

四、 参考资料

  1. NXP ,《AN5401》, https://www.nxp.com.cn/webapp/sps/download/preDownload.jsp?render=true
  2. NXP ,《S32K1XXRM》,https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/s32k-automotive-mcus/s32k1-microcontrollers-for-general-purpose:S32K1?tab=Documentation_Tab

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论