运行时安全引擎RSE

安全之安全(security²)博客目录导读

目录

一、RSE 通信层

1.1 消息结构

1.2 源代码文件

1.3 MHU 通信的 API

二、RSE 提供的运行时服务

2.1 运行时服务 API

2.2 软件与 API 层次结构

三、基于 RSE 的 Measured Boot(度量启动)

3.1 Measured Boot API

3.2 Measured Boot 元数据

3.3 Signer-ID API

3.4 构建时配置选项

3.5 Measured Boot 流程

3.6. 控制台日志样例

四、委托认证(Delegated Attestation)

4.1. 委托认证 API

4.2. 认证流程

4.3. 证明令牌示例

五、基于 RSE 的 DICE 保护环境(DPE)

5.1. DPE API

5.2. 构建时配置选项

5.3. 示例证书链

六、RSE OTP 资产管理

6.1. 非易失性计数器 API

6.2. 公钥 API

6.3. 获取熵的 API


该博客重点介绍了运行时安全引擎(Runtime Security Engine,简称 RSE)与应用处理器(Application Processor,简称 AP)之间的关系。

根据 ARM 的参考设计,RSE 是位于同一芯片(die)上的一个独立核心,与 AP 和系统控制处理器(System Control Processor,简称 SCP)并列存在。RSE 为整个系统提供基本的安全保障和运行时服务,例如:可信启动(trusted boot)、度量启动(measured boot)、平台认证(platform attestation)、密钥管理与派生(key management and key derivation)等。

在系统上电时,RSE 首先从其私有的 ROM 代码启动。它会验证并加载自身的镜像文件以及 SCP 和 AP 的初始镜像。当 AP 和 SCP 被解复位,且其初始代码被加载后,它们将继续各自的启动流程,这一流程与没有 RSE 的系统相同。关于 RSE 启动流程的更多细节,请参见 RSE 文档 。

RSE 固件的最后阶段是一个常驻的运行时组件。类似于 AP 的 BL31,它是一个被动实体,没有周期性任务,仅在收到其他子系统的外部请求时才进行响应。RSE 与其他子系统之间通过消息交换进行通信。RSE 在空闲状态下等待传入请求,处理请求后发送响应,然后再次进入空闲状态。


一、RSE 通信层

RSE 与其他子系统之间的通信主要依赖于消息处理单元(Message Handling Unit,简称 MHU)模块。

不过,也可以使用不同于 MHU 的邮箱(mailbox)来实现该通信协议,只需将编译标志 PLAT_MHU=NO_MHU 设置为不使用 MHU,并实现 include/drivers/arm/rse_comms.h 文件中提供的 API。

RSE 与其他核心之间的 MHU 接口数量由实现定义(IMPDEF)。除 MHU 外,其他模块也可以参与通信。RSE 能够将 AP 的内存映射到自身的地址空间,因此无论是 RSE 核心自身,还是(如果存在的话)DMA 引擎,都可以在 RSE 与 AP 所属内存之间传输数据。这种方式可以在较短时间内传输大量数据。

MHU 成对出现,包括一个发送端和一个接收端,它们相互连接。一个 MHU 接口包含两个 MHU 对:在两端各有一个发送端和一个接收端。一个接口支持双向通信,一对用于从 AP 向 RSE 发送消息,另一对用于从 RSE 向 AP 发送消息。发送器和接收器通过通道连接,一个发送器与一个接收器之间有若干通道(例如:4–16 个通道,具体数量由实现定义)。

RSE 通信层提供两种消息交换方式:


嵌入式消息(Embedded messaging)

完整消息(包括头部和负载)通过 MHU 通道交换。一个通道只能传输一个字(word)。发送方将数据写入自己一侧的通道寄存器,接收方从对侧通道读取数据。有一个专用通道用于信号通知,它本身不传输任何有效负载,仅用于表示发送方已将数据写入通道寄存器,接收方即可读取;接收方也通过同一个通道返回信号表示数据已读取。信号传递通过中断(IRQ)完成。如果消息长度超过通道寄存器的容量,则消息需要分多轮传输。发送方和接收方都会为消息分配本地缓冲区,数据将在缓冲区与通道寄存器之间进行拷贝。


指针访问消息(Pointer-access messaging)

消息头与负载分离,并通过不同方式传输。头部通过通道发送,类似于嵌入式消息,而负载部分则由 RSE 核心(或 DMA)在发送方和接收方之间拷贝。这种方式适用于长消息,因为相比嵌入式方式,事务处理时间更短。小型负载一般由 RSE 核心处理,因为设置 DMA 所需的 CPU 周期更多。负载可以被拷贝到内部缓冲区,或者被 RSE 直接读写,具体行为取决于 RSE 配置,以及分区是否支持内存映射的 iovec。因此,发送方必须同时处理这两种情况,并在 RSE 处理请求期间防止访问负载数据所在的内存区域。


RSE 通信层支持两种消息方式并行使用。具体采用哪种方式,会根据消息大小在运行时决定。

【注意】RSE 通信层不支持并发执行。当前的使用场景仅要求在启动阶段进行消息交换。在启动阶段,仅有一个核心在运行,其余核心仍处于复位状态。


1.1 消息结构

有关消息格式的说明,请参见《RSE 通信设计》文档 。


1.2 源代码文件

  • RSE 通信模块:drivers/arm/rse

  • MHU 驱动模块:drivers/arm/mhu


1.3 MHU 通信的 API

