随着汽车电子系统变得越来越智能,对功能安全(Safety)的要求越来越高,同时信息安全(Security)也越来越被关注,安全调试(Secure  Debug)机制已成为一个重要的信息安全特性。NXP推出的S32K3系列MCU配备了多层次的生命周期管理和硬件安全引擎(Hardware Security Engine,HSE),以确保在产品开发与部署中的信息安全。

本文主要介绍如何在IAR Embedded Workbench for Arm中实现NXP S32K3的安全调试。

NXP S32K3生命周期与调试权限

NXP S32K3的生命周期(Lifecycle,简称LC)是芯片内用于表示设备状态的重要机制,其状态变化遵循单向流程,不可逆转。生命周期的不同阶段(如: CUST_DEL、OEM_PROD、IN_FIELD等)决定了开发者是否可以访问特定的调试功能和HSE接口。调试功能通常在开发阶段可用,而在量产阶段需限制,以防止未经授权的访问。在生命周期进入CUST_DEL后面的阶段(如:OEM_PROD、IN_FIELD、PRE_FA),可以配置为Trusted,即开发者通过安全身份认证机制,才可以访问调试端口,进行软件调试。

安全调试身份认证机制

当MCU调试端口被设置为受保护状态后,若调试器未能通过身份认证,将无法建立调试会话。NXP提供了两种主要的身份认证方式:

  1. 静态认证(Static Authentication):
    调试器在每次复位后需提供相同的预设密钥(Application Debug Key/Password, ADKP)以解锁调试接口。
  2. 动态认证(Dynamic Authentication):
    调试器在每次复位后,需基于芯片生成的挑战数据进行加密计算,并返回相应响应数据以完成身份认证。

这两种模式均需通过HSE接口在CUST_DEL阶段配置,配置方式依赖于HSE的set attribute服务接口(HSE_DEBUG_AUTH_MODE_ATR_ID)。

另外,在每种身份认证方式下,都有两种情况,一种是密钥与MCU UID无关(w/o UID diversified), 另一种则是密钥与MCU UID相关(w UID diversified)。

加锁调试端口

加锁调试端口具体流程请咨询NXP。

  1. 128 位ADKP是一个非常重要的 OTP HSE 系统属性,与安全调试、生命周期和 IVT 身份验证等功能密切相关。通过配置ADKP可以实现加锁调试端口,加锁方式如下:可以直接编写程序烧录ADKP,或者通过HSE进行配置。
  2. 生命周期需要配置到CUST_DEL之后的生命周期(OEM_PROD、IN_FIELD等),调试端口可基于ADKP的配置进行保护。生命周期配置到进入下一阶段之前,确保ADKP已配置。

安全调试辅助工具 SDAF

NXP提供了对应的安全调试辅助工具(Secure Debug Assist Firmware, SDAF),支持用户在IAR Embedded Workbench for Arm中实现静态和动态身份认证。该工具可用于密钥派生、加密封装、UID管理等关键操作。

SDAF支持如下功能:

  • 利用芯片UID派生ADKP密钥
  • 封装ADKP(支持RSA-2048加密)
  • 将封装密钥注册至本地数据库

SDAF工具与IAR调试脚本配合使用,以实现身份认证流程。SDAF工具可以在NXP S32DS的安装目录中找到,更多关于SDAF工具的信息请咨询NXP。

