信息安全,硬件Debug口,如何保护?

文摘   2024-10-20 08:50   上海  
做开发的小伙伴,应该知道:Debug Interface(调试口)对于软件开发至关重要。没有Debug Interface,好比“巧妇难为无米之炊”。但是,我们也知道:使用Debug Interface,也就意味着:可以最大程度的访问芯片资源、修改变量值、监控软件运行信息、下载软件等。所以,出于信息安全的考虑,在产品量产阶段或者下线(EOL,End of Line)时,Debug Interface需要进行禁用(disable)处理,如果不能禁用,则需要采取一定的防护措施,锁住Debug Interface,以防未经授权的第三方通过Debug Interface获取车辆信息,避免信息泄露。
本文,聊一聊Debug Interface的那些事。

1、Debug Interface的处理方式

对于Debug Interface处理,车辆下线(EOL,End of Line)时的处理方式,主要分为两种:Disable和Lock。

Disable:简单理解,一旦Disable(禁用)调试接口,调试器无法再通过调试口访问芯片

Lock:如果对Debug Interface进行上锁处理,则意味着Debug Interface还可以通过unlock的方式,重新使用。

2、调试接口

嵌入式软件开发过程中,调试的方式多种多样,使用调试器时,最常用的就是JTAG (Joint Test Action Group)接口和DAP (Debug Adapter Protocol)接口。当然,还可以使用串口(Serial Port)或者其他调试协议。调试连接示意如下:

使用JTAG还是DAP,需要看目标芯片支持哪种接口,一般来说,车规级MCU芯片均可支持JTAG、DAP。比如:TC3xx,其OCDS(On-Chip Debug Support)模块支持JTAG、DAP,示意如下:

提示:DAP和JTAG对应的Pin脚数量和间距会有所不同,因此,在PCB板设计中,两者的连接器(Connector)不一样,使用时需要区分。

(一)Lock什么

如上,我们一直在讨论Debug Interface,可是,Debug Interface到底是在锁存什么呢?答:锁存CPU。我们所讨论的关闭调试,本质是关闭对芯片内部CPU资源的访问,示意如下:

一般来说,一款芯片内部可能包含多种架构的Core,eg:TC3xx中包含Tricore Core、ARM Core(HSM)、XC800 Core(SCR)。所以,限制Debug,也就是在限制这些Core的访问。
Tricore Core、HSM Core对应的控制方式如下所示:

如上Debug接口的关闭和使能,可以通过配置对应的UCB(User Configuration Block)实现。

3、为什么Lock调试接口?

既然直接Disable调试接口最安全,为什么还要使用lock方式,锁住调试接口?我们知道,汽车是一个复杂的系统性工程,一辆汽车,几十到上百的控制器,让这些控制器完全按照理想状态工作,完全不出问题,很难做到。所以,当车辆出现问题,需要更高精度数据分析问题时,通过UDS (Unified Diagnostic Services)或者标定方式,往往无法获取高精度数据或者足够数据量,此时,就需要借助Debug Interface。所以,整车中,并不是每一个控制器都会Disable调试口。

4、Unlock调试接口的几种方式

(一)使用Password机制

使用password方式解锁调试口比较简单,即:输入正确的password,就可以正常使用调试口,这有点类似账号登录。但是,这里需要考虑password存放在哪里,以及如何存储的问题。

一般来说,使用password机制解锁调试口,可以将对应的password存放在ECU内部,但是,为了password的安全,需要设置password的长度尽可能长一些,eg:256bit。同时,password不能明文存储,需要加密后存储,每次使用时,先解密,再使用password加密处理示意如下:

(二)debug certificate

使用调试证书(debug certificate方式对使用调试接口的访问者进行验证,只有确保使用者的身份合法后,方可使能调试接口。既然使用证书,就需要对特定信息签名(sign),以便于ECU可以验签(verify)。选择什么信息进行签名呢?一般来说,需要签名的信息,只有证书发布者和证书接收的ECU知道(ECU内部提前存储),eg:ECU ID等。

证书解锁调试接口的方式如下:

使用调试口之前,需要先将debug certificate发送给ECU,之后,Secure Boot对debug certificate验签,如果通过,则解锁调试。
(三)应答机制
该机制类似诊断的请求/响应,即:调试接口使用者先发送请求,获取随机数(challenge),之后,调试接口使用者将计算的key发送给ECU,ECU校验计算的key是否一致,一致后,解锁debug interface。应答机制解锁调试口方式,示意如下:

在实际的工程应用中,该方案比较常见。

综上,本文讨论了如下几点:



谦益行
分享汽车研发日常,助力你我共同成长。
 最新文章