MCU如何安全启动以及安全启动的信任链如何建立

电子说

1.3w人已加入

描述

随着汽车智能化的发展,车辆已经成为万物互联的一部分。我们知道,不管何种终端设备,一旦联网,就存在着信息泄露的风险。自然,车辆也不例外,一旦车辆联网,那么,车辆就有被黑客或者第三方攻击、截获信息的风险。因此,车辆信息安全,已成为车企关注的焦点。本文,主要讨论MCU如何安全启动(Secure Boot),以及安全启动的信任链如何建立。

1、安全启动

讨论汽车信息安全的话题,绕不过"安全启动"的讨论。所谓安全启动就是确保每一个可执行程序都是可信的、没有被篡改的。目前,针对安全启动的方案有硬件(eg:HSM,Hardware Security Module)启动方案、软件启动两种方案。本文主要讨论基于HSM的硬件实现方案,不管哪种方案,"信任根"和"信任链"是所有安全启动设计中,不可规避的两个点。

(一)信任根

既然要安全启动,那么,启动总得有一个起点,而这个起点需要无条件信任,即:信任根。信任根必须具有不可攻破性,它可以是一段固化的程序或者硬件。以TC3xx为例,信任根是BootRom(也称为固件)。

(二)信任链

有了信任根以后,就可以从信任根开始,展开软件程序的逐级验证。工程中,常见的信任链验证方式如下:

cpu

如上图,从芯片加电开始,程序从信任根开始执行,逐级的验证下一级程序,只有每级程序验证通过才能启动下一级程序,以此确保每个程序是安全的、可信的。

一般来说,程序可分为"安全启动程序"和"用户程序"。两者的CPU可以使用相同的内核架构,也可以使用不同的内核架构。一般,两者属于核间通信(Inter-Processor Communication)。

如上安全启动方式有一个不足:由于采用逐级验证方式,启动时间过长。如果OEM(Original Equipment Manufacturer)有严苛的启动时间要求,则这个方案很可能不能满足要求。

所以,工程上的另一种安全启动方案:"安全启动程序"和"用户程序"并行启动,如下所示:

cpu

并行启动方案虽然可以缩短启动时间,但是,并行启动方案有被篡改用户入口程序地址的风险(如果用户程序入口存放在BootRom,几乎不可能修改)。所以,为了兼顾启动时间和安全性,工程上还有另一种方案:对程序采取部分校验的方式,缩短启动时间的同时,兼顾一定的安全性。

2、验证内容及验证方法

(一)公钥存储

信任链的校验自然脱离不了密码学的方法论,而密码学又和密钥紧密关联。工程上,不管程序刷写还是程序启动,均需要使用公钥验签,所以,加强公钥的保护,至关重要。如果公钥被第三方识别和替换,那么,第三方即可通过配对的私钥伪造签名信息,进而"为所欲为",信息安全也不复存在。

我们知道,在车辆下线时,OEM会在产线端分配根公钥(也就是产品公钥),产线刷写时,车辆不连接网络,也就不存在被网络攻击的风险,因此,根公钥的刷写是安全的(PS:不考虑异常断电场景)。一般来说,根公钥可以刷写到HSM专属的OTP(One Time Program)存储区,此区域,不允许Host端访问。如果根公钥对应的算法是RSA-2048、RSA-3072等,根公钥的长度较长,所以,工程上,常存储根公钥的哈希值,通过校验根公钥的哈希值,确认根公钥的完整性

(二)级联校验内容

级联校验内容及时序如下所示:

cpu

首先,安全启动程序(eg:HSM)通过计算User Bootloader中的根公钥,得到根公钥的Hash Value,如果与HSM中的根公钥Hash Value比对一致,则校验通过,之后,HSM通过根公钥得到User Bootloader+App Public Key Hash Value签名信息,如果与User Bootloader中的签名信息一致,则校验通过,程序可以进入User Bootloader程序。

User Bootloader+App Public Key Hash Value验证通过,则说明User Bootloader中的App Public Key Hash Value完整。User Bootloader通过指定地址找到App Public Key,进一步计算Application程序中的Application Public Key Hash Value,如果一致,则Application Public Key可以用于验证User Application,如果两者的Application签名信息一致,则验证通过,程序完成安全启动。

拓展思考:程序第一次烧录时,HSM中没有根公钥的Hash Value怎么办?答:程序启动时,如果发现HSM没有根公钥Hash Value,则认为是首次启动,User Bootloader去指定地址获取Root Public Key,计算得到的Root Public Key Hash Value,并存储到HSM,之后,执行复位,重新启动程序,并进行验证。

   审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分