ATF(Arm Trusted Firmware)/TF-A Chapter 03 Chain of Trust (CoT)

本章主要介绍ATF中出现的CoT证书链和相关概念。

 

1. 密钥和信任链概念

参考和引用:

Trusted Board Boot Requirements (TBBR) specification, Arm DEN0006C-1

信任链(CoT)组件,在Arm开发平台上,这些组件是:

  1. 信任根公钥(ROTPK)的SHA-256。 它存储在受信的根密钥存储寄存器中。
  2. BL1镜像,假设它在ROM中,不能被篡改。

CoT中的其余组件是证书或Bootloader镜像。 证书遵循X.509 v3标准。 此标准允许向证书添加自定义扩展,这些扩展用于存储建立CoT的基本信息

在TBB CoT中,所有证书都是自签名的。 不需要证书颁发机构(CA),因为CoT不是通过验证证书颁发者的有效性而是通过证书扩展的内容来建立的。 要对证书进行签名,使用带有RSA加密签名方案的PKCS#1 SHA-256,RSA密钥长度为2048位。 TF-A的未来版本将支持其他加密算法。

证书分为“密钥(Key)”和“内容(content)”证书两种。 密钥证书用来验证用于签名内容证书的公钥。内容证书用来保存boot loader 镜像的hash。认证方式是通过计算BLx的hash与从内容证书中提取出来的hash值比较。Hash =SHA-256(BLx bin). 公钥和hash值会放在X.509 v3证书的 non-standard extension字段。

用于建立CoT的密钥是:

  1. Root of trust key

他的私钥用来给BL2的内容证书和密钥证书签名

他的公钥称为ROTPK.

  1. Trusted world key

私钥用来给secure world images (SCP_BL2, BL31 and BL32)的密钥证书签名

公钥保存在自签名的Trusted world key证书extension 域中

  1. Non-trusted world key

私钥来给non secure world images (BL33)的密钥证书签名

公钥保存在Trusted world key证书的extension 域中

  1. BL3-X keys

对于SCP_BL2, BL31, BL32 and BL33, 私钥用来给BL3-X的内容证书签名

公钥保存在对应的密钥证书的extension 域.

CoT包括以下镜像:

  1. BL1
  2. BL2
  3. SCP_BL2 (optional)
  4. BL31
  5. BL33
  6. BL32 (optional)

 

以下证书用来认证镜像:

  1. BL2 内容证书

一个ROT key私钥的自签名证书。内容包括BL2的hash

  1. Trusted key certificate

一个ROT key私钥的自签名证书。内容包括trusted world key的公钥和non-trusted world key的公钥

  1. SCP_BL2 key certificate

一个 trusted world key自签名证书。内容包括SCP_BL2 key的公钥.

  1. SCP_BL2 content certificate

一个SCP_BL2 key自签名证书。内容包括SCP_BL2 的hash.

  1. BL31 key certificate

一个 trusted world key自签名证书。内容包括BL31 key的公钥.

  1. BL31 content certificate

一个BL31 key自签名证书。内容包括BL31 的hash

  1. BL32 key certificate

一个 trusted world key自签名证书。内容包括 BL32 key的公钥.

  1. BL32 content certificate

一个BL32 key自签名证书。内容包括BL32 的hash

  1. BL33 key certificate

一个non-trusted world key自签名证书。内容包括BL33 key的公钥.

  1. BL33 content certificate

一个BL33 key自签名证书。内容包括BL33 的hash

SCP_BL2 ,BL32 证书是可选的, 如果SCP_BL2 or BL32 存在,则为必选。

2. X509 v3 & PKCS1

PKCS1作为签名算法,ARM目前支持的算法为:SHA256+RSA2048,这是一种相对简单且古老的签名算法,PKCS#1签名算法有两种签名方案:

RSASSA-PSS和RSASSA-PKCS1-v1_5。

而X509证书,作为证书内容(签名信息+公钥+签名)的内容的封装,同样有两种格式:

PEM(.pem)和DER(.cer,.crt),分别为可读的base64编码的文本文件和DER编码的二进制文件。

ARM明确指出了使用DER编码。

X509证书内容的编码是ASN.1。

关于X509和PKCS#1,有时间我会详细说明pkcs体系和在嵌入式安全领域的应用。

3. Trusted Board Boot 流程

CoT按照下面的步骤验证。如果任何步骤失败,系统会panic。