相关 API 定义在以下头文件中:

  • include/drivers/arm/rse_comms.h

  • include/drivers/arm/mhu.h


二、RSE 提供的运行时服务

RSE 提供以下运行时服务:

  • 度量启动(Measured Boot):安全存储在启动过程中计算出的固件度量值及相关元数据(如镜像描述、度量算法等)。有关此服务的更多信息,请参见《measured_boot_integration_guide》文档 。

  • 委托认证(Delegated Attestation):查询平台认证令牌,并派生出委托认证密钥。相关细节可参考《delegated_attestation_integration_guide》文档 。

  • OTP 资产管理(OTP Assets Management):AP 在可信启动过程中使用的公钥可以从 RSE 请求获取。此外,AP 还可请求 RSE 增加一个非易失性计数器。详情请参考《RSE Key Management》文档 。

  • DICE 安全环境(DICE Protection Environment):安全存储启动过程中计算的固件度量值及元数据,还能以证书链的形式表示启动度量结果,并支持外部查询。详见《DICE Protection Environment(DPE)》文档 。


2.1 运行时服务 API

RSE 提供的运行时服务实现了与 PSA(Platform Security Architecture)对齐的 API。参数编码遵循《Firmware Framework for M》文档第 4.4 章中描述的 PSA 客户端协议。

该实现限定为**静态句柄(static handle)**的使用场景,因此仅实现了 psa_call API。


2.2 软件与 API 层次结构

三、基于 RSE 的 Measured Boot(度量启动)

Measured Boot 是一种在启动过程中对代码和关键数据进行加密度量(即计算其哈希值)的机制。这些度量值必须以防篡改的方式进行存储,以便设备在之后能向外部方证明其安全状态。RSE 提供了一个运行时服务,用于存储这些度量值及其相关元数据。

数据被存储在 RSE 内部的 SRAM 中,仅能由 RSE 的安全运行时固件访问。这些数据存储在所谓的“度量槽(measurement slots)”中。每个平台具有平台自定义(IMPDEF)数量的度量槽。

度量存储采用“扩展(extend)”语义。即度量值不会被直接存储,而是参与生成当前度量槽的新值。其扩展逻辑如下(|| 表示连接):

new_value_of_measurement_slot = Hash(old_value_of_measurement_slot || measurement)

支持的哈希算法包括:sha-256sha-512


3.1 Measured Boot API

定义在:

include/lib/psa/measured_boot.h

函数原型如下:

psa_status_t
rse_measured_boot_extend_measurement(uint8_t        index,const uint8_t *signer_id,size_t         signer_id_size,const uint8_t *version,size_t         version_size,uint32_t       measurement_algo,const uint8_t *sw_type,size_t         sw_type_size,const uint8_t *measurement_value,size_t         measurement_value_size,bool           lock_measurement);

3.2 Measured Boot 元数据

可与度量值一同存储的元数据包括:

  • Signer-id(签名者ID):必选项。为固件镜像签名公钥的哈希值。

  • Measurement algorithm(度量算法):可选项。用于计算度量值的哈希算法(例如:sha-256)。

  • Version info(版本信息):可选项,例如 "2.7"。

  • SW type(软件类型):可选项,简要文本描述(例如:BL1、BL2、BL31)。

注意:TF-A 当前尚未实现版本信息字段的支持。

调用者必须指定在哪个度量槽中扩展度量值及其元数据。一个槽位可以被多次扩展。所有度量槽在复位时清空,不能手动清空。在参考实现中,槽初始值为 0,第一次调用 extend 操作时使用默认值,后续操作继续基于前值进行扩展。

当对同一个槽位多次扩展时,遵循以下规则:

  • Signer-id 必须与之前一致,否则返回 PSA_ERROR_NOT_PERMITTED

  • Measurement algorithm 也必须一致,否则也会返回相同错误码。

  • 出现错误时不会采取进一步操作(槽不会被锁定)。如果后续调用中数据合法,则仍可继续扩展该槽。

  • 对于其他元数据处理:

    • SW type 会被清除。

    • Version info 也会被清除。

注意:在同一槽内扩展多个度量值会导致元数据信息丢失。由于 RSE 在存储方面不受专用硬件限制,因此建议为每个度量值分配独立槽位。但请注意,每个独立的度量值都将被包含在平台认证令牌中,因此度量项的数量会影响认证令牌的体积。

度量槽在 RSE、Root 和 Realm 世界之间的分配由平台决定,且需在构建时配置。示例参考:

tf-a/plat/arm/board/tc/tc_bl1_measured_boot.c

此外,存储元数据的内存也在 RSE 内部静态分配。部分字段为静态值(如算法),而如度量值等字段为动态值,由 Bootloader 在加载并度量固件时更新。

元数据结构定义如下:

struct rse_mboot_metadata {unsigned int id;uint8_t slot;uint8_t signer_id[SIGNER_ID_MAX_SIZE];size_t  signer_id_size;uint8_t version[VERSION_MAX_SIZE];size_t  version_size;uint8_t sw_type[SW_TYPE_MAX_SIZE];size_t  sw_type_size;void    *pk_oid;bool    lock_measurement;
};

3.3 Signer-ID API

此函数使用指定度量算法对公钥(即签名者ID)进行哈希运算,并将结果存储在 rse_mboot_metadata 结构中的 signer_id 字段中。调用该函数前,必须确保 signer_id 字段所指向的缓冲区被清零。

定义于:

include/drivers/measured_boot/rse/rse_measured_boot.h

