在IAR Embedded Workbench for Arm中实现Infineon TRAVEO™ T2G安全调试

随着汽车电子系统变得越来越智能,对功能安全(Safety)的要求越来越高,同时信息安全(Security)也越来越被关注,安全调试(Secure Debug)机制已成为一个重要的信息安全特性。Infineon TRAVEO™ T2G系列MCU在满足高性能需求的同时,集成了完整的硬件安全特性,包括生命周期管理、安全启动(Secure Boot)、硬件加密引擎以及调试端口访问控制(安全调试)等。这些机制协同作用,可有效防止未经授权的访问与代码数据篡改。

本文主要介绍如何在IAR Embedded Workbench for Arm中实现Infineon TRAVEO™ T2G的安全调试。

01.Infineon TRAVEO™ T2G生命周期管理

设备生命周期是 TRAVEO™ T2G MCU 安全机制中的核心环节。其各个阶段按照严格的、不可逆的流程推进,并通过电子保险丝(eFuse)实现状态切换(将保险丝位从"1"永久熔断为"0")。这种机制确保了生命周期一旦进入新的阶段便无法回退,从而能够根据客户需求,可靠地对设备内部的数据与代码实施不同层级的保护。

TRAVEO™ T2G MCU 生命周期共分NORMAL_PROVISIONED, SECURE, SECURE_WITH_DEBUG, RMA(Return Material Authorization), CORRUPTED 5个阶段,如下两图展示的是生命周期的切换顺序,以及对应的保护状态(NORMAL, SECURE, DEAD)。

02.调试端口访问控制机制

CYT2B7x 调试架构简介

  • CYT2B7x 的物理调试接口支持 JTAG接口和SWD接口,内接的Arm 调试端口(DAP)有三组访问端口(access port),分别为SYSTEM-AP(AP0),CM0-AP(AP1),CM4-AP(AP2)。其中,CM0-AP用于访问CM0+,CM4-AP用于访问CM4,SYSTEM-AP用于访问System ROM table,以及AHB总线上的组件资源。

  • 用户可以通过编写程序通过CPUSS_AP_CTL寄存器可单独设置3个AP端口的调试器访问权限。

    调试端口控制策略

    调试端口控制(Access restriction)共分为4种:Normal, Normal Dead, Secure, Secure Dead。下图是调试端口控制(Access restriction)与生命周期(Lifecycle stage)、保护状态(Protection state)的关系,以及Boot阶段从哪组配置字(SFlash或者eFuse)获取调试端口访问权限配置,并由Boot代码写入到CPUSS_AP_CTL寄存器中。

以下是MCU复位后的boot阶段,配置调试端口访问权限的流程。

以下是eFuse中的Secure Access Restrictions 和 Secure Dead Access Restrictions 配置字。

下表显示了 SFLASH Row 13 配置字。Normal Access Restrictions 和 Normal Dead Access Restrictions 分别存储在 SFLASH Row 13 配置字(0x17001A00~0x17001BFF)的第一个字(0x17001A00)和第二个字(0x17001A04)中。

AP_CTL_ M0/M4/SYS_ DISABLE 定义了 M0/M4/SYS 调试端口 (DAP) 的调试器访问权限。根据 AP_CTL_ M0/M4/SYS_ DISABLE 提供的配置字信息,Boot 代码向 CPUSS_AP_CTL.CM0/CM4/SYS_ENABLE 和 CPUSS_AP_CTL.CM0/CM4/SYS_ DISABLE 位写入对应的值,如下表所示:

03.安全调试示例

示例简介

  • 本示例来自于"AN228680 -- Secure system configuration in TRAVEO T2G family"应用手册的"16.1.1 Debug access port authentication"

  • 软硬件环境:IAR Embedded Workbench for Arm 9.70.1 + KitProg3 CMSIS-DAP 硬件调试器 + Infineon CYT2B7x MCU

  • 生命周期配置为NORMAL_PROVISIONED

  • SFlash Row 13 配置字Normal Access Restrictions为AP_CTL_CM0 / CM4 / SYS -> 01 -- Temporary Disable

  • CM0+ 程序来自于sdl_additional_code_examples_v8.3.0和T2G_Sample_Driver_Library_8.3.0,负责配置Sflash调试端口配置字,确保MCU上电后,CM0+和CM4调试端口关闭,仅打开SYS-AP端口,以便硬件调试器访问调试解锁认证数据区域。 CM0+程序还负责MCU侧的CM4调试端口解锁流程。

  • 通过IAR Embedded Workbench for Arm C-SPY调试脚本与CYT2B7x CM0+程序进行调试端口解锁流程交互。