1.  BL1加载并验证BL2内容证书。从验证的证书中读取颁发者公钥。计算该密钥的散列并将其与从受信任的根密钥存储寄存器读取的ROTPK的散列进行比较。如果它们匹配,则从证书中读取BL2哈希。

BL2内容证书 = Sign(ROT key PrK, ROT key PK+ ext::BL2 hash)

注:ROT key PK = ROTPK

注意:比较操作是特定于平台的,目前在Arm开发平台上未实现。在其他平台上,是SoC厂商自行实现的。

多说一句,比较操作作为认证过程的核心,也是有讲究的,需要考虑对各种攻击的保护,比如glitch攻击,穷举攻击等,通常的做法,是进行二次比较,并在两次比较之间插入随机的delay以防止对比较结果(即 返回值x0,r0)的攻击。第一次比较采用相等比较,而第二次,采用不等比较:


  
  
  1. if(! memcmp(calc_hash,file,len) ){ //对第一次比较的代码执行时间点很容易预测,所以放弃保护
  2. delay(r1); //r1 为真随机数
  3. if( memcmp(calc_hash,file,len)){ //相比于第一次,对第二次比较的代码执行时间点则不容易预测
  4. return -EAUTH;
  5. }
  6. } else{
  7. delay(r2); //r1 为真随机数
  8. return -EAUTH;
  9. }
  10. return 0; //认证成功

 

到第三步,BL1获取了经过验签的ROTPK和BL2 hash。

2. BL1加载BL2镜像。计算其哈希值并与从证书中读取的哈希值进行比较。如果所有比较都成功,则控制转移到BL2镜像。这一步,经过验签的BL2执行成功

3. BL2加载并验证 trusted key 证书。从验证的证书中(BL2内容证书)读取颁发者公钥(ROTPK)。计算该密钥的hash并将其与从受信任的根密钥存储寄存器读取的ROTPK的散列进行比较。如果比较成功,BL2将从已验签的证书中读取并保存trusted world PK+ non-trusted world PK。

trusted world key证书 = Sign(ROT key PrK, ROT key PK+ext::trusted world PK+ non-trusted world PK)

SCP_BL2,BL31和BL32都会执行步骤4,5。如果这些镜像不存在,则跳过可选SCP_BL2和BL32镜像的步骤,只看BL31

4. BL2加载并验证BL3x密钥证书。使用 trusted world public key验证证书签名。如果签名验证成功,BL2将从证书中读取并保存BL3x公钥。

BL31 key certificate = Sign(trusted world PrK, trusted world PK, ext::BL31 PK)

5. BL2加载并验证BL3x内容证书。 使用BL3x公钥验证签名。 如果签名验证成功,BL2将从证书中读取并保存BL3x镜像Hash。

BL31 content certificate = Sign(BL31 PrK, BL31 PK ,ext::hash(BL31))

接下来的两个步骤仅针对BL33执行。

6. BL2加载并验签BL33 密钥证书。如果验签成功,BL2从BL33 密钥证书中读取并保存BL33公钥

BL33 key certificate = Sign(non-trusted world PrK, non-trusted world PK, ext::BL33 PK)

7. BL2加载并验签BL33内容证书,如果验签成功,BL2从BL33 内容证书中读取并保存BL33的hash

BL33 content certificate = Sign(BL33 PrK, BL33 PK ,ext::hash(BL33))

下一步骤针对所有的BL image

8.BL2计算镜像hash,与从内容证书中获取的hash进行比较。如果hash相同则镜像认证成功

9.结束

ARM提供了一个证书生成工具,添加到BL镜像和FIP镜像中,ARM要求使用IO storage framework读取这些证书,并使用 Authentication module 进行认证。

 