函数原型如下:

int rse_mboot_set_signer_id(struct rse_mboot_metadata *metadata_ptr,const void *pk_oid,const void *pk_ptr,size_t pk_len)
  • 第一个参数:指向 rse_mboot_metadata 结构的指针;

  • 第二个参数:公钥的 key-OID 指针;

  • 第三个参数:公钥缓冲区指针;

  • 第四个参数:公钥缓冲区长度。

  • 返回值:成功返回 0,失败返回负整数错误码。


3.4 构建时配置选项

  • MEASURED_BOOT:启用度量启动功能;

  • MBOOT_RSE_HASH_ALG:指定用于度量镜像的哈希算法。默认值为 sha-256


3.5 Measured Boot 流程

3.6. 控制台日志样例

INFO:    Measured boot extend measurement:
INFO:     - slot        : 6
INFO:     - signer_id   : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
INFO:                   : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
INFO:     - version     :
INFO:     - version_size: 0
INFO:     - sw_type     : FW_CONFIG
INFO:     - sw_type_size: 10
INFO:     - algorithm   : 2000009
INFO:     - measurement : aa ea d3 a7 a8 e2 ab 7d 13 a6 cb 34 99 10 b9 a1
INFO:                   : 1b 9f a0 52 c5 a8 b1 d7 76 f2 c1 c1 ef ca 1a df
INFO:     - locking     : true
INFO:    FCONF: Config file with image ID:31 loaded at address = 0x4001010
INFO:    Loading image id=24 at address 0x4001300
INFO:    Image id=24 loaded: 0x4001300 - 0x400153a
INFO:    Measured boot extend measurement:
INFO:     - slot        : 7
INFO:     - signer_id   : b0 f3 82 09 12 97 d8 3a 37 7a 72 47 1b ec 32 73
INFO:                   : e9 92 32 e2 49 59 f6 5e 8b 4a 4a 46 d8 22 9a da
INFO:     - version     :
INFO:     - version_size: 0
INFO:     - sw_type     : TB_FW_CONFIG
INFO:     - sw_type_size: 13
INFO:     - algorithm   : 2000009
INFO:     - measurement : 05 b9 dc 98 62 26 a7 1c 2d e5 bb af f0 90 52 28
INFO:                   : f2 24 15 8a 3a 56 60 95 d6 51 3a 7a 1a 50 9b b7
INFO:     - locking     : true
INFO:    FCONF: Config file with image ID:24 loaded at address = 0x4001300
INFO:    BL1: Loading BL2
INFO:    Loading image id=1 at address 0x404d000
INFO:    Image id=1 loaded: 0x404d000 - 0x406412a
INFO:    Measured boot extend measurement:
INFO:     - slot        : 8
INFO:     - signer_id   : b0 f3 82 09 12 97 d8 3a 37 7a 72 47 1b ec 32 73
INFO:                   : e9 92 32 e2 49 59 f6 5e 8b 4a 4a 46 d8 22 9a da
INFO:     - version     :
INFO:     - version_size: 0
INFO:     - sw_type     : BL_2
INFO:     - sw_type_size: 5
INFO:     - algorithm   : 2000009
INFO:     - measurement : 53 a1 51 75 25 90 fb a1 d9 b8 c8 34 32 3a 01 16
INFO:                   : c9 9e 74 91 7d 28 02 56 3f 5c 40 94 37 58 50 68
INFO:     - locking     : true

四、委托认证(Delegated Attestation)

委托认证服务 主要是为支持 ARM 机密计算架构(ARM CCA) 中的认证流程而开发的。关于该服务的详细描述可参见《Delegated Attestation Service Integration Guide》文档。

在 CCA 的使用场景中,Realm 管理监控器(RMM) 依赖 RSE 的委托认证服务 来获取 Realm 认证密钥CCA 平台认证令牌(Platform Token)BL31 本身不使用该服务,只是代表 RMM 发起调用。MHU 接口(也即 RSE 的访问)仅限 BL31 访问。因此,RMM 无法直接访问 RSE,所有请求都必须通过 BL31 进行中转。BL31 中的 RMM 分发模块(dispatcher module) 负责在 RMM 和 RSE 之间传递这些调用。


4.1. 委托认证 API

定义于:

include/lib/psa/delegated_attestation.h

API 原型如下:

psa_status_t
rse_delegated_attest_get_delegated_key(uint8_t   ecc_curve,uint32_t  key_bits,uint8_t  *key_buf,size_t    key_buf_size,size_t   *key_size,uint32_t  hash_algo);psa_status_t
rse_delegated_attest_get_token(const uint8_t *dak_pub_hash,size_t         dak_pub_hash_size,uint8_t       *token_buf,size_t         token_buf_size,size_t        *token_size);

功能:从 RSE 获取 委托认证密钥(Delegated Attestation Key, DAK)

  • ecc_curve:椭圆曲线类型

  • key_bits:密钥位数

  • key_buf:用于存储返回密钥的缓冲区

  • key_buf_size:缓冲区大小

  • key_size:实际返回密钥的大小

  • hash_algo:使用的哈希算法

功能:从 RSE 获取 平台认证令牌(Platform Token)

  • dak_pub_hash:委托认证公钥的哈希值

  • dak_pub_hash_size:公钥哈希值的长度

  • token_buf:用于存储返回令牌的缓冲区

  • token_buf_size:缓冲区大小

  • token_size:实际返回令牌的大小


4.2. 认证流程

