车辆网络安全开发笔记-Vector安全启动介绍-External Segment List
车辆网络安全开发笔记-Vector安全启动介绍-External Segment List
** 前言 **
安全启动和安全刷写都要对启动、刷写对象的签名进行验签,那么签名信息怎么算、格式是什么、以及存放在哪里?Vector针对以上定义了两种类型,一种是Internal Tag,另一种是External Segement List,这两种类型对应不同的算法、格式以及存储方式。本文主要介绍一下后者,后者可以用于多分区(比如A/B面),也可以用于单分区(Single Map),存储在Host核的Code Flash区域,不用像前者一样占用hsm核的Data Flash空间,也可以根据活动的分区(A面/B面)切换签名(Segment List)。
** External Segment List 格式 **


【图 -1】是格式定义,【图-2】为在实际的hex/s19文件中的体现。

Header:包含segment list Magic Pattern 和 Segment list Revision,前者为Vector定义的常量字符串,如【图-3】;后者允许客户自定义,每次验签通过,Revision都会被存储到secureboot group,用来防止非法降级,对应【图-2】的红色高亮。
SegmentList:
1. GroupId:为hsm定义的安全启动对象的序号,占用4个字节,对应【图-2】的绿色高亮GroupId = 0x0000000C;
2. n Segment:为启动对象包含多少个段,是Hex/s19文件里的Block数量,对应【图-2】的蓝色高亮n Segment = 0x0001;
3. Address、Length:每段的起始地址,分别占用4字节,对应【图-2】的靛蓝高亮,Address = 0x0080400,Length = 0x001CFC00
4. Mode:表示这段采用的启动方式,0为NONE,1是Parallel,2为Sequential,占用2字节,对应【图-2】的紫色高亮Mode = 0x0002;
5. Hash:为对此段数据的哈希值(Hash,占用32字节,对应【图-2】的紫色高亮0x0002)。
Signature Length:签名长度,占用4个字节,对应【图-2】的褐色高亮
Signature:签名,允许占用长度32字节到0xFFFF字节。
** External Segment List启动过程 **

【图-4】为External Segement List的启动过程
- 首先hsm会计算Segement中数据的Hash-0值
- 和Code Flash中存储的Hash-1进行对比
- 如果校验不通过,则对签名进行校验,如果签名校验不通过,则终止启动;如果签名校验通过,则重新对Segement计算Hash,并存储到HSM的secure boot groups对应的Dflash,至此,完成一个Segment的校验。如果存在多个Segement,则重复1~3,所有的Segement的Hash或签名的验证通过后,启动Host核,允许运行和访问校验通过的Code flash中的代码和数据。
** External Segment List签名制作 **
HexView支持制作External Segment List的内容制作,后续待更~
更多推荐



所有评论(0)