VBF(Versatile Binary Format)是一种二进制文件格式,是软件释放的一种格式,与HEX,S19文件类似,只是一种文件格式。
其主要由三部分组成:Version,Header 和 Data。

Version Number Text vbf_version=2.6|
Header Text ASCII
Data Block 1 Start address 4 bytes,binary
Length 4 bytes,binary
Data n bytes,binary
Checksum 2 bytes,binary
Data Block 2 Start address 4 bytes,binary
Length 4 bytes,binary
Data n bytes,binary
Checksum 2 bytes,binary
Data Block n Start address 4 bytes,binary
Length 4 bytes,binary
Data n bytes,binary
Checksum 2 bytes,binary
  1. Data段

先说Data段,Data段是由多个Block组成的,Block中的Data就是有效数据,是需要被刷到Flash里面。这么多个Block中有一个Block是VBT(Verification Block Table),VBT里面存放的是其他Block的Hash数据。
VBT的Data:
0000
format identifier(SHA-256)
0002 data block的个数
00060000 start address
00000013 length
D78ECD62C62C…2262 Hash
00060100 start address
0001EF00 length
E6027B3F959F…4188 Hash

  1. Header段
    再说Header段,Header段的格式是ascii,所以用notepad打开也可以看到。Headr段里面定义了VBF的属性。一些关键的属性:
    2.1 sw_part_number
    零件号
    2.2 sw_version
    版本号
    2.3 sw_part_type
    表示此VBF包的类型,SBL,EXE,或者是DATA等
    2.4 ecu_address
    ECU的物理目标地址,在诊断调查表里面会写明,一般由4个数字组成,后两个数字与诊断ID后两个数字一样。
    2.5 erase
    VBF中每个Block需要擦出的Flash起始地址和长度。
    2.6 call
    VBF的类型是SBL时,是必填的,就是SBL的起始地址。
    2.7 verification_block_start
    VBT的起始地址
    2.8 verification_block_root_hash
    root hash是很重要的,计算的是未压缩的VBT信息的Hash值。
    Root hash = SHA-256 (VBT startAddress || VBT length || VBT data)
    2.9 sw_signature_dev
    后缀dev的意思是,这个值是此VBF加研发签后生成的签名值,研发签名值= RSA(root hash + dev private key)。Tier1在转换VBF的时候,使用研发私钥给VBF加签,研发私钥由OEM给出,研发私钥对应的解签用的研发公钥也是由OEM给出,研发公钥固化在MCU内部。在刷写MCU时,刷写流程中的Check Memory会附带研发签名值的明文,MCU收到签名值后,结合研发公钥 和 已经刷到Flash的数据一起,验证刷写文件的完整性和合法性。
    Tier1将加了研发签的VBF释放给OEM后,OEM会再加一个生产签 sw_signature,也就是说一个VBF文件会有两个签名值,即一个研发签名值,一个生产签名值。生产签名值=RSA(root hash + private key),其中生产私钥只有OEM自己知道。在整车下线时,对应的生产公钥会通过DID写入,MCU在收到生产公钥后,将生产公钥存到受保护的区域(例如HSM的数据区等)替换掉研发公钥。在Check Memory时,MCU不再使用研发公钥验签,而使用生产公钥验证传入的签名值。这样就可以保证在整车下线后,Tier1或者其他不知道生产公私钥的相关方不能私自更新软件。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