4.3. 证明令牌示例

二进制格式:

INFO:    DELEGATED ATTEST TEST START
INFO:    Get delegated attestation key start
INFO:    Get delegated attest key succeeds, len: 48
INFO:    Delegated attest key:
INFO:            0d 2a 66 61 d4 89 17 e1 70 c6 73 56 df f4 11 fd
INFO:            7d 1f 3b 8a a3 30 3d 70 4c d9 06 c3 c7 ef 29 43
INFO:            0f ee b5 e7 56 e0 71 74 1b c4 39 39 fd 85 f6 7b
INFO:    Get platform token start
INFO:    Get platform token succeeds, len: 1086
INFO:    Platform attestation token:
INFO:            d2 84 44 a1 01 38 22 a0 59 05 81 a9 19 01 09 78
INFO:            23 74 61 67 3a 61 72 6d 2e 63 6f 6d 2c 32 30 32
INFO:            33 3a 63 63 61 5f 70 6c 61 74 66 6f 72 6d 23 31
INFO:            2e 30 2e 30 0a 58 20 0d 22 e0 8a 98 46 90 58 48
INFO:            63 18 28 34 89 bd b3 6f 09 db ef eb 18 64 df 43
INFO:            3f a6 e5 4e a2 d7 11 19 09 5c 58 20 7f 45 4c 46
INFO:            02 01 01 00 00 00 00 00 00 00 00 00 03 00 3e 00
INFO:            01 00 00 00 50 58 00 00 00 00 00 00 19 01 00 58
INFO:            21 01 07 06 05 04 03 02 01 00 0f 0e 0d 0c 0b 0a
INFO:            09 08 17 16 15 14 13 12 11 10 1f 1e 1d 1c 1b 1a
INFO:            19 18 19 09 61 44 cf cf cf cf 19 09 5b 19 30 03
INFO:            19 09 62 67 73 68 61 2d 32 35 36 19 09 60 78 3a
INFO:            68 74 74 70 73 3a 2f 2f 76 65 72 61 69 73 6f 6e
INFO:            2e 65 78 61 6d 70 6c 65 2f 2e 77 65 6c 6c 2d 6b
INFO:            6e 6f 77 6e 2f 76 65 72 61 69 73 6f 6e 2f 76 65
INFO:            72 69 66 69 63 61 74 69 6f 6e 19 09 5f 8d a4 01
INFO:            69 52 53 45 5f 42 4c 31 5f 32 05 58 20 53 78 79
INFO:            63 07 53 5d f3 ec 8d 8b 15 a2 e2 dc 56 41 41 9c
INFO:            3d 30 60 cf e3 22 38 c0 fa 97 3f 7a a3 02 58 20
INFO:            9a 27 1f 2a 91 6b 0b 6e e6 ce cb 24 26 f0 b3 20
INFO:            6e f0 74 57 8b e5 5d 9b c9 4f 6f 3f e3 ab 86 aa
INFO:            06 67 73 68 61 2d 32 35 36 a4 01 67 52 53 45 5f
INFO:            42 4c 32 05 58 20 53 78 79 63 07 53 5d f3 ec 8d
INFO:            8b 15 a2 e2 dc 56 41 41 9c 3d 30 60 cf e3 22 38
INFO:            c0 fa 97 3f 7a a3 02 58 20 53 c2 34 e5 e8 47 2b
INFO:            6a c5 1c 1a e1 ca b3 fe 06 fa d0 53 be b8 eb fd
INFO:            89 77 b0 10 65 5b fd d3 c3 06 67 73 68 61 2d 32
INFO:            35 36 a4 01 65 52 53 45 5f 53 05 58 20 53 78 79
INFO:            63 07 53 5d f3 ec 8d 8b 15 a2 e2 dc 56 41 41 9c
INFO:            3d 30 60 cf e3 22 38 c0 fa 97 3f 7a a3 02 58 20
INFO:            11 21 cf cc d5 91 3f 0a 63 fe c4 0a 6f fd 44 ea
INFO:            64 f9 dc 13 5c 66 63 4b a0 01 d1 0b cf 43 02 a2
INFO:            06 67 73 68 61 2d 32 35 36 a4 01 66 41 50 5f 42
INFO:            4c 31 05 58 20 53 78 79 63 07 53 5d f3 ec 8d 8b
INFO:            15 a2 e2 dc 56 41 41 9c 3d 30 60 cf e3 22 38 c0
INFO:            fa 97 3f 7a a3 02 58 20 15 71 b5 ec 78 bd 68 51
INFO:            2b f7 83 0b b6 a2 a4 4b 20 47 c7 df 57 bc e7 9e
INFO:            b8 a1 c0 e5 be a0 a5 01 06 67 73 68 61 2d 32 35
INFO:            36 a4 01 66 41 50 5f 42 4c 32 05 58 20 53 78 79
INFO:            63 07 53 5d f3 ec 8d 8b 15 a2 e2 dc 56 41 41 9c
INFO:            3d 30 60 cf e3 22 38 c0 fa 97 3f 7a a3 02 58 20
INFO:            10 15 9b af 26 2b 43 a9 2d 95 db 59 da e1 f7 2c
INFO:            64 51 27 30 16 61 e0 a3 ce 4e 38 b2 95 a9 7c 58
INFO:            06 67 73 68 61 2d 32 35 36 a4 01 67 53 43 50 5f
INFO:            42 4c 31 05 58 20 53 78 79 63 07 53 5d f3 ec 8d
INFO:            8b 15 a2 e2 dc 56 41 41 9c 3d 30 60 cf e3 22 38
INFO:            c0 fa 97 3f 7a a3 02 58 20 10 12 2e 85 6b 3f cd
INFO:            49 f0 63 63 63 17 47 61 49 cb 73 0a 1a a1 cf aa
INFO:            d8 18 55 2b 72 f5 6d 6f 68 06 67 73 68 61 2d 32
INFO:            35 36 a4 01 67 53 43 50 5f 42 4c 32 05 58 20 f1
INFO:            4b 49 87 90 4b cb 58 14 e4 45 9a 05 7e d4 d2 0f
INFO:            58 a6 33 15 22 88 a7 61 21 4d cd 28 78 0b 56 02
INFO:            58 20 aa 67 a1 69 b0 bb a2 17 aa 0a a8 8a 65 34
INFO:            69 20 c8 4c 42 44 7c 36 ba 5f 7e a6 5f 42 2c 1f
INFO:            e5 d8 06 67 73 68 61 2d 32 35 36 a4 01 67 41 50
INFO:            5f 42 4c 33 31 05 58 20 53 78 79 63 07 53 5d f3
INFO:            ec 8d 8b 15 a2 e2 dc 56 41 41 9c 3d 30 60 cf e3
INFO:            22 38 c0 fa 97 3f 7a a3 02 58 20 2e 6d 31 a5 98
INFO:            3a 91 25 1b fa e5 ae fa 1c 0a 19 d8 ba 3c f6 01
INFO:            d0 e8 a7 06 b4 cf a9 66 1a 6b 8a 06 67 73 68 61
INFO:            2d 32 35 36 a4 01 63 52 4d 4d 05 58 20 53 78 79
INFO:            63 07 53 5d f3 ec 8d 8b 15 a2 e2 dc 56 41 41 9c
INFO:            3d 30 60 cf e3 22 38 c0 fa 97 3f 7a a3 02 58 20
INFO:            a1 fb 50 e6 c8 6f ae 16 79 ef 33 51 29 6f d6 71
INFO:            34 11 a0 8c f8 dd 17 90 a4 fd 05 fa e8 68 81 64
INFO:            06 67 73 68 61 2d 32 35 36 a4 01 69 48 57 5f 43
INFO:            4f 4e 46 49 47 05 58 20 53 78 79 63 07 53 5d f3
INFO:            ec 8d 8b 15 a2 e2 dc 56 41 41 9c 3d 30 60 cf e3
INFO:            22 38 c0 fa 97 3f 7a a3 02 58 20 1a 25 24 02 97
INFO:            2f 60 57 fa 53 cc 17 2b 52 b9 ff ca 69 8e 18 31
INFO:            1f ac d0 f3 b0 6e ca ae f7 9e 17 06 67 73 68 61
INFO:            2d 32 35 36 a4 01 69 46 57 5f 43 4f 4e 46 49 47
INFO:            05 58 20 53 78 79 63 07 53 5d f3 ec 8d 8b 15 a2
INFO:            e2 dc 56 41 41 9c 3d 30 60 cf e3 22 38 c0 fa 97
INFO:            3f 7a a3 02 58 20 9a 92 ad bc 0c ee 38 ef 65 8c
INFO:            71 ce 1b 1b f8 c6 56 68 f1 66 bf b2 13 64 4c 89
INFO:            5c cb 1a d0 7a 25 06 67 73 68 61 2d 32 35 36 a4
INFO:            01 6c 54 42 5f 46 57 5f 43 4f 4e 46 49 47 05 58
INFO:            20 53 78 79 63 07 53 5d f3 ec 8d 8b 15 a2 e2 dc
INFO:            56 41 41 9c 3d 30 60 cf e3 22 38 c0 fa 97 3f 7a
INFO:            a3 02 58 20 23 89 03 18 0c c1 04 ec 2c 5d 8b 3f
INFO:            20 c5 bc 61 b3 89 ec 0a 96 7d f8 cc 20 8c dc 7c
INFO:            d4 54 17 4f 06 67 73 68 61 2d 32 35 36 a4 01 6d
INFO:            53 4f 43 5f 46 57 5f 43 4f 4e 46 49 47 05 58 20
INFO:            53 78 79 63 07 53 5d f3 ec 8d 8b 15 a2 e2 dc 56
INFO:            41 41 9c 3d 30 60 cf e3 22 38 c0 fa 97 3f 7a a3
INFO:            02 58 20 e6 c2 1e 8d 26 0f e7 18 82 de bd b3 39
INFO:            d2 40 2a 2c a7 64 85 29 bc 23 03 f4 86 49 bc e0
INFO:            38 00 17 06 67 73 68 61 2d 32 35 36 58 60 31 d0
INFO:            4d 52 cc de 95 2c 1e 32 cb a1 81 88 5a 40 b8 cc
INFO:            38 e0 52 8c 1e 89 58 98 07 64 2a a5 e3 f2 bc 37
INFO:            f9 53 74 50 6b ff 4d 2e 4b e7 06 3c 4d 72 41 92
INFO:            70 c7 22 e8 d4 d9 3e e8 b6 c9 fa ce 3b 43 c9 76
INFO:            1a 49 94 1a b6 f3 8f fd ff 49 6a d4 63 b4 cb fa
INFO:            11 d8 3e 23 e3 1f 7f 62 32 9d e3 0c 1c c8
INFO:    DELEGATED ATTEST TEST END

