实现实时动力总成硬件系统的安全引导
2019-06-26
0 前言
近年来,信息通信技术(ICT)已成为智能网联汽车发展的关键技术。然而,拥有ICT的汽车很容易受到黑客攻击。如果汽车系统因非法篡改而造成损坏,例如动力总成系统,汽车制造商(OEM)可能会在保修方面遭受巨大损失。这意味着汽车电气系统应实现软件的完整性,以及控制外部通信的访问权限。为了设计汽车安全系统,必须考虑机密性、可靠性和高性能,需要额外增加硬件,为此,相关机构已经定义了硬件安全模块(HSM)规范。为了校验软件的完整性,HSM使用了安全引导。执行安全引导过程需要额外的工作和时间,因此,在某些系统中执行安全引导可能无法满足系统要求。本文考虑发动机管理系统(EMS)的具体要求,并指出有效地实现安全引导的方法。
1 安全引导概念
1.1 安全引导定义
在汽车工业中,安全引导可以用来监控在每次引导时在非易失性存储区中软件的可靠性和完整性。安全引导过程由安全硬件扩展(SHE)标准[1]定义。
1.2 安全引导操作
在每次重置/起动后,安全引导将检查一定数量的应用软件代码,然后才允许主CPU执行。根据选择的密码算法,安全散列算法(SHA 2)不需要初始密钥,而高级加密标准(AES)128 MAC算法需要两个重要组件来进行安全引导操作,即MAC密钥和MAC种子。在安全引导的初始化阶段,第一步是检查是否存在有效的MAC密钥,以便使用其在存储区区域生成MAC。下一步是检查MAC值是否已存储。如果MAC值存储在闪存的安全部分,则最后一步是将计算的MAC与存储的MAC进行比较,以校验已定义存储的区域。如果MAC值在安全的闪存分区中为空,则将赋予其计算的MAC值。图1为安全引导的简化流程[2]。
图1 安全引导流程
1.3 前台和后台安全引导
本节探讨不同类型的安全引导,包括前台和后台安全引导。设备启用时,前台安全引导过程迫使CPU处于等待状态,直到完成安全硬件引导程序的校验。这一步完成后,将CPU的控制交给应用程序继续初始化。另一方面,后台安全引导过程允许引导程序的校验与应用程序初始化并行[2]。前台和后台安全引导之间的区别仅仅表现在当SHE软件将确认消息发送回CPU时所发生的等待时间(图2)。
图2 前台安全引导
SHE软件可以在引导程序所在的存储区区域完成校验操作之前或之后向CPU发送确认消息,这与前台和后台模式不同。SHE软件确认消息为“释放用户代码”,这表示CPU可以继续其操作。
在前台安全引导的情况下,应用程序只能在完成对引导程序存储区区域的校验之后才能启动。如果用户希望一次校验更大的存储区区域,则需要更长的处理时间完成校验。这是一个重要的考虑因素,可以选择安全启动模式实现。
图3 后台安全引导
在后台安全引导的情况下,其优点是CPU可以在已定义存储区里的校验操作完成之前启动。这是因为应用程序的初始化与引导程序校验并行进行。这与前台安全引导不同,其所需时间更短,因为CPU不需要等待完成存储区校验(图3)。
2 EMS初始化时间要求
一般整车厂要求ECU在50 ms内接收CAN总线信号,并且必须能够在启动后100 ms内发送出去。否则,这将导致错误信息传递到其他ECU中。在EMS系统中,喷油和点火必须考虑发动机的快速同步。
2.1 发动机起动同步
EMS是一种控制发动机上一系列执行器以保证发动机性能最优的系统。发动机同步必须精确控制燃油喷射和点火正时。发动机同步是利用曲轴信号和凸轮轴信号确定当前发动机位置的过程。通常,为了实现发动机同步,必须检测出曲轴缺齿信号。图4给出了具有60-2齿曲轴信号的四行程发动机的同步时间点[3]。
图4 具有60-2齿曲轴信号的四行程发动机同步
2.2 任务调度
EMS启动后,先执行初始化任务,然后进行任务调度。对于EMS中的任务调度,采用了抢占式调度和协作式调度相结合的方法。在图5中,同步任务每180°CA生成一次,属于抢占式调度类型[4]。
图5 EMS系统调度程序层次图
图4和图5所示在没有发动机同步的情况下,EMS无法找到正确的发动机位置。这意味着EMS不能正确控制燃油喷射和点火时刻。例如,如果初始化任务时间过长而导致缺齿检测延迟,则不得不在发动机转1圈后再检测缺齿。在四行程发动机系统中,这意味着错过了2次燃油喷射和点火。
2.3 发动机运行模式和任务执行
图6 发动机运行模式和任务
如图6所示,通常基于扭矩模型的EMS具有5种工作模式[5]。在正常情况下,初始化任务在“上电”过程中进行。发动机同步在“起动”过程中执行。然后,EMS才能开始控制喷油和点火。
2.4 严重故障情况下的系统初始化和发动机同步
ECU中发动机处理器可能面临不同类型的软、硬件故障。这些故障可能导致模块的错误动作,在大多数情况下,以及汽车符合ISO 26262《道路车辆功能安全标准》的支持下,可以被检测并可被化解为安全故障。检测到的永久性硬故障会导致整车厂不愿看到的“字段返回”信息。该故障通常不易被检测到,因为根据汽车质量标准,零部件缺陷率<1 dpm(每百万次缺陷)。另一种不同的故障是软故障,例如,由于环境中α辐射等因素,导致静态随机存取存储器(SRAM)变量内容出现故障。软故障可以通过重新起动模块修复,例如通过重置和SRAM重新初始化。为了从严重故障情况下恢复到正常状态,ECU能尝试执行复位。对于发动机系统,即使在发动机运行过程中发生系统复位,EMS也不应使发动机停机,即发动机应该继续运转。这意味着在系统复位后,系统初始化应尽可能迅速,发动机同步后应立即启动燃油喷射和点火。这是因为两次喷油和点火都错过了。因此,如果缺齿一次,可能会使发动机在怠速状态运行时失速。
在图7中,初始化后可以进行CAN总线信号接收和发送[3]。大多数整车厂要求ECU必须准备好在50 ms内接收CAN总线信号,并且必须能在发动机起动后100 ms内发送出去。这意味着初始化必须在50 ms内完成。
图7 在发动机运行期间系统复位的可能场景
3 安全引导序列策略
安全引导是基于定义的存储区容量计算基于密码的消息身份校验代码(CMAC),并使用存储的CMAC值校验其计算的CMAC。在当前系统中,计算100 K字节CMAC需要4 ms。只有在成功执行此校验时,才允许主机CPU将此代码作为可靠的软件进行执行,并确认其完整性。在SHE标准中,如果HSM在引导过程中检测到故障,那么引导过程就被认为是已受到干扰,并且会导致密钥无法访问或调试被禁用。在汽车动力总成系统中,正如上文所述,需要快速的发动机同步和快速的CAN通信准备。尽管由于各种原因可能造成严重错误,但不能出现发动机熄火,CAN总线模块必须在系统复位后的短时间内准备接收信号。基于这个原因,安全引导的执行时间应该尽可能短。CPU和HSM中调度器层次见图8。
图8 CPU和HSM中调度器层次
为有效并高效地起动安全引导,建议在安全引导的设计中采用前台模式和后台模式相结合的方法。例如,在执行关键存储区时,应使用前台模式,然后才允许主机CPU执行这个特定的引导块。在其他存储区中,例如应用程序初始化,应使用后台模式,并根据优先级的使用情况将校验操作划分为不同的区块。存储区优先级的分配取决于重要性和方法,CMAC校验应该在后台模式下执行。
3.1 安全引导任务设计
HSM将检查前台模式下引导代码的完整性,见图9。安全引导代码将在后台模式下对其他应用程序存储区启动完整性检查。检查结果将在每个应用程序存储区校验后从HSM传递到CPU。在应用软件启动后,CPU对完成检查的结果进行统一处理。全部复位之后,主机CPU上的引导ROM区内的启动软件将启动HSM。复位的类型包括所有可能,例如硬件复位和软件复位。主机引导代码正式启动前,HSM将检查主机启动代码的完整性,主机启动软件将等待检查的结果。当主机接收到来自HSM“通过”的结果时,将开始执行引导代码。之后,主机将向HSM发送一个命令,以对其他存储区执行检查。最后,HSM将根据分配的优先级计算其他存储区的CMAC,并将结果值返回给主机CPU。此时,主机上的任务不受HSM的影响。
图9 具有前台模式和后台模式的混合安全引导概念
3.2 对存储区分配和访问的考虑
为实现安全引导,应考虑存储区分配和访问优先级。在后台模式安全引导的情况下,逐区检查CMAC优于一次性检查整个存储区。因此,应该对存储区进行划分和排序。在使用多核系统的情况下,每个存储区将通过仲裁优先处理多个CPU的访问权限。
3.3 存储区分配
如上文所述,HSM将在应用软件起动过程中计算存储区的CMAC。根据汽车开放系统架构(AUTOSAR)的体系结构、软件用途,以及任务优先级,对存储区进行了划分。
图10展示了4个存储区,控制算法区、诊断区、驱动软件区和复杂驱动区,都符合AUTOSAR体系结构[6]。
图10 AUTOSAR软件架构
图11显示了存储器块的优先级顺序,优先级表示CMAC校验的顺序。对于EMS,发动机快速同步和CAN通信快速准备应该具有最高优先级,并且应该是被校验的首要存储区,遵循了复杂的驱动程序和系统服务代码。最后校验诊断代码,因为其重要性相对最低。因此,可以根据系统配置文件定义检查顺序。
图11 存储区结构和优先级
3.4 多核存储器访问优先级
图12 多核与HSM架构
如图12[8]所示,在多核概念中,CPU和存储区通过共享的交叉开关总线连接。当多个CPU访问特定的存储区区域时,每个存储区将通过仲裁优先处理多个CPU的访问权限。HSM通过防火墙接口和桥接器连接到共享交叉开关总线。防火墙接口阻止CPU对HSM的访问。从桥接到闪存的总线访问也需要像其他CPU一样进行仲裁。在图12中,引导代码和应用程序代码存储于闪存模块,是校验的重要目标。由于发动机同步和正常驱动是第一位的,因此对闪存模块的CPU访问权限应高于连接到HSM的桥接器访问权限。
4 缺陷
作为除引导代码之外的其他应用程序存储区,在应用程序起动期间以后台模式执行安全引导,这些代码的某些部分可能在未完成完整性检查的状态下被执行。因此,应该仔细研究讨论被执行代码完整性失效的策略。如果需要执行特别的需求,这些需求必须由客户明确定义和排序。
5 结论
探讨了如何在EMS中实现安全引导。特别是EMS在发动机运行过程中的复位情况,展示了安全引导在快速CAN通信启动和快速发动机同步中的有效应用。一些整车厂正在使用控制保护模式,每5~10 min检查一次主机主存储区(PFlash)。因此,在这种模式下,不需要前台安全引导。为了实现带安全引导的软件更新(SOTA),需要研究一种集成策略。