调试端口加锁

  • 由CM0+软件工程将Normal Access Restrictions 配置字布局到SFlash Row 13区域,下载CM0+软件工程时,相应的配置字就会写入到SFlash区域。

  • Normal Access Restrictions 配置:

    o AP_CTL_M0_DISABLE: 01 - Temporary Disable

    o AP_CTL_M4_DISABLE: 01 - Temporary Disable

    o AP_CTL_SYS_DISABLE: 01 - Temporary Disable

  • 128 位调试解锁密钥(key0 - key3)存储在Work Flash中(地址 = 0x14012000)。

调试端口解锁流程

下图为调试端口解锁流程图,其中:

CM0+侧:

  • Boot代码设置所有调试端口CM0/CM4/SYSTEM关闭(取决于 SFLASH)

  • CM0+程序打开SWD/JTAG引脚,并打开SYSTEM_DAP端口(下图步骤4-6)

  • CM0+程序等待IPC中断

  • 当中断到来时,通过SRAM_SCRATCH地址检查128 位密钥值,如果与Work Flash中(地址 = 0x14012000)中的预设密钥值匹配正确,则开启调试端口AP_CTL (下图步骤10-17)

IAR Embedded Workbench for Arm C-SPY调试平台侧:

  • 通过SYSTEM_DAP(DAP端口号0)(下图步骤7,8)将值写入指定地址

  • 通过IPC寄存器生成中断 (下图步骤9)

  • 等待 CM0+ 侧通过AP_CTL打开CM0+和CM4的调试端口 (下图步骤18)

IAR Embedded Workbench for Arm进行CYT2B7x MCU CM4工程安全调试流程

  1. 准备工作
  • CM0+软件示例工程已经成功下载到CYT2B7x MCU中。

  • 任一个CM4软件示例工程。

  1. 配置硬件调试器,本示例使用KitProg3 CMSIS-DAP 硬件调试器(如左下图配置),用户也可以使用I-jet硬件调试器(如右下图配置)
  1. 在Debugger选项中,按下图格式输入密钥,本示例正确密钥为0x00112233445566778899AABBCCDDEEFF。

* MCU侧,密钥已由CM0+工程预先下载保存在Work Flash中。

  1. 启动调试后,在连接内核时,会调用C-SPY调试脚本的函数_ExecDeviceCoreConnect() -> TVII_CheckDAP()&TVII_IsAPEnabled(1) ->TVII_Unlock(),将密钥写入相应的寄存器。
  1. TVII_Unlock()函数在执行完密钥写入后,通过TVII_WaitForResponse()函数来检查认证结果状态字,来判断DAP调试端口是否认证成功(如果认证成功,CM0+侧程序会修改状态字0x55000000变为0xAA000000,状态字位于0x08002700地址)。密钥匹配成功后,调试器成功连接CM4调试端口。
  1. 在Debugger选项中,如果输入不正确的密钥0x22112233445566778899AABBCCDDEEFF。本示例正确密钥为0x00112233445566778899AABBCCDDEEFF。
  1. TVII_Unlock()函数在执行完密钥写入后,通过TVII_WaitForResponse()函数来检查认证结果状态字,来判断DAP调试端口是否认证成功。由于输入密钥错误,调试器连接CM4内核失败,退出调试界面。

04.总结

本文以Infineon TRAVEO™ T2G CYT2B7x为例介绍了如何在IAR Embedded Workbench for Arm中实现TRAVEO™ T2G的安全调试。TRAVEO™ T2G的调试端口解锁流程由CM0+控制,因此用户也可以根据项目需求重新设计CM0+程序代码来进行调试端口解锁流程(比如:基于加密认证算法的身份认证机制来解锁),IAR Embedded Workbench for Arm C-SPY调试脚本也完全可以适配实现用户的自定义调试端口解锁流程。

相关推荐
iphone10819 分钟前
企业内部机密视频安全保护|如何防止企业内部机密视频泄露?
安全·音视频·视频加密·加密技术·视频安全·企业机密·机密视频
阿拉丁的梦1 小时前
教程1:用vscode->ptvsd-创建和调试一个UI(python)-转载官方翻译(有修正)
开发语言·python
木宇(记得热爱生活)1 小时前
一键搭建开发环境:制作bash shell脚本
开发语言·bash
Cisyam^1 小时前
Go环境搭建实战:告别Java环境配置的复杂
java·开发语言·golang
HenrySmale1 小时前
05 网络信息内容安全--对抗攻击技术
网络·安全
原点安全3 小时前
某供应链金融公司多场景敏感数据安全保护实践
安全
jayzhang_3 小时前
SPARK入门
大数据·开发语言
蹦极的考拉3 小时前
网站日志里面老是出现{pboot:if((\x22file_put_co\x22.\x22ntents\x22)(\x22temp.php\x22.....
android·开发语言·php
麦聪聊数据3 小时前
能源行业数据库远程运维安全合规实践:Web化平台的落地经验
运维·数据库·sql·安全·数据服务