一、概述
随着汽车智能化程度越来越高,OTA已经是职能汽车的基础功能和标志性功能。OTA通常分为SOTA和FOTA,并且OTA过程中,通常涉及“云-管-端”三个环节。本文主要介绍一种在“端”上FOTA场景的信息安全部分,并涉及部分“云”和“管”上的信息安全内容。
二、总体流程
以“端”为核心的OTA信息安全简化流程如下:
- 主机厂在制作升级包的时候,需按照流程进行加密或验签等操作,确保升级包中包含了信息安全内容
- ECU查询到存在可用的升级包
- ECU需与车机交互,由用户授权进行下载和升级
- ECU访问OTA服务器,获取升级信息,此步骤基于mTLS实现
- ECU通过步骤3中的升级信息,通过单向TLS访问CDN,并进行升级包的下载
- 升级包下载成功后,ECU对升级包进行解密并验签,通过后即可认为升级包合法,进入升级流程
三、信息安全细节
在上述流程中,涉及信息安全的主要是TLS、加解密、验签等环节。用途如下:
- TLS:通过TLS协议解决双方的可信认证和传输安全。建立mTLS时,ECU和OTA Server分别会验证对方证书的合法性,通过此机制双方都是合法的,避免有攻击者冒充ECU或冒充OTA Server。后续传输信息基于TLS,也保证了信息的传输安全性
- 加解密:通过对升级包进行加解密,保证升级包的机密性。因为CDN是单向认证(实际也可以配置mTLS,即便是mTLS,也可以考虑对升级包加密),可能导致攻击者获取到升级包的CDN地址,即可进行下载。通过对升级包进行加密,使得攻击者即便知道CDN地址,下载的软件包也是密文,从而保护升级包的机密性。对升级包加密可有效保证升级包的机密性,但同时也带来一个问题:升级用时变长,因为升级包通常比较大,会导致解密过程耗时较多,进而导致整个升级用时变长
- 验签:验签主要保证升级包的完整性和真实性
3.1 TLS
TLS主要使用两种模式:双向认证mTLS、单向TLS。TLS原理都遵循RFC标准,以下做简单介绍
- mTLS:在三次握手时,ECU会验证OTA Server的证书,OTA Server也会验证ECU的证书。验证过程包含:a.用证书链验证证书 b.使用OCSP验证证书。以上两步都通过,才可判定证书验证通过。
a. 因OTA Server会验证ECU证书,因此需确保ECU具有证书和私钥。通常此证书和私钥在OEM产线注入,格式可选择P12等,其中私钥在ECU中需进行安全存储。
b. 因使用到证书链,因此ECU需具有证书链。此证书链可通常可在开发阶段提前预置,并且ECU需要确保证书链的不可更改性。 - 单向TLS:当服务端无法配置mTLS时,可配置单向TLS。单向TLS仅实现ECU对OTA Server的认证,OTA ServER缺少对ECU的认证,其他和mTLS一致
3.2 加解密
对升级包进行加密主要目的是保护升级包的机密性,但缺点是需解密操作,比较耗时(尤其在软件包较大时),因此是否对软件进行加解密应综合考虑。加解密通常使用对称算法AES(非对称速度更慢),可使用AES-CBC或AES-GCM等算法实现(具体实现可参考mbedtls移植之AES算法)。使用对称算法需要解决一个重要问题:对称密钥的机密性保护。通常此对称密钥不建议预置,因为采用预置的方式,密钥泄漏后难以更新已量产车的密钥。推荐在OTA时实时下发,简单点就通过mTLS在“请求OTA基础信息”时OTA Server下发到ECU。若想安全性更高,可以考虑采用数字信封方案。
3.3 验签
验签主要目的是验证升级包的完整性和真实性,验签在OTA过程中必须具有,否则攻击者可伪造升级包或篡改升级包后进行OTA,导致非法或非预期软件运行在ECU中。验签通常使用SHA256+RSA2048或SHA256+ECDSA算法(具体算法实现可参考mbedtls移植之RSA签名验签算法和mbedtls移植之ECDSA签名验签算法),验签过程简化图如下:
通常非对称的公私钥对由OEM生成和管理,私钥需严格保护,避免泄漏。公钥或证书可在OEM产线注入到ECU中,也可提前给供应商预置,ECU中的公钥或证书需具有不可更改性。若攻击者可篡改此公钥/证书,则会导致验签流程不可信。
四、思考
- OTA过程中需要信息安全的目的核心是保障升级包的完整性和真实性,因此最基础的需求是升级包需具有签名且ECU需对升级包进行签名验签。在此基础上,可扩展出更多信息安全需求,例如传输的安全性、升级包是否有必要保护机密性、相关证书/密钥等如何安全的传输和存储等。
- 应结合实际场景进行方案设计,例如有些ECU仅支持OBD刷写,那理论上ECU只要做签名眼前即可,其他环节的安全性不需要ECU参与。有些ECU支持OTA,但属于被刷件,那相关措施就需要在OTA Master上实施。
- 应建立PKI系统以便规范化的管理相关密钥、证书等。