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)的攻击。第一次比较采用相等比较,而第二次,采用不等比较:

if(!memcmp(calc_hash,file,len) ){//对第一次比较的代码执行时间点很容易预测,所以放弃保护
    delay(r1);//r1 为真随机数
    if(memcmp(calc_hash,file,len)){//相比于第一次,对第二次比较的代码执行时间点则不容易预测
        return -EAUTH;
    }
}else{
    delay(r2);//r1 为真随机数
    return -EAUTH;
}
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 进行认证。

 

本章结束

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
autosar参考资料,Secure相关概念汇总 AES 加密算法,由NIST制定的标准,例如AES-128, AES-192 AsymmetricCryptography 使用两个不同值进行加密和解密的加密算法。非对称算法是基于很大数量的,并且很耗时。 Authenticity 确认数据(例如固件)的真实性 Car-to-X 车辆与其他组件(例如其他汽车,交通标志等)的通信方案 Cipher 实现加密算法的模块(硬件或软件) Chain-of-Trust 作为安全启动的增强变体,固件检查分为多个子块,以减少启动时间。 ECU 电子控制单元,一个由TIER1开发的组件 Elliptic Curve Algorithm 在80年代开发的非对称密码算法,使用短密钥(<512位) EVITA 欧盟资助的项目,旨在为不同用例指定安全模块 Glitch Attack 电压毛刺使设备处于未指定的状态和行为。 HASH 一种基于任意输入数据计算值的算法,该值可用于验证输入数据 HSM 硬件安全模块;集成了密码和内核的加密模块,有时用户可对其进行编程 Integrity 涉及维护数据的一致性,准确性和可信赖性 Key / Crypto Key 加密算法用作输入参数的值。 Key Management 在生产和现场设备中处理和分发密码密钥 NIST National Institute of Standards and Technology,即国家标准技术局 OTA Over-The-Air的缩写,即云端升级,通过无线连接进行固件更新 Physical Attack 一种攻击方法,使用了超出规格的设备(例如,电压过高/过低/温度或时钟,强光等)。 Replay Attacks 记录并重播加密消息或图像。在这种情况下,攻击者无需知道安全信息(例如密钥)。 RNG / TRNG / PRNG 随机数生成器–真正的随机数生成器根据随机物理效应生成数字; PRNG根据数学算法生成数字 RSA 70年代开发的非对称密码算法使用长密钥(> 1500位) Secure-Boot 一种在硬件模块启动时检查设备固件是否已修改的方法 Secure Memory 一种存储安全信息(例如,加密密钥)并具有严格访问限制的存储器。 SHA 由NIST指定的哈希算法系列,例如 SHA-1,SHA-2,SHA-2 SHE 安全标准;由HIS组中的德国汽车OEM指定。 Side-Channel Attacks 一种攻击方法,攻击者在其中测量加密模块/软件的各个方面。根据这些测量,攻击者可以推导/猜测安全信息,例如: key。 Signature 用于证明数字消息或文档真实性的值 Symmetric Cryptography 使用相同值进行加密和解密的加密算法

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值