安全调试(静态认证)操作流程

    开发环境: IAR Embedded Workbench for Arm v9.60.4 + I-jet 硬件调试器

    1. 准备工作:
      a)    调试端口已加锁的NXP S32K3 MCU
      b)    获取UID:在调试选项界面配置--macro_param vlk_path="C:/NXP/S32DS.3.5/S32DS/tools/S32Debugger/Debugger/Server/CCS/bin"即配置SDAF工具的路径,然后直接启动调试,身份认证失败后会退出调试,但在Debug log中有打印UID信息。  (只有With UID Diversified情况下,需要进行这步操作) 

    c)    获取ADKP。ADKP为认证密钥,一般由安全人员保管。本示例的ADKP为0x00112233445566778899AABBCCDDEEFF

    2.使用SDAF工具(需要使用admin权限操作SDAF工具),通过volkano_utils.exe的derive_adkp命令,用芯片 UID 来派生 ADKP。(只有With UID Diversified情况下,需要进行这步操作)

    3.在Debugger选项中,按下图格式输入密钥,本示例中:
    a)    Without UID Diversified模式: 密钥为0x00112233445566778899AABBCCDDEEFF
    b)    With UID Diversified模式: 密钥为上一步所生成的派生后的ADKP,本例为 0xB61A47A672A895E0F384EA32EBD99626

    4.启动调试后,在连接内核时,会调用调试脚本的函数_ExecDeviceCoreConnect() -> _authentication() ->_key(),将密钥写入相应的寄存器。

    5.密钥写入后, _authentication()函数检查是否JTAG调试已开放,如已开放,则继续调试,否则退出调试。

    总结

    本文主要以静态认证为例介绍了如何在IAR Embedded Workbench for Arm中实现NXP S32K3的安全调试。NXP S32K3的动态认证安全调试也已经在IAR Embedded Workbench for Arm中实现。

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
    如若转载,请注明出处:http://www.pswp.cn/bicheng/93702.shtml
    繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93702.shtml
    英文地址,请注明出处:http://en.pswp.cn/bicheng/93702.shtml

    如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    Vue实例中的其他属性【5】

    目录1.计算属性:1.概述:2.语法特点:3.案例:案例1:案例2:案例3:4.总结:5.get函数什么时候执行?6.注意:2.监视属性:1.概述: 2.用法:1.监…

    C++入门自学Day11-- String, Vector, List 复习

    往期内容回顾 List类型的自实现 List类型(初识) Vector类的自实现 Vector类(注意事项) 初识Vector String类的自实现 String类的使用(续) String类(续) String类(初识&…

    JavaScript性能优化实战(三):DOM操作性能优化

    想象一下,你正在精心布置一个豪华蛋糕(你的网页),每次添加一颗草莓(DOM元素)都要把整个蛋糕从冰箱拿出来、放回去(重排重绘),来来回回几十次,不仅效率低下&am…

    【力扣】面试经典150题总结02-双指针、滑动窗口

    1.验证回文串(简单)用toLowerCase()转为小写字母,然后前后指针向中间进行比对。2.判断子序列(简单)两个指针一个指向长字符串,另一个指向短字符串。匹配就都1,不匹配就将长字符串指针1。长字符串…

    MQ迁移方案

    以下是完整的MQ迁移方案设计,涵盖同构/异构迁移、零丢失保障、灰度切换等关键环节,适用于Kafka、RabbitMQ、RocketMQ等主流消息队列:​一、迁移方案选型矩阵​​场景​​适用方案​​技术实现​​优缺点​​同集群版本升级​滚动重启 协议兼…

    RAG 分块中表格填补简明示例:Markdown、HTML、Excel、Doc

    表格填补是RAG分块中常见的需求,但不同格式的表格处理方式有所不同。本文将对 Markdown、HTML、Excel 的合并单元格进行说明,并给出 Python 示例,演示如何解析和填补。1. Markdown 表格Markdown 只能用空值表示合并单元格。(只有列…

    IDEA创建一个VUE项目

    由于新手学习VUE,所以使用手动初始化项目 步骤: 创建项目文件夹:在 IDEA 中点击 File > New > Project,选择 Empty Project,指定项目路径。初始化 npm:在终端中:npm init -y安装vue&#…

    Chrome插件开发实战:todoList 插件

    以下是一个适合小团队自用的 Chrome TodoList 插件开发示例,包含基础功能(增删改查、本地存储、统计)和简洁的交互设计。代码结构清晰,适合新手学习或快速上手。 一、项目准备 创建插件项目目录 todo-list-extension,…

    【Redis数据库开启SSL加密】【小白指南】【生产环境可用】附带Docker服务器配置和python连接Redis数据库代码(加密通讯版)

    【Redis数据库开启SSL加密】【填坑指南】附带服务器配置和python连接测试代码 本教程转为小白提供设置Redis安全访问,自签名证书进行安全访问你的Redis数据库,轻松实现安全访问和保护数据库不被非法入侵。 本文原创,转载请注明出处&#xff0…

    笔记本电脑键盘失灵【已解决】

    配置环境硬件详情笔记本电脑联想拯救者y7000 2019 PG0(已更新为win11)外接键盘colorful ckb-p100问题今天笔记本开机后,进入登录页面输入密码,突然发现笔记本自带键盘(我通常不用外接键盘)的键失灵了&#…

    postgresql运维问题解决:PG集群备节点状态异常告警处理

    小亦平台会持续给大家科普一些运维过程中常见的问题解决案例,运维朋友们可以在常见问题及解决方案专栏查看更多案例 问题概述: 故障: pg数据库备节点状态异常现象: 一般为集群间心跳超时导致,现象为集群有fail-count失败数告警&…

    Maven 开发实践

    文章目录1. 搭建私服(windows)2.上传依赖3.多个远程仓库配置4.其它1. 搭建私服(windows) 软件下载 https://help.sonatype.com/en/download.html修改端口 etc/nexus-default.properties启动程序 管理员身份进入进入bin目录下执行.\nexus.exe /run创建Ma…

    设计心得——如何架构选型

    一、架构的作用 可能对于很多的公司,其实架构本身的重要性并不大。大家一定明白这回事,架构在实际的开发,在大多数的场景下其实用处并没有书籍和资料中讲的那样重要,甚至是可有可无。这样讲是不有些可笑?是不是觉得挺意…

    vba学习系列(12)--反射率通过率计算复杂度优化25/8/17

    系列文章目录 文章目录系列文章目录前言一、反射率通过率1.整体通过率2.整体通过率3.客户工艺匹配4.机台通过率分析5.镜片通过率罩次分析分析1.1分析1.26.镜片通过率圈数分析分析1.1分析1.28.镜筒通过率圈数分析分析1.1分析1.29.镜筒通过率罩次分析分析1.2总结前言 一、反射率通…

    Microsoft WebView2

    运行效果 代码如下 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Form…

    GitCode 疑难问题诊疗:全方位指南

    一、问题诊断与解决框架1.1 通用问题排查流程在面对 GitCode 问题时,遵循一套科学的排查流程至关重要。首先,详细记录问题出现时的具体操作步骤与相关报错信息,这有助于精准定位问题根源。例如,若在执行git push命令时出现错误&am…

    AMD Ryzen AI Max+ 395四机并联:大语言模型集群推理深度测试

    本文介绍使用四块Framework主板构建AI推理集群的完整过程,并对其在大语言模型推理任务中的性能表现进行了系统性评估。该集群基于AMD Ryzen AI Max 395处理器,采用mini ITX规格设计,可部署在10英寸标准机架中。 Jeff Geerling大佬还开发了名…

    深度学习·GFSS

    GFSS General Few-Shot Segmentation 任务实现方式与zero-shot有所不同本篇论文只涉及同一个模态(图像),训练过程中,novel class有几个图像提供,提供k个就称之为k-shot。先从图像中提取class prototype,然后这个原型向量作为查询&…

    Transformer架构的数学本质:从注意力机制到大模型时代的技术内核

    系列专栏推荐:零基础学Python:Python从0到100最新最全教程 深入浅出讲解神经网络原理与实现,从基础的多层感知机到前沿的Transformer架构。包含完整的数学推导、代码实现和工程优化技巧。 写在前面:为什么理解Transformer如此重要…

    最新微信小程序一键获取真实微信头像和昵称方法

    使用公开免费插件,快速实现获取用户头像和昵称,已附uniapp、微信开发工具开发详细教程。前言为了保护用户隐私,wx.getUserInfo、wx.getUserProfile都没法获取到用户头像和昵称了,只能通过设计用户主动选择/输入形式,操…