网联汽车OTA升级全加密型升级包代码签名方案
-
项目组开发者通过向CAMS提交证书申请请求,请求信息包括公司名称、公司地址、开发者信息等(由于开发者证书,不用参与证书链的信任机制,因此实际工程中,可以是自签名证书)
-
CAMS向项目组开发者颁发证书,即代码签名证书(公私钥对)。
-
项目组开发者通过HASH算法计算固件代码的hash摘要值。
-
使用代码签名证书的私钥加密hash摘要值以获得hash摘要值的数字签名。
-
项目组开发者使用预共享密钥加密固件代码和证书公钥,然后将固件代码+代码签名证书密文、hash摘要的数字签名一起打包下发。
-
项目开发者发布全加密型升级包至CDN。
-
车机端ECU使用预共享对称密钥解密出固件代码和证书公钥,获取升级包中的原始固件代码后,重新计算hash摘要值。并使用公钥解密数字签名,以获取数字签名的明文即OTA下载前的固件代码的hash摘要值。这样,计算获取的两个hash摘要值如果完全匹配,则代码签名认证成功,否则失败。
车端OTA升级前预共享密钥获取流程
1.1.1 预共享密钥在云端的设置
-
OTA云端自定义设置预共享密钥,并保证其安全性,比如权限管控和使用KMS密钥管理系统监控其读取、更新和删除等情况。
-
预共享密钥每次版本升级时,应重新设置,以防止密钥泄露带来的安全威胁。
1.1.2 预共享密钥在车端的获取
前置条件:
-
云端已经设置了预共享密钥。
-
车端ECU和云端服务器使用同一个CA服务器签发证书,并各自保存了CA根证书。
-
车端从CDN中获取升级包后,即可进入获取预共享密钥流程。
- OTA车端读取ECU中的公钥,根据股份申请证书的流程,车端将安装并存储证书,一般车端ECU的证书存储在HSM中,OTA车端只要从HSM中获取公钥即可。
- OTA车端发送ECU公钥给OTA云端,由于公钥的可公开性,可明文传输。
- OTA云端获取ECU公钥后,使用CA根证书验证其合法性,并保存在内存中。
- 云端发送云端公钥给车端,同样,云端公钥的可公开性,此次报文可明文传输。
- 车端使用CA根证书验证云端公钥的合法性。
- 车端发送预共享密钥GET请求,使用云端公钥加密ECU公钥信息、SN、UIN和随机数。
- 云端使用云端的私钥解密请求报文,获取ECU公钥后,与3)步骤中的ECU公钥比对,若匹配成功,绑定SN、UIN的对应关系。
- 云端发送预共享密钥报文,使用ECU公钥加密预共享密钥、SN、UIN和随机数。
- 车端获取预共享密钥报文后,使用ECU私钥解密,比对SN、UIN和随机数,若匹配成功,即获取预共享密钥
- 车端使用预共享密钥进入固件验签流程。
0