JSON格式:

{"CCA_ATTESTATION_PROFILE": "tag:arm.com,2023:cca_platform#1.0.0","CCA_PLATFORM_CHALLENGE": "b'0D22E08A98469058486318283489BDB36F09DBEFEB1864DF433FA6E54EA2D711'","CCA_PLATFORM_IMPLEMENTATION_ID": "b'7F454C4602010100000000000000000003003E00010000005058000000000000'","CCA_PLATFORM_INSTANCE_ID": "b'0107060504030201000F0E0D0C0B0A090817161514131211101F1E1D1C1B1A1918'","CCA_PLATFORM_CONFIG": "b'CFCFCFCF'","CCA_PLATFORM_LIFECYCLE": "secured_3003","CCA_PLATFORM_HASH_ALGO_ID": "sha-256","CCA_PLATFORM_VERIFICATION_SERVICE": "https://veraison.example/.well-known/veraison/verification","CCA_PLATFORM_SW_COMPONENTS": [{"SW_COMPONENT_TYPE": "RSE_BL1_2","SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'","MEASUREMENT_VALUE": "b'9A271F2A916B0B6EE6CECB2426F0B3206EF074578BE55D9BC94F6F3FE3AB86AA'","CCA_SW_COMPONENT_HASH_ID": "sha-256"},{"SW_COMPONENT_TYPE": "RSE_BL2","SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'","MEASUREMENT_VALUE": "b'53C234E5E8472B6AC51C1AE1CAB3FE06FAD053BEB8EBFD8977B010655BFDD3C3'","CCA_SW_COMPONENT_HASH_ID": "sha-256"},{"SW_COMPONENT_TYPE": "RSE_S","SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'","MEASUREMENT_VALUE": "b'1121CFCCD5913F0A63FEC40A6FFD44EA64F9DC135C66634BA001D10BCF4302A2'","CCA_SW_COMPONENT_HASH_ID": "sha-256"},{"SW_COMPONENT_TYPE": "AP_BL1","SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'","MEASUREMENT_VALUE": "b'1571B5EC78BD68512BF7830BB6A2A44B2047C7DF57BCE79EB8A1C0E5BEA0A501'","CCA_SW_COMPONENT_HASH_ID": "sha-256"},{"SW_COMPONENT_TYPE": "AP_BL2","SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'","MEASUREMENT_VALUE": "b'10159BAF262B43A92D95DB59DAE1F72C645127301661E0A3CE4E38B295A97C58'","CCA_SW_COMPONENT_HASH_ID": "sha-256"},{"SW_COMPONENT_TYPE": "SCP_BL1","SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'","MEASUREMENT_VALUE": "b'10122E856B3FCD49F063636317476149CB730A1AA1CFAAD818552B72F56D6F68'","CCA_SW_COMPONENT_HASH_ID": "sha-256"},{"SW_COMPONENT_TYPE": "SCP_BL2","SIGNER_ID": "b'F14B4987904BCB5814E4459A057ED4D20F58A633152288A761214DCD28780B56'","MEASUREMENT_VALUE": "b'AA67A169B0BBA217AA0AA88A65346920C84C42447C36BA5F7EA65F422C1FE5D8'","CCA_SW_COMPONENT_HASH_ID": "sha-256"},{"SW_COMPONENT_TYPE": "AP_BL31","SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'","MEASUREMENT_VALUE": "b'2E6D31A5983A91251BFAE5AEFA1C0A19D8BA3CF601D0E8A706B4CFA9661A6B8A'","CCA_SW_COMPONENT_HASH_ID": "sha-256"},{"SW_COMPONENT_TYPE": "RMM","SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'","MEASUREMENT_VALUE": "b'A1FB50E6C86FAE1679EF3351296FD6713411A08CF8DD1790A4FD05FAE8688164'","CCA_SW_COMPONENT_HASH_ID": "sha-256"},{"SW_COMPONENT_TYPE": "HW_CONFIG","SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'","MEASUREMENT_VALUE": "b'1A252402972F6057FA53CC172B52B9FFCA698E18311FACD0F3B06ECAAEF79E17'","CCA_SW_COMPONENT_HASH_ID": "sha-256"},{"SW_COMPONENT_TYPE": "FW_CONFIG","SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'","MEASUREMENT_VALUE": "b'9A92ADBC0CEE38EF658C71CE1B1BF8C65668F166BFB213644C895CCB1AD07A25'","CCA_SW_COMPONENT_HASH_ID": "sha-256"},{"SW_COMPONENT_TYPE": "TB_FW_CONFIG","SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'","MEASUREMENT_VALUE": "b'238903180CC104EC2C5D8B3F20C5BC61B389EC0A967DF8CC208CDC7CD454174F'","CCA_SW_COMPONENT_HASH_ID": "sha-256"},{"SW_COMPONENT_TYPE": "SOC_FW_CONFIG","SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'","MEASUREMENT_VALUE": "b'E6C21E8D260FE71882DEBDB339D2402A2CA7648529BC2303F48649BCE0380017'","CCA_SW_COMPONENT_HASH_ID": "sha-256"}]
}

