前言

本文件旨在描述在可信固件-A(TF-A)中实现的认证框架。该框架满足以下要求:

1、平台端口可以根据证书层次结构及其机制指定信任链去校验镜像和证书。

2、框架需要区别一下:
+ 这个机制是用于编码和传输信息的机制,比如e.g. DER encoded X.509v3 certificates to ferry Subject Public Keys, hashes and non-volatile counters.
+ 用于验证传输信息的机制。(“i.e.是拉丁语 id est 的缩写,意思是“那就是说、换句话说”)如加密库。

该框架按照下图所示的模块化方法设计:


本文档描述了身份验证框架的内部细节以及用于指定信任链的抽象机制。

可以看出这个内部是分为加密、认证、镜像分析模块。可以看出这个模块间的链接依赖关系,加密+镜像校验–>认证校验。

2、框架设计

本节描述了框架设计的一些方面及其背后的基本原理。这些方面是验证信任链的关键。

2.1 信任链

信任链本质上来说就是一系列镜像的校验,这一系列起点是一个信任根,终点是一个单镜像。下面这个图像说明了在COT这个信任链中BL31镜像对应的位置。



信任的根通常是一个公钥(ROTPK),该公钥已在平台中烧掉,无法修改。

这个图片是对于BL31这个镜像的一系列校验过程,整个atf的镜像都是这样。

2.2 Image types(镜像类型)

在信任链中的镜像可以分为认证镜像和数据镜像。

认证镜像:认证镜像包含的信息是校验数据镜像或者其他的认证镜像

数据镜像:数据镜像通常是引导加载二进制文件,但它也可以是任何其他需要认证的数据。

2.3 部件的功能

在COT中的每一个镜像,都会有下面的操作去校验它:

1、在静态或者运行态都可以为镜像分配内存

2、校验镜像并将其加载到指定分配内存

3、根据镜像的类型检查镜像的完整性

4、根据所使用的加密算法校验认真镜像(每个镜像对应的算法可能是不同的)

5、如果镜像是认证镜像,那么还需要从这个镜像中提取认证信任链中下一个镜像的信息。

这就是在cot中每个镜像会执行的一些操作。

在第一幅图中,每个组件(AM CM IPM)负责上面这些操作中的一个或多个。具体的工作内容,在下面描述一下。

2.4 TF-A Generic code and IO framework (GEN/IO)(TF-A通用代码和IO框架)

这些组件的功能是负责启动BL1或BL2中特定镜像的认证过程。对于每个BL镜像都需要进行认证,通用代码会递归地向认证模块询问父映像是什么,直到达到认证映像或ROT(The root of trust)(这个就是通用的代码会跟踪这个镜像的整个链),然后调用IO框架去加载镜像,然后调用认证模块去认证这个镜像。(就是检查你的过去,没毛病以后然后检查你自身)这个过程是从ROT -到最后的镜像,都是遵守这个信任链逻辑的。

其实这就是说的整个框架的流程是符合信任链的

信任链需要执行的步骤,在平台对与一些复用的步骤和操作进行了封装。

2.5 TF-A Platform Port (PP)(atf平台接口)

这个平台的工作主要是:
1、指定了CoT中每个需要认真的镜像。平台如何指定CoT的细节将在后面解释。平台还指定了用于每个镜像的身份认证(验证)方法和解析方法。
2、为COT中校验过程中用到的每个镜像的每个参数都静态分配了内存空间。(镜像校验用到的参数,比如公钥、散列值等)
3、提供信任公钥的根或其散列值。(这个应该厂家是通过接口去指定)
4、提供给IPM(镜像解析模块)一些附加的信息使其能识别并提取一些包含在镜像中的认证校验参数,(e、 g.如果参数存储为X509v3扩展,则必须提供相应的OID。)
5、满足IPM和CM的任何其他内存要求(本文件中目前未描述)。
6、向外部提供一些方法验证镜像,这些镜像的验证方法CM无法实现。比如e、 g.如果必须使用NV计数器验证图像,则要比较的计数器值只能由平台提供。
7、如果正在使用特有的镜像格式(稍后描述),也支持自定义实现镜像解析器。

2.6 Authentication Module (AM)(认证模块(AM))

认证模块的功能有什么?

1、

