先来了解一些名词:
哈希函数(Hash Function):可将任意长度数据转化为指定长度摘要(e.g. SHA2安全哈希函数,MD5)
对称加密(Symmetric Encryption):用同一把密钥对数据进行加解密(e.g. DES,AES高级加密标准)
App可执行文件是一个二进制文件,可以把App的可执行文件作为哈希函数的输入,会得到一个固定长度的哈希值(Hash Value),这里就不得不提到哈希函数的一个特点,哈希函数的输入值改变会影响输出值,而且是极大的改变,哪怕是输入值的一位(Bit)数据被改变。设想,使用哈希函数把汽车厂商的正版软件作为输入得到一个哈希值,并把其保存起来,黑客得到了汽车厂商的App并对其修改,然后想让汽车运行他修改过的软件,Bootloader在启动安全启动时,对修改后的App的再做一次哈希,发现与先前的值截然不同,也就不会启动带有风险的App。这就保证了软件的整体性。
但这还不够,哈希函数的实现方式是公开的,汽车厂商可以正常的App生成一个哈希值H1存放起来,那么黑客也可以生产一份经过修改的App的哈希值H2替换之前的H1, 并把修改后的App刷入汽车中,这样Bootloader启动时发现保存的哈希值H2和即将要运行的App(经过修改的)一致,则会正常运行。就可以骗过安全启动的验证,达到运行修改后App的目的。解决这一问题,这就要提到另一个技术——一次性可编程(One Time Programmable, OTP),这是单片机的一种存储器类型,其作用是程序烧入单片机后,将不可再次更改和清除,汽车厂商可以将自己App所生成的哈希值存储到这样的存储器中,就可以保证经过安全启动验证的App一定是汽车厂商所提供的,这块区域也不可能被篡改。
这里可以使用数字签名(Digital Signature)技术,可以采用非对称加密算法,利用私钥(Private Key)对汽车厂商App的哈希值进行加密生成一个签名保存起来,签名只能用公钥(Public Key)才能解密,签名解密后是一串哈希值,我们就可以用这个哈希值和即将要启动的App的哈希值进行比较。这样看起来就好了很多,在OTA升级时,利于数字签名技术对将要升级的App进行完整性和可信度验证,确保将要升级的App没有被篡改并且确实来自于汽车厂商(汽车厂商利用私钥加密,汽车软件升级验证时用公钥解密),然后将签名写入FLASH某个区域(不需要OTP特性)。那么公钥放在那里呢?前面提到的OTP又派上用场了,这块区域就可用来存储和汽车厂商成对的公钥。
当然也有采用基于分组密码的消息认证码算法(Cipher-based Message Authentication Code,CMAC)的方案进行安全启动的验证,其目的是相似的,只不过使用的方法不同。
SHE顾名思义,是对MCU的扩展,它主要提供类似于OTP的存储空间,并不能为主核提供硬件加速,结构图如下:
HSM就强大得多,拥有自己的CPU,并且有类似OTP的安全存储区域,其结构如下:
目前,大多数高端车规级芯片都会集成SHE和HSM,国外芯片厂商有ST、NXP、infineon等,国内芯片厂商有芯驰、地平线、黑芝麻等,比较常见内嵌HSM模块的芯片有意法半导体的SPC58、英飞凌的Trave系列、芯驰的G9X。
汽车信息安全技术也在不断进步,国内外汽车厂商都在努力做出安全可靠的汽车软件。相关外企研发出HSM模块,并嵌入加密算法、访问控制、完整性检查等技术到汽车控制系统,但是目前HSM仍然不支持国密算法,存在技术壁垒,未能实现国产自主可控。国内对于芯片集成安全硬件还不完备,此种情况下能有一款支持国密标准的国产汽车硬件安全模块对国内汽车行业十分重要。国密算法是我国自主研发创新的一套数据加密处理系列算法,随着我国智能汽车信息安全的要求,需要将国密算法嵌入到硬件加密芯片中结合使用。
最好的情况就是,能在芯片层面保证安全启动的方案和App软件都是自主可控,这样就可以最大程度的保证人和汽车的安全。