五、基于 RSE 的 DICE 保护环境(DPE)

DICE Protection Environment(DPE) 服务使得能够在隔离的执行环境中执行 DICE 指令。
它向客户端提供一个接口,以 CBOR 对象编码的方式发送 DICE 指令,作用于不透明的上下文句柄。
DPE 服务在其内部上下文上执行 DICE 派生和认证,而不会将 DICE 机密(私钥和 CDI)暴露在隔离环境之外。


5.1. DPE API

定义位置:

include/lib/psa/dice_protection_environment.h

API 原型如下:

dpe_error_t
dpe_derive_context(int      context_handle,uint32_t cert_id,bool     retain_parent_context,bool     allow_new_context_to_derive,bool     create_certificate,const DiceInputValues *dice_inputs,int32_t  target_locality,bool     return_certificate,bool     allow_new_context_to_export,bool     export_cdi,int     *new_context_handle,int     *new_parent_context_handle,uint8_t *new_certificate_buf,size_t   new_certificate_buf_size,size_t  *new_certificate_actual_size,uint8_t *exported_cdi_buf,size_t   exported_cdi_buf_size,size_t  *exported_cdi_actual_size);

5.2. 构建时配置选项

  • MEASURED_BOOT:启用可信启动功能。

  • DICE_PROTECTION_ENVIRONMENT:布尔值标志,用于在启用 RSE 可信启动时,指定是否使用 DPE 作为后端。默认值为 0。若设置为 1,则可信启动过程中收集的度量值及其元数据将发送至 DPE 进行存储和处理。

  • DPE_ALG_ID:指定测量镜像所使用的哈希算法,默认值为 sha-256。