对CoT这个功能进行一定的抽象,便于去操作。其中认证机制和镜像校验机制的方法都必须要在CoT中的PP接口指定好。

2、

CoT是通过GEN验证,而GEN是利用了PP、IPM和CM输出的功能。

3、

确定哪些镜像是被认证了的。举个例子,就是在CoTs这个链上有很多的镜像,确保这些镜像不会被重复验证,而有的镜像漏掉。在TBBR-Client spec.中的 Trusted World Key Certificate,包含了很多的信息,这些信息可以拿来校验SCP_BL2, BL31, BL32 ,他们每个都有自己的信任链。(其实这里比较迷惑的是三者是分开的呢?还是说在他们的这个部分是比较独特的,或者是他们内部的校验流程是不一样的,是一连串的。对于这个有点疑惑,我觉的这里可以理解为子链,就在宏观上我遵守这个CoT,但是小细节的实现流程,按照我自己的操作)

4、

通过存储器的存储器来验证认证镜像(这意思就是校验镜像的内存放在内存中的,校验镜像的时候久去放BL31镜像校验信息的位置去取),例如在图2中描述的CoT中,可以在平台为BL31镜像保留的存储器中加载和验证每个证书。在加载BL31镜像时,将从父镜像(即BL31内容证书)中提取用于认证它的所有信息。假设认证镜像的大小永远不会超过数据镜像的大小。应该可以在构建时使用断言来验证这一点。

小结一下功能:提供了抽象的接口便于使用、校验模块负责保证校验的准确性和唯一性、以及去获取镜像校验文件的位置

2.7 Cryptographic Module (CM) 加密模块

加密模块提供了一些API,这些API的作用是:
1、校验数字前面
2、校验hash
加密模块本身是没有任何加密的代码,CM是依赖一个额外的库去实现加密的操作,因此要实现加密必须连接CM和外部库的加密库(CL)。CL提供以下函数:


这些函数在CM中的通过宏的方式进行注册:


这个name官方要求你包含CL,这样是为了debug的时候方便

2.8 Image Parser Module (IPM) 镜像校验模块

IPM的主要目的是:
1、检查IO框架加载的镜像的完整性
2、在CoT描述符中,提供的描述去实现提取用于认证图像的参数的目的。

因为镜像可能会有不同的格式,因此IPM允许每个镜像提供自己对应的镜像解析库(IPL),将自己对应的解析库注册到CoT中。( (for example, authentication images could be x509v3 certificates, signed ELF files or
any other platform specific format).)当IPM在CoT中获取到镜像的格式,就会调用对应的IPL库去验证镜像的完整性并获取校验参数。

2.9 认证方法

认证方法包括两种:
1、hash
2、数字签名

平台可以指定这些方法,也可自定义

如果数据图像使用多种方法,则所有方法必须是同一CoT的一部分。参数的数量和类型是方法特定的。这些参数应使用IPM从父图像中获得。

2.9.1 Hash

参数:

a. 数据的指针
b. 数据长度
c. hash的指针
d. hash的长度

散列将由以下ASN.1的DER编码表示:

这是ASN.1结构使得可以去除关于所使用的散列算法类型的任何假设,因为该信息伴随散列。这应该允许加密库(CL)支持多个哈希算法实现。(就是通过这个指定了一种算法,我猜测)

2.9.2 数字签名

参数:
1.指向要签名的数据的指针
2.数据长度
3.公钥算法
4.公钥值
5.数字签名算法
6.数字签名值

公钥参数将由以下ASN的DER编码表示。1类型:

数字签名算法将由以下ASN的DER编码表示。1类型。

数字签名将表示为:

认证框架将使用镜像描述符来提取与认证相关的所有信息。

这个部分有点长,下文再接着来一半

