運行時安全引擎RSE

安全之安全(security2)博客目錄導讀

目錄

一、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
英文地址,請注明出處:http://en.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;其豐富的商品信息對于眾多從業者而言極具價值。本文將詳細探討實現自動批量抓取唯…