5.3. 示例证书链

参见:

plat/arm/board/tc/tc_dpe.h


六、RSE OTP 资产管理

RSE 为 AP 提供对 OTP 中资产的访问权限,包括用于镜像签名验证的密钥,以及用于回滚保护的非易失性计数器。


6.1. 非易失性计数器 API

AP 与 RSE 之间用于获取和递增非易失性计数器的接口如下:

定义位置:

include/lib/psa/rse_platform_api.h

psa_status_t rse_platform_nv_counter_increment(uint32_t counter_id)psa_status_t rse_platform_nv_counter_read(uint32_t counter_id,uint32_t size, uint8_t *val)

该服务允许读取/递增 ARM CCA 平台上使用的以下三种非易失性计数器:

  • 用于 CCA 固件(BL2、BL31、RMM)的计数器;

  • 用于安全固件的计数器;

  • 用于非安全固件的计数器。


6.2. 公钥 API

AP 与 RSE 之间用于读取 ROTPK(Root of Trust Public Key)的接口如下:

定义位置:

include/lib/psa/rse_platform_api.h

psa_status_t rse_platform_key_read(enum rse_key_id_builtin_t key,uint8_t *data, size_t data_size, size_t *data_length)

该服务允许读取 ARM CCA 平台上使用的以下三种 ROTPK:

  • 用于 CCA 固件(BL2、BL31、RMM)的 ROTPK;

  • 用于安全固件的 ROTPK;

  • 用于非安全固件的 ROTPK。


6.3. 获取熵的 API

AP 与 RSE 之间用于读取熵值的接口如下:

定义位置:

include/lib/psa/rse_platform_api.h

psa_status_t rse_platform_get_entropy(uint8_t *data, size_t data_size)

该服务允许读取由 RSE 生成的熵值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/85897.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/85897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch、Faiss、Milvus在向量索引实现上的核心差

Faiss、Elasticsearch(ES)和Milvus在向量索引实现上的核心差异主要体现在架构定位、索引技术、扩展性及适用场景上,具体对比如下: 一、架构设计与定位‌ ‌维度‌‌Faiss‌‌Elasticsearch‌‌Milvus‌‌核心定位‌单机向量索引…

iot-dc3 项目windows本地运行保姆喂奶级教程

一.源码拉取 当前时间:2025年06月18日12点02分 后台接口服务:https://gitee.com/pnoker/iot-dc3.git 前端:https://gitee.com/pnoker/iot-dc3-web.git 请自行拉取至本地。 二.本地环境准备 其他基础环境先不讲了,如有需要请留言。 idea + VS Code。 IntelliJ IDEA 2024.2.…

内部网关协议配置实验

一:静态路由 简述:在华为路由器中,使用ip route-static命令配置静态路由。一条静态路由主要包含以下要素。 目的地址:数据包要到达的目标IP地址 子网掩码:用于指定目的地址的网络部分和主机部分 下一跳地址&#xff08…

大模型应用:如何使用Langchain+Qwen部署一套Rag检索系统

一、TL;DR 从0-1使用qwen chat model langchain的链式架构搭建一套rag系统详细介绍了Langchain的工具链的调用流程简单介绍了可能会出现什么问题 二、方法 参考开源链接:https://github.com/Aphasia0515/self_llm/ 2.1 硬件和软件依赖 类型需求备注…

决策树:化繁为简的智能决策利器

本文来自「大千AI助手」技术实战系列,专注用真话讲技术,拒绝过度包装。 想象一个相亲决策过程: 对方收入 > 30万? → 是 → 见面否 → 颜值高? → 是 → 先聊聊否 → 放弃 这种层层递进的判断结构,正是…

html中的盒子标签div标签,有序列表,无序列表

div标签 div标签对于分析数据很重要&#xff0c;因为数据在页面中展示是以区域的形式展示的&#xff0c;而查找数据需要先找到盒子名称在继续向下找。前端页面布局中有两种布局方式&#xff0c;一种是通过表格布局&#xff0c;一种是通过divcss来布局。 <!DOCTYPE html>…

【Redis】解码Redis中hash类型:理解基础命令,以及内部编码方式和使用场景