本章结束

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# 学习对象在全民造车、造芯的大时代,在努力去解决卡脖子的时代,ASIC硬件、SOC底层软件、Linux Kernel等操作系统软件(内核/驱动)、软硬件方面的系统架构师等的岗位需求也越来越明显,社会一直都是非常缺人的,缺的是核心的那一小撮、领头的那一小撮,社会所缺的更是能够软硬件融合的那一小撮人……总之,要想在这个时代,站稳自己的脚跟,能够在大公司或行业上拥有一席之地,就必需深入学习底层技术原理,核心技术才是您的看家本领。本课程设计之初,主要针对SOC底层软件开发的者、系统开发者,或者励志成为这样的人。既适合资深/高级工程师来查缺补漏,又适合初级工程师入门。(理论上该课程和ASIC硬件电路设计无关,该课程偏软件,但事实购买该课程的做ASIC的同学已然超过了15%)适用人群1、芯片开发者(包括底层软件、或做ASIC硬件的)。不限行业,例如车、云、物联网、移动端等领域;2、汽车行业开发者(主机厂、tier1、SOC厂家、各级供应商);3、嵌入式开发者、kernel开发者、驱动、软件工程师;4、学生。既适合学生从入门到精通,也适合资深工程师查缺补漏;您的收益:1、全体系的掌握ARMv8/ARMv9的核心知识点(ARM基础、异常中断GIC、MMU/Cache、architecture...);2、掌握ARM架构、掌握SOC架构、掌握常规IP(gic、smmu、timer、AXI/ACE/CHI、TZC400...);3、快速熟悉常规系统软件(bootrom、spl、ATF、TEE、bootloader、kernel...), Secureboot安全启动...4、技术水平提升N个level, 掌握快速的学习方法;# 学习什么在ARM蓬勃发展的年代,不仅仅涉及到物联网IOT、移动领域(如手机)、汽车电子领域,现在还涉及到PC、服务器的,简直就是各行各业。ARMv8出来已经有10年了,ARMv9也2年时间了。在技术不断更新迭代的背景下,此时再去学习十五年前的ARMv7、二十年前的ARMv5/v6显然不是明智的选择。本课程主要基于当前最新的架构,ARMv8的aarch64和ARMv9,如涉及具体的ARM Core IP主要还是以最新的ARM Core IP为主,软件架构也是以当前最主流的/未来所趋势的架构来讲解。以下也给大家列举初了一个ARM产品的timeline的总结(在本课程中有着大量的这种总结),从这张图中,您是可以清晰的看到本课程拥有独具一格的风格、拥有全网最新(且唯一)的资料总结或学习路线。# 本课程大纲和规划(课程持续更新中,课程总量统计:2022/10/02  当前是 61节课, 22小时)第一章:主要是快速学习: ARM简介、指令集、寄存器总结等。第二章:本系列视频的一大亮点,系统全面地讲解了arm异常中断gic等相关的软硬件知识,本人一直在倡导“学arm安全其实就是学arm架构,学arm架构其实就是学习arm的异常和中断”,异常中断是领着你进入架构的入门,是让你变成系统软硬件架构师的必走之路。第三章:安全专题,这也是本视频最核心的东西。因为你无论买书还是看博客等,你都很难找到讲解安全的教程,这里就是有和无的区别。本人系统的整理的安全的知识,带领你快速入门。第四章:mmu专题,透过事务看本质的讲解,白话式的演讲。在所有模块中,mmu也算是相对较简单模块。相信人人听得懂,人人学得会。第五章:cache专题,一切追求实事求是,不人云亦云,一切知识点都有迹可循,推翻了网络的很多观念。在众多模块中,cache算是一个比较难的模块。了解了cache后,才能算真正了解系统的软硬件架构。第六章:虚拟化,本人不擅长,会啥就随便讲点啥。(以后学会了再来补)第七章:architecture,就是零散和零碎的系统架构知识,如exclusive、arch timer、reset、系统启动、SOC设计、AMBA/AXI/ACE、DSU、WFE/WFI这样的。第八章: 新增的ARMv9 CCA/RME安全架构专题第九章:主要放置一些直播课。# 课程收益1、知道我学习什么,我要怎么去学习,从此之后有了一个明确的学习路线。2、认识一些共同目标的人,相互讨论问题,共同进步。勤学、共学、助学。3、ARM不再神秘,SOC不在神秘,让您短期内就能cover住全局4、熟悉ARM Architecture架构知识5、熟悉SOC架构知识6、熟悉主流的系统软件框架7、熟悉各项硬件原理和机制,如异常中断、MMU、cache、TLB、VMSA、Trustzone6、深入了解当前的系统架构、软硬件架构,能够看懂这些大家,将来也能够自己设计。7、熟悉系统的启动流程、Secureboot等8、熟悉各类标准和规范9、能够进入芯片厂商干活、能够在非芯片产生成为技术担当。10、学习资料的获取方法,会看11500多页的ARM手册,会看数以百计的ARM各项参考手册。 本课程会持续更新。也希望通过本课程的学习,能够让大家的ARMv8/ARMv9开发技术能有质的飞越,能找到自己心仪的工作。在购买之前,也建议大家看一看第一章第一节的课程介绍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值