车联网安全基础(三)Secure Boot
1. 背景
1.1 Secure Boot介绍
在PC中,安全启动(Secure boot)是一种行业标准,旨在帮助设备仅使用原始制造商(OEM)信任的软件进行启动,当系统启动时,固件会检查每个启动软件的签名,防止非法软件的运行。
在车载信息安全中,安全启动是指在整车各个ECU的启动阶段做好安全确认和校验,以预防针对车载芯片的两种攻击。
代码被恶意更改或攻击
代码IP被非法读取或获取
1.2 应用背景
随着智能驾驶、智能座驾的发展,车辆内部ECU之间不仅可以通过总线技术通信,还可以通过V2X技术与车外设备通信。为了保证ECU中程序的安全,安全启动技术开始兴起。
目前多使用硬件安全模块(如HSM、HSE)来简化对芯片上代码加密和启动代码验证的工作,具备安全启动技术的HSM芯片,会利用芯片上OTP区域内存储的用户密钥信息对即将加载的软件进行多级安全验证,从而建立起可靠的安全信任链。
OTP区域是芯片上的一块区域,一般用于存储用户密钥信息,其原理与保险丝一致。芯片在出场后,OTP区域所有bit为1,当某个bit位被烧写为0时,就会彻底熔断该bit位,使其数值无法改变。也有一些芯片通过控制寄存器来控制bit位的值,其核心思想就是使某个内存区域的值无法改变。
2. Secure Boot实现
Secure Boot要实现的目标有两个:
保护软件版本IP,防止代码被篡改
解决信任问题,保证CPU加载的软件版本是由指定软件发布者发布的软件版本,而不是非法版本
通过对代码明文加密可以实现防止代码被篡改,而使用基于非对称加密的数字签名技术可以实现认证效果。
由于我对数字签名技术不太熟悉,这里着重学习一下数字签名的原理。
在安全启动过程中软件版本发布者可以使用RSA私钥来加密代码的信息摘要,生成数字签名,芯片则可使用对应的RSA公钥来对数字签名进行解密,从而验证版本的真实性。同时一旦验证,也具备不可抵赖性,因为只有软件版本的发布者才有私钥。
2.1 相关密码学知识
2.1.1 对称加密算法AES
AES作为一种对称加密算法,在加密和解密时使用同一个密钥,所以可以使用AES算法对代码明文加密,实现保护软件版本IP,防止代码被恶意篡改的目的。
在安全启动技术中,可以将代码明文用AES算法加密,然后将密文烧录到芯片的存储区,并将密钥烧录到芯片的OTP区。当HSM等安全硬件模块启动时,会将加密后的代码加载到内存中,并从OTP区读取AES密钥,将代码密文解密为明文。
2.1.2 哈希算法
哈希算法可以将任意一组数据变换为一组定长的数字指纹,该数字指纹也成为信息摘要,哈希算法具备两个特征:
加密过程不可逆:意味着无法从信息摘要逆向推算出加密前的明文内容
一一对应性:明文与信息摘要一一对应
在安全启动技术中,可以通过验证代码的信息摘要,来校验代码的完整性;也可以结合非对称加密算法,生成数字指纹,来实现认证工作。
2.1.3 非对称加密算法RSA
非对称加密算法拥有一对对应的公钥和私钥,可以使用私钥加密数据,再使用公钥解密数据。该技术可以应用在验证机制中。
2.1.4 数字证书
数字证书是一种权威性的文档,由证书签发机关(CA)签发的对用户公钥的认证,也称为“根证书”。数字证书的格式和验证方法需要遵循X.509国际标准,并包含以下内容:
电子签证机关的信息
公钥用户信息
公钥
有效期和数字签名等
2.2 实现策略
2.2.1 安全镜像文件生成
用户使用AES加密算法将代码明文转换为密文,并将AES密钥存储在OTP区
用户使用SHA256算法对代码密文进行哈希运算,得到该软件版本密文的信息摘要
用户生成包含密文信息摘要和RSA公钥信息的数字证书
用户使用SHA256算法对数字证书做哈希运算,得到数字证书的信息摘要,同时使用RSA私钥对数字证书的信息摘要加密,最终得到该用户的数字签名
2.2.2 安全镜像文件验证
芯片复位启动后,通过硬件加密模块如HSM或者HSE先对烧录在Flash中的X.509标准数字证书公钥信息进行哈希运算,并与提前烧录到芯片OTP区域的公钥哈希值进行比对,如果结果一致,那么则可以确认公钥的合法性,这个就是整个信息安全信任链的第一个环节,也是十分重要的环节
公钥合法性确认后,硬件加密模块如HSM或HSE再利用数字证书的数字签名进行用户合法性鉴权。具体操作步骤就是通过上述确认的公钥对数字签名进行解密处理得到证书的哈希值,同时针对存储在Flash芯片上的证书重新进行哈希运算,对比两个哈希值是否一致,如果一致,则鉴权成功,合法性得到了保障
然后再利用硬件加密模块如HSM或HSE来重新计算Flash芯片上存储的软件版本的哈希值,即信息摘要,并与数字证书的信息摘要进行比对确认是否一致,如果匹配则说明代码没有被恶意篡改, 用户软件版本的完整性与安全性得到了保障
芯片硬件加密模块如HSM或HSE最终利用OTP区域提前存储的AES对代码进行解密处理,从而得到代码明文,最终便可以正常加载到CPU中启动运行
如果上述任意一个流程没有通过,将不会进行后续流程的校验,系统将停驻在boot中。