ATF官方文档翻译(二):Authentication Framework & Chain of Trust(身份验证框架和信任链)(2)

接上文翻译

3、信任链的具体实现

CoT就是按照一定的顺序将一系列镜像进行排列组合,这个顺序他们得按照这个顺序进行校验。每个镜像都有参数需要AM去校验,这些特性会在下面进行说明。
平台的接口是针对CoT的一个或者多个镜像数据。除非特定的,下面的数据结构就是按照PP中的描述。

3.1 描述镜像解析方法

对应特定的镜像解析有对应的方法。例如,身份验证映像可以采用X.509v3格式。引导加载程序阶段的数据镜像可以是原始二进制或者ELF格式。IPM支持三种解析方法。镜像必须使用以下三种方法之一。
IPL(库)负责解释单个解析方法。
平台使用的每个方法都必须有一个IPL。

1、原始格式:这种格式实际上是nop,因为使用这种方法的镜像被视为原始二进制格式,例如TF-A使用的引导加载程序镜像。此方法仅适用于数据镜像。

2、X509V3方法:该方法使用X.509等行业标准来表示PKI证书(身份验证镜像)。预计开源库将可用,可用于解析此方法表示的镜像(镜像得是这个格式得)。此类库可用于编写相应的IPL,例如mbed TLS中的X.509解析库代码。

3、平台定义的方法:该方法满足特定于平台的专有标准,以表示身份验证或数据镜像。例如,可以将数据镜像的签名附加到数据镜像原始二进制。可以在组合blob前面添加一个标题,以指定每个组件的范围。平台必须实现相应的IPL来解释这种格式。

以下枚举可用于定义这三种方法:
ATF官方文档翻译(二):Authentication Framework & Chain of Trust(身份验证框架和信任链)(2)_第1张图片
IPL必须提供具有以下原型的功能:
在这里插入图片描述
必须使用以下宏注册每种类型的IPL:
在这里插入图片描述
•_type:上述类型之一。
•_name:包含用于调试的IPL名称的字符串。
•_init:初始化函数指针。
•_check_int:检查函数指针的图像完整性。
•_get_param:提取身份验证参数函数指针

init()函数将用于初始化IPL。check_integrity()函数传递一个指向IO框架加载镜像的内存的指针和镜像长度。它应确保镜像的格式与解析方法相对应,并且没有被放大。例如,RFC-2459描述了X.509证书的验证序列。

get_auth_param()函数被传递一个参数描述符,该参数描述符包含关于参数的信息(type_desc和cookie),以从镜像中识别和提取与该参数对应的数据。这些数据将用于验证CoT序列中的当前或下一镜像。

CoT中的每个镜像将指定其使用的解析方法。IPM将使用此信息为镜像找到正确的解析器描述符。

3.2 描述身份验证方法(Describing the authentication method(s))

作为CoT的一部分,每个镜像必须指定一个或多个验证方法,用于验证。如“身份验证方法”一节所述,AM支持三种方法。
ATF官方文档翻译(二):Authentication Framework & Chain of Trust(身份验证框架和信任链)(2)_第2张图片
AM定义了身份验证方法使用的每个参数的类型。它使用这些信息来:

1.为IPM导出的get_auth_param()函数指定应对应的image中提取的参数。

2.调用CM和PP导出的验证函数时,正确处理参数。

3.从父镜像提取认证参数以验证子镜像,例如,为了验证证书镜像,必须从父镜像获得公钥。
ATF官方文档翻译(二):Authentication Framework & Chain of Trust(身份验证框架和信任链)(2)_第3张图片
AM定义了以下结构以识别验证镜像所需的认证参数。
在这里插入图片描述
平台使用cookie为IPM指定附加信息,使其能够唯一标识应从镜像中提取的参数。例如,BL3x镜像在其相应内容证书中的散列存储在X509v3自定义扩展字段中。只能使用OID标识扩展字段。

在这种情况下,cookie可以包含指向平台为哈希扩展字段定义的OID的指针,而类型字段可以设置为AUTH_PARAM_hash。cookie字段的值为0表示未使用。

对于每个方法,AM定义了一个结构,其中包含验证图像所需的参数。
ATF官方文档翻译(二):Authentication Framework & Chain of Trust(身份验证框架和信任链)(2)_第4张图片
AM定义了以下结构来描述用于验证镜像的身份验证方法。
ATF官方文档翻译(二):Authentication Framework & Chain of Trust(身份验证框架和信任链)(2)_第5张图片
使用类型字段中指定的方法类型,AM找出需要访问param union中的字段。

3.3 存储身份验证参数

由auth_param_type_desc_t描述的参数,用于验证可以从镜像本身或其父镜像获得镜像。分配用于加载父镜像的内存将被重新用于加载子镜像。

因此,从父级获得的用于验证子镜像的参数需要分别为它们分配存储器,以便存储它们。(因为读取子镜像的时候,父镜像就没了)该内存必须由平台端口静态分配。

AM定义以下结构以存储与认证参数相对应的数据。

在这里插入图片描述
auth_param_ptr字段由平台初始化。auth_param_len字段用于指定内存中数据的长度。

对于可以从子映像本身获得的参数,IPM负责在执行img_get_auth_param()函数时填充auth_ param_ptr和auth单元param_ len字段。

AM定义了以下结构,以使镜像能够描述应从中提取并用于验证CoT中的下一个镜像(子镜像)的参数。
在这里插入图片描述

3.4 描述CoT中镜像

CoT中的镜像是上述CoT的以下方面的合并。(就是在CoT中的镜像包含了以下所有的东西)

1.由平台指定的唯一标识符,其允许IO框架在FIP中定位镜像并将其加载到为CoT中的数据镜像保留的存储器中。

2.一种解析方法,AM使用该解析方法来找到合适的IPM。

3.如前一节所述的认证方法及其参数。这些用于验证当前镜像。

4.用于验证当前CoT中的下一个镜像的参数。这些参数仅由验证镜像指定,并且在验证后可从当前镜像中提取。

以下数据结构描述了CoT中的镜像。

ATF官方文档翻译(二):Authentication Framework & Chain of Trust(身份验证框架和信任链)(2)_第6张图片
CoT定义为指向由父字段链接在一起的auth_image_desc_t结构的指针数组。

没有父节点的节点必须使用平台中存储的ROTPK进行身份验证。(意思就是这个一连串的,体现了链式)

最后整个例子,这个例子贼长,起三篇吧

你可能感兴趣的:(#,ATF原生,信任链,linux,arm,物联网,iot)