ATF官方文档翻译(二):Authentication Framework Chain of Trust(身份验证框架和信任链)(1)相关推荐

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

    接上文翻译 3.信任链的具体实现 CoT就是按照一定的顺序将一系列镜像进行排列组合,这个顺序他们得按照这个顺序进行校验.每个镜像都有参数需要AM去校验,这些特性会在下面进行说明. 平台的接口是针对Co ...

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

    接上文 4.应用实例 本节详细介绍了使用身份验证框架的可信引导实现.本示例对应于TBBR客户端文档中指定的应用功能模式(AFM).建议阅读本指南和源代码. 4.1 .The TBBR CoT (CoT ...

  3. ATF官方文档翻译(十八):中断管理框架( Interrupt Management Framework)-中断管理框架中的假设软件组件

    一.中断管理框架中的假设 该框架作出以下假设以简化其实现. 1.尽管该框架支持2种类型的安全中断(EL3和secure-EL1中断),但只有Arm GICv3这样的中断控制器架构支持0组中断形式的EL ...

  4. Injective Protocol官方文档翻译(二) -Injective Exchange Client、Injective API Provider

    文章目录 一.Injective Exchange Client 二.Injective API Provider 1. 交易转发服务(Transaction Relay Service) 2. 数据 ...

  5. ATF官方文档翻译(四):ATF固件设计(Firmware Design)(1)-冷启动

    1.固件设计-前言 Trusted Firmware-A(TF-A)实现了Trusted Board Boot Requirements(TBBR)平台设计的一个子集 Arm参考平台的文档(PDD). ...

  6. Chainlink官方文档翻译(二) 中间件-随机数 Intermediates - Random Numbers)

    文章目录 Intermediates - Random Numbers 一.介绍 1. 请求和接受(Request & Receive) 2. 使用 LINK 3. 与Chainlink预言机 ...

  7. ATF官方文档翻译(十):ATF固件设计(Firmware Design)-CPU特定操作框架

    CPU特定操作框架 Armv8-A体系结构的某些方面是由实现定义的,也就是说,某些行为不是由体系结构定义的,而是必须由单个处理器实现定义和记录的.TF-A实现了一个框架,该框架对通用实现定义的行为进行 ...

  8. ATF官方文档翻译(十一):ATF固件设计(Firmware Design)-BL图像的内存布局

    友友一起学习点赞关注不迷路!!! BL镜像的内存布局 每个引导程序镜像可以分为两部分: •镜像的静态内容.这些数据实际上存储在磁盘上的二进制文件中.在ELF术语中,它们被称为PROGBITS部分: • ...

  9. 2-Authentication Framework Chain of Trust

    引流关键词: 中断.同步异常.异步异常.irq.fiq.BL1,BL2,BL3,BL31,BL32,BL33,AP_BL1,AP_BL2,AP_BL3,AP_BL31,AP_BL32,AP_BL33, ...

最新文章

  1. 算法 - 折半查找(C#)
  2. Learn About Service Cloud for Agents
  3. 1.4 Padding-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  4. 【数据使用】3问视觉项目中的数据整理,这点小事你是不是都掌握好了?
  5. Python-OpenCV学习--USB摄像头读取图像上下翻转
  6. 一个报文的路由器之旅_【NE探秘】一个报文的路由器之旅
  7. php 工厂模式封装数据库,PHP设计模式之工厂模式
  8. 取消hibernate的外键生成
  9. C Tricks(九)—— 获取文件大小与申请数组空间
  10. 利用struts2上传文件时,如果文件名中含有-符号,那么会出错
  11. WebScraper for Mac(网站数据抓取工具)
  12. 推荐系统中传统模型——LightGBM + LR融合
  13. 雅虎相册批量下载v3.0 公布!支持相册主人登录 欢迎大家试用
  14. NTC热敏电阻应用-测温
  15. 数据挖掘的常用方法、功能和一个聚类分析应用案例
  16. 分段函数的期望和方差_导数排列组合期望方差.doc
  17. Ubuntu下lede源码的下载与编译
  18. 时间复杂度分析:递归算法
  19. java常见面试题答案
  20. (echarts)引入折线图

热门文章

  1. K8S:Volume
  2. CentOS6 图形界面(gnome)安装
  3. .htaccess是什么?.htaccess几个简单应用
  4. linux虚拟机mtr不出去,如何使用MTR诊断网络问题
  5. STM32如何快速驱动一款12864LCD液晶模块 3分钟点亮 STM32例程
  6. 清除WAS的僵死进程
  7. viper12a电路图_viper12a电磁炉电路图
  8. 一个渣渣对OLSR的简单理解
  9. [project X] tiny210(s5pv210)上电启动流程(BL0-BL2)
  10. linux nas目录老是掉,Linux运维:NAS存储故障案例