&#x1f4da;️前言 &#x1f31f;&#x1f31f;&#x1f31f;精彩读导 本次我们将全面剖析Redis的核心技术要点&#xff0c;包括其丰富的数据类型体系、高效的编码方式以及秒级响应的性能奥秘。对于渴望深入理解Redis底层机制的技术爱好者&#xff0c;这是一次难得的学习机会…

AI工具在学术写作中的伦理边界与诚信规范的平衡

AI写作助手的兴起与争议 人工智能技术的飞速发展&#xff0c;学境思源&#xff0c;ChatGPT、Grok、Claude 等AI写作工具逐渐走入高校师生的视野。一键生成论文初稿&#xff01;从课程作业到毕业论文&#xff0c;不少学生已经尝试让AI参与写作过程&#xff0c;希望借此提升效率…

课程专注度分析系统项目

前端代码: <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>课堂专注度分析系统 - 科技…

区块链是什么

区块链的本质与机制 1. 核心定义 区块链 加密的分布式记账技术&#xff0c;融合密码学、网络学、金融学三大学科。 去中心化&#xff1a;数据存储于全网节点&#xff08;如百万台计算机&#xff09;&#xff0c;而非单一数据库。不可篡改&#xff1a;修改数据需控制全网51%以…

用可观测工具高效定位和查找设计中深度隐藏的bug

软件仿真拥有最佳的信号可见性和调试灵活性,被大多数工程师熟练使用,能够高效捕获很多显而易见的常见错误。 然而,由软件实现的数字仿真过程运行速度有限,很难做到100%代码覆盖。导致那些深度隐藏的设计问题,将不可避免的逃逸,只能以FPGA在线调试方式解决。 01 为什么全…

华为OD-2024年E卷-字符串化繁为简[200分] -- python

问题描述&#xff1a; 给定一个输入字符串&#xff0c;字符串只可能由英文字母(a~z、A~Z) 和左右小括号((、))组成。当字符串里存在小括号时&#xff0c;小括号是成对的&#xff0c;可以有一个或多个小括号对&#xff0c;小括号对不会嵌套&#xff0c;小括号对内可以包含1个或…

使用sealos安装k8s

一、准备工作&#xff08;所有节点需执行&#xff09;​ 1、系统要求 操作系统&#xff1a;本文为Ubuntu 20.0.4 配置&#xff1a;不同主机名、时间同步、SSH 免密互通、关闭防火墙/SELinux/swap。 资源&#xff1a;建议 ≥2核 CPU、2GB 内存&#xff08;生产环境需更高&am…

Pytorch 实战四 VGG 网络训练

系列文章目录 文章目录 系列文章目录前言一、源码1. 解决线程冲突2.代码框架 二、代码详细介绍1.基础定义2. epoch 的定义3. 每组图片的训练和模型保存 前言 前面我们已经完成了数据集的制作&#xff0c;VGG 网络的搭建&#xff0c;现在进行网络模型的训练。 一、源码 import t…

课程专注度分析系统文档

一、项目概述 本项目基于 Flask 框架开发&#xff0c;结合计算机视觉技术&#xff08;利用 YOLOv10 等模型 &#xff09;&#xff0c;实现对课堂视频的智能分析。可检测视频中学生手机使用情况、面部表情&#xff08;专注、分心等 &#xff09;&#xff0c;统计专注度、手机使…

中国设计 全球审美 | 安贝斯新产品发布会:以东方美学开辟控制台仿生智造新纪元

6月17日&#xff0c;安贝斯&#xff08;武汉&#xff09;控制技术有限公司&#xff08;以下简称“安贝斯”&#xff09;在武汉隆重举行“新产品发布暨协会联合创新峰会”。近百位来自政府机构、行业协会、行业用户及战略合作伙伴的嘉宾齐聚现场&#xff0c;共同见证以“中国设计…

在微信小程序wxml文件调用函数实现时间转换---使用wxs模块实现

1. 创建 WXS 模块文件&#xff08;推荐单独存放&#xff09; 在项目目录下新建 utils.wxs 文件&#xff0c;编写时间转换逻辑&#xff1a; // utils.wxs module.exports {// 将毫秒转换为分钟&#xff08;保留1位小数&#xff09;convertToMinutes: function(ms) {if (typeo…

ByteMD 插件系统详解

ByteMD 插件系统详解 ByteMD 的插件系统是其强大扩展性的核心。它允许开发者在 Markdown 解析、AST 转换、HTML 渲染、以及编辑器 UI 交互的各个阶段注入自定义逻辑。这得益于 ByteMD 深度集成了 unified 处理器和其丰富的生态系统&#xff08;remark 用于 Markdown&#xff0c…

每日一练之 Lua 表

Lua 的 table 是什么数据结构&#xff1f;如何创建和访问&#xff1f; 数据结构:Lua的table是一种哈希表&#xff0c;使用键值对存储数据&#xff0c;支持动态扩容 创建方式: local t1 {} local t2 {10,20,30} local t3 {name"Alice",age25}访问方式&#xff1a…

实现自动胡批量抓取唯品会商品详情数据的途径分享(官方API、网页爬虫)

在电商领域&#xff0c;数据就是企业的核心资产。无论是市场分析、竞品研究&#xff0c;还是精准营销&#xff0c;都离不开对大量商品详情数据的深入挖掘。唯品会作为知名的电商平台&#xff0c;其丰富的商品信息对于众多从业者而言极具价值。本文将详细探讨实现自动批量抓取唯…