可信啟動與fTPM的交互驗證(概念驗證)

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

目錄

一、組件構成

二、Arm FVP平臺PoC構建

三、在Armv8-A Foundation FVP上運行PoC

四、微調fTPM TA


可信啟動(Measured Boot)是通過密碼學方式度量啟動階段代碼及關鍵數據(例如使用TPM芯片)的過程,以便后續對系統安全狀態進行驗證。

當前TF-A集成的驅動支持多種后端存儲方式,每種方式采用不同的測量值存儲機制。本節重點討論TCG事件日志后端,該后端將測量值存儲在安全內存中。

詳見可信啟動設計文檔。

該驅動還提供將事件日志傳遞至普通世界的機制。

本手冊提供的概念驗證(PoC)構建指南,旨在演示如何將可信啟動與基于OP-TEE實現的fTPM(fTPM)服務結合使用。

【注意】本文檔的構建指南僅用于展示TF-A可信啟動如何與第三方(f)TPM服務交互,內容盡可能保持通用性。不同平臺可能存在不同需求和配置(例如采用不同SHA算法),也可能使用不同類型的TPM服務(甚至其他類型的證明服務),因此部分指南可能不適用于特定場景。

一、組件構成

該PoC基于OP-TEE工具鏈構建(自提交cf56848起支持在Foundation模型上運行帶可信啟動功能的TF-A)。該工具鏈生成的鏡像集包含驗證事件日志正確性所需的所有組件,其中一個鏡像將集成第三方fTPM服務用于處理事件日志。

選擇OP-TEE工具鏈構建PoC主要出于便利性考慮。由于fTPM服務是OP-TEE可信應用(TA),可輕松將其編譯支持添加到工具鏈中。

與可信啟動/fTPM功能密切相關的核心組件包括:

  • OP-TEE:本PoC使用的fTPM服務作為OP-TEE TA運行,因此需包含OP-TEE OS鏡像。OP-TEE 3.9.0版本通過實現PTA_SYSTEM_GET_TPM_EVENT_LOG系統調用,支持從TF-A獲取事件日志副本。OP-TEE通過解析TF-A傳遞的DTB綁定信息定位事件日志(詳見事件日志DTB綁定屬性說明)。

  • fTPM服務:采用微軟ms-tpm-20-ref參考實現中的Aarch32架構示例,該服務已擴展支持在啟動時處理可信啟動事件日志,并通過上述系統調用獲取日志副本。

【注意】Arm不提供fTPM實現。本PoC使用的第三方fTPM服務經修改支持TF-A可信啟動,其輸出正確性驗證超出本手冊范圍。

  • TPM內核模塊:用于將用戶空間請求轉發至安全世界。

  • tpm2-tools工具集:用于讀取fTPM服務中的PCR測量值。

二、Arm FVP平臺PoC構建

如前所述,此PoC基于OP-TEE工具包,具有一些擴展以啟用Measured Boot和fTPM服務。因此,我們可以依靠這些指令來構建原始的OP-TEE工具包。一般來說,以下步驟就足夠了:

  1. 首先,按照獲取和構建解決方案的指導來構建OP-TEE工具包。在步驟3中,您需要從主分支獲取FVP平臺的manifest:

    $ repo init -u https://github.com/OP-TEE/manifest.git -m fvp.xml
  2. 接下來,您應該獲得Armv8-A Foundation Platform (For Linux Hosts Only)。二進制文件應該解壓縮到repo樹的根目錄,即像這樣:<fvp-project>/Foundation_Platformpkg。最后,在克隆所有源代碼,獲得工具鏈并“安裝”Foundation_Platformpkg之后,你應該有一個看起來像這樣的文件夾結構:

$ ls -la
total 80
drwxrwxr-x 20 tf-a_user tf-a_user 4096 Jul  1 12:16 .
drwxr-xr-x 23 tf-a_user tf-a_user 4096 Jul  1 10:40 ..
drwxrwxr-x 12 tf-a_user tf-a_user 4096 Jul  1 10:45 build
drwxrwxr-x 16 tf-a_user tf-a_user 4096 Jul  1 12:16 buildroot
drwxrwxr-x 51 tf-a_user tf-a_user 4096 Jul  1 10:45 edk2
drwxrwxr-x  6 tf-a_user tf-a_user 4096 Jul  1 12:14 edk2-platforms
drwxr-xr-x  7 tf-a_user tf-a_user 4096 Jul  1 10:52 Foundation_Platformpkg
drwxrwxr-x 17 tf-a_user tf-a_user 4096 Jul  2 10:40 grub
drwxrwxr-x 25 tf-a_user tf-a_user 4096 Jul  2 10:39 linux
drwxrwxr-x 15 tf-a_user tf-a_user 4096 Jul  1 10:45 mbedtls
drwxrwxr-x  6 tf-a_user tf-a_user 4096 Jul  1 10:45 ms-tpm-20-ref
drwxrwxr-x  8 tf-a_user tf-a_user 4096 Jul  1 10:45 optee_client
drwxrwxr-x 10 tf-a_user tf-a_user 4096 Jul  1 10:45 optee_examples
drwxrwxr-x 12 tf-a_user tf-a_user 4096 Jul  1 12:13 optee_os
drwxrwxr-x  8 tf-a_user tf-a_user 4096 Jul  1 10:45 optee_test
drwxrwxr-x  7 tf-a_user tf-a_user 4096 Jul  1 10:45 .repo
drwxrwxr-x  4 tf-a_user tf-a_user 4096 Jul  1 12:12 toolchains
drwxrwxr-x 21 tf-a_user tf-a_user 4096 Jul  1 12:15 trusted-firmware-a

??????3. 現在進入ms-tpm-20-ref并獲取其依賴項:

$ cd ms-tpm-20-ref
$ git submodule init
$ git submodule update
Submodule path 'external/wolfssl': checked out '9c87f979a7f1d3a6d786b260653d566c1d31a1c4'

??????4.現在,您應該能夠繼續執行“獲取并構建解決方案(Get and build the solution)”說明中的第5步。為了啟用對Measured Boot的支持,您需要設置以下構建選項:

$ MEASURED_BOOT=y MEASURED_BOOT_FTPM=y make -j `nproc`

【注意】:構建過程可能需要很長時間。強烈建議傳遞-j選項以使進程運行得更快。

在這一步之后,您應該已經準備好運行鏡像了。

三、在Armv8-A Foundation FVP上運行PoC

構建好所有內容后,現在可以運行鏡像:

$ make run-only

【注意】:使用make run將構建并運行鏡像,可以使用它來代替簡單的make。但是,一旦構建了鏡像,建議使用make run-only來避免重新運行所有構建規則,這將花費時間。

當啟動FVP(固定虛擬平臺)時,會出現兩個終端窗口。FVP terminal_0是用戶空間終端,而FVP terminal_1是安全世界(Secure World)的對應終端(例如可信應用TAs的日志將在此處輸出)。

使用root用戶登錄系統鏡像shell(無需密碼),隨后可執行ftpm命令。該命令是一個組合別名,其功能包括:

  1. 加載ftpm內核模塊

  2. 調用tpm2_pcrread訪問fTPM服務以讀取PCR值

當加載ftpm內核模塊時,fTPM可信應用(TA)會被載入安全世界。該TA隨后會請求獲取引導過程中生成的事件日志(Event Log)副本,從而首先檢索并記錄日志中的所有條目。

【注意】對于這個PoC,在BL33和NT_FW_CONFIG之后加載的任何內容都不會記錄在事件日志中。

安全世界終端應該顯示fTPM服務的調試日志,包括正在處理的事件日志中可用的所有測量:

M/TA: Preparing to extend the following TPM Event Log:
M/TA: TCG_EfiSpecIDEvent:
M/TA:   PCRIndex           : 0
M/TA:   EventType          : 3
M/TA:   Digest             : 00
M/TA:                      : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
M/TA:                      : 00 00 00
M/TA:   EventSize          : 33
M/TA:   Signature          : Spec ID Event03
M/TA:   PlatformClass      : 0
M/TA:   SpecVersion        : 2.0.2
M/TA:   UintnSize          : 1
M/TA:   NumberOfAlgorithms : 1
M/TA:   DigestSizes        :
M/TA:     #0 AlgorithmId   : SHA256
M/TA:        DigestSize    : 32
M/TA:   VendorInfoSize     : 0
M/TA: PCR_Event2:
M/TA:   PCRIndex           : 0
M/TA:   EventType          : 3
M/TA:   Digests Count      : 1
M/TA:     #0 AlgorithmId   : SHA256
M/TA:        Digest        : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
M/TA:                      : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
M/TA:   EventSize          : 17
M/TA:   Signature          : StartupLocality
M/TA:   StartupLocality    : 0
M/TA: PCR_Event2:
M/TA:   PCRIndex           : 0
M/TA:   EventType          : 1
M/TA:   Digests Count      : 1
M/TA:     #0 AlgorithmId   : SHA256
M/TA:        Digest        : 58 26 32 6e 64 45 64 da 45 de 35 db 96 fd ed 63
M/TA:                      : 2a 6a d4 0d aa 94 b0 b1 55 e4 72 e7 1f 0a e0 d5
M/TA:   EventSize          : 5
M/TA:   Event              : BL_2
M/TA: PCR_Event2:
M/TA:   PCRIndex           : 0
M/TA:   EventType          : 1
M/TA:   Digests Count      : 1
M/TA:     #0 AlgorithmId   : SHA256
M/TA:        Digest        : cf f9 7d a3 5c 73 ac cb 7b a0 25 80 6a 6e 50 a5
M/TA:                      : 6b 2e d2 8c c9 36 92 7d 46 c5 b9 c3 a4 6c 51 7c
M/TA:   EventSize          : 6
M/TA:   Event              : BL_31
M/TA: PCR_Event2:
M/TA:   PCRIndex           : 0
M/TA:   EventType          : 1
M/TA:   Digests Count      : 1
M/TA:     #0 AlgorithmId   : SHA256
M/TA:        Digest        : 23 b0 a3 5d 54 d9 43 1a 5c b9 89 63 1c da 06 c2
M/TA:                      : e5 de e7 7e 99 17 52 12 7d f7 45 ca 4f 4a 39 c0
M/TA:   EventSize          : 10
M/TA:   Event              : HW_CONFIG
M/TA: PCR_Event2:
M/TA:   PCRIndex           : 0
M/TA:   EventType          : 1
M/TA:   Digests Count      : 1
M/TA:     #0 AlgorithmId   : SHA256
M/TA:        Digest        : 4e e4 8e 5a e6 50 ed e0 b5 a3 54 8a 1f d6 0e 8a
M/TA:                      : ea 0e 71 75 0e a4 3f 82 76 ce af cd 7c b0 91 e0
M/TA:   EventSize          : 14
M/TA:   Event              : SOC_FW_CONFIG
M/TA: PCR_Event2:
M/TA:   PCRIndex           : 0
M/TA:   EventType          : 1
M/TA:   Digests Count      : 1
M/TA:     #0 AlgorithmId   : SHA256
M/TA:        Digest        : 01 b0 80 47 a1 ce 86 cd df 89 d2 1f 2e fc 6c 22
M/TA:                      : f8 19 ec 6e 1e ec 73 ba 5a be d0 96 e3 5f 6d 75
M/TA:   EventSize          : 6
M/TA:   Event              : BL_32
M/TA: PCR_Event2:
M/TA:   PCRIndex           : 0
M/TA:   EventType          : 1
M/TA:   Digests Count      : 1
M/TA:     #0 AlgorithmId   : SHA256
M/TA:        Digest        : 5d c6 ef 35 5a 90 81 b4 37 e6 3b 52 da 92 ab 8e
M/TA:                      : d9 6e 93 98 2d 40 87 96 1b 5a a7 ee f1 f4 40 63
M/TA:   EventSize          : 18
M/TA:   Event              : BL32_EXTRA1_IMAGE
M/TA: PCR_Event2:
M/TA:   PCRIndex           : 0
M/TA:   EventType          : 1
M/TA:   Digests Count      : 1
M/TA:     #0 AlgorithmId   : SHA256
M/TA:        Digest        : 39 b7 13 b9 93 db 32 2f 1b 48 30 eb 2c f2 5c 25
M/TA:                      : 00 0f 38 dc 8e c8 02 cd 79 f2 48 d2 2c 25 ab e2
M/TA:   EventSize          : 6
M/TA:   Event              : BL_33
M/TA: PCR_Event2:
M/TA:   PCRIndex           : 0
M/TA:   EventType          : 1
M/TA:   Digests Count      : 1
M/TA:     #0 AlgorithmId   : SHA256
M/TA:        Digest        : 25 10 60 5d d4 bc 9d 82 7a 16 9f 8a cc 47 95 a6
M/TA:                      : fd ca a0 c1 2b c9 99 8f 51 20 ff c6 ed 74 68 5a
M/TA:   EventSize          : 13
M/TA:   Event              : NT_FW_CONFIG

這些日志對應于TF-A在測量的引導過程中存儲的測量值,因此,它們應該與TF-A在啟動過程中轉儲的日志相匹配。這些可以在terminal_0上看到:

NOTICE:  Booting Trusted Firmware
NOTICE:  BL1: v2.5(release):v2.5
NOTICE:  BL1: Built : 10:41:20, Jul  2 2021
NOTICE:  BL1: Booting BL2
NOTICE:  BL2: v2.5(release):v2.5
NOTICE:  BL2: Built : 10:41:20, Jul  2 2021
NOTICE:  TCG_EfiSpecIDEvent:
NOTICE:    PCRIndex           : 0
NOTICE:    EventType          : 3
NOTICE:    Digest             : 00
NOTICE:                       : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
NOTICE:                       : 00 00 00
NOTICE:    EventSize          : 33
NOTICE:    Signature          : Spec ID Event03
NOTICE:    PlatformClass      : 0
NOTICE:    SpecVersion        : 2.0.2
NOTICE:    UintnSize          : 1
NOTICE:    NumberOfAlgorithms : 1
NOTICE:    DigestSizes        :
NOTICE:      #0 AlgorithmId   : SHA256
NOTICE:         DigestSize    : 32
NOTICE:    VendorInfoSize     : 0
NOTICE:  PCR_Event2:
NOTICE:    PCRIndex           : 0
NOTICE:    EventType          : 3
NOTICE:    Digests Count      : 1
NOTICE:      #0 AlgorithmId   : SHA256
NOTICE:         Digest        : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
NOTICE:                       : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
NOTICE:    EventSize          : 17
NOTICE:    Signature          : StartupLocality
NOTICE:    StartupLocality    : 0
NOTICE:  PCR_Event2:
NOTICE:    PCRIndex           : 0
NOTICE:    EventType          : 1
NOTICE:    Digests Count      : 1
NOTICE:      #0 AlgorithmId   : SHA256
NOTICE:         Digest        : 58 26 32 6e 64 45 64 da 45 de 35 db 96 fd ed 63
NOTICE:                       : 2a 6a d4 0d aa 94 b0 b1 55 e4 72 e7 1f 0a e0 d5
NOTICE:    EventSize          : 5
NOTICE:    Event              : BL_2
NOTICE:  PCR_Event2:
NOTICE:    PCRIndex           : 0
NOTICE:    EventType          : 1
NOTICE:    Digests Count      : 1
NOTICE:      #0 AlgorithmId   : SHA256
NOTICE:         Digest        : cf f9 7d a3 5c 73 ac cb 7b a0 25 80 6a 6e 50 a5
NOTICE:                       : 6b 2e d2 8c c9 36 92 7d 46 c5 b9 c3 a4 6c 51 7c
NOTICE:    EventSize          : 6
NOTICE:    Event              : BL_31
NOTICE:  PCR_Event2:
NOTICE:    PCRIndex           : 0
NOTICE:    EventType          : 1
NOTICE:    Digests Count      : 1
NOTICE:      #0 AlgorithmId   : SHA256
NOTICE:         Digest        : 23 b0 a3 5d 54 d9 43 1a 5c b9 89 63 1c da 06 c2
NOTICE:                       : e5 de e7 7e 99 17 52 12 7d f7 45 ca 4f 4a 39 c0
NOTICE:    EventSize          : 10
NOTICE:    Event              : HW_CONFIG
NOTICE:  PCR_Event2:
NOTICE:    PCRIndex           : 0
NOTICE:    EventType          : 1
NOTICE:    Digests Count      : 1
NOTICE:      #0 AlgorithmId   : SHA256
NOTICE:         Digest        : 4e e4 8e 5a e6 50 ed e0 b5 a3 54 8a 1f d6 0e 8a
NOTICE:                       : ea 0e 71 75 0e a4 3f 82 76 ce af cd 7c b0 91 e0
NOTICE:    EventSize          : 14
NOTICE:    Event              : SOC_FW_CONFIG
NOTICE:  PCR_Event2:
NOTICE:    PCRIndex           : 0
NOTICE:    EventType          : 1
NOTICE:    Digests Count      : 1
NOTICE:      #0 AlgorithmId   : SHA256
NOTICE:         Digest        : 01 b0 80 47 a1 ce 86 cd df 89 d2 1f 2e fc 6c 22
NOTICE:                       : f8 19 ec 6e 1e ec 73 ba 5a be d0 96 e3 5f 6d 75
NOTICE:    EventSize          : 6
NOTICE:    Event              : BL_32
NOTICE:  PCR_Event2:
NOTICE:    PCRIndex           : 0
NOTICE:    EventType          : 1
NOTICE:    Digests Count      : 1
NOTICE:      #0 AlgorithmId   : SHA256
NOTICE:         Digest        : 5d c6 ef 35 5a 90 81 b4 37 e6 3b 52 da 92 ab 8e
NOTICE:                       : d9 6e 93 98 2d 40 87 96 1b 5a a7 ee f1 f4 40 63
NOTICE:    EventSize          : 18
NOTICE:    Event              : BL32_EXTRA1_IMAGE
NOTICE:  PCR_Event2:
NOTICE:    PCRIndex           : 0
NOTICE:    EventType          : 1
NOTICE:    Digests Count      : 1
NOTICE:      #0 AlgorithmId   : SHA256
NOTICE:         Digest        : 39 b7 13 b9 93 db 32 2f 1b 48 30 eb 2c f2 5c 25
NOTICE:                       : 00 0f 38 dc 8e c8 02 cd 79 f2 48 d2 2c 25 ab e2
NOTICE:    EventSize          : 6
NOTICE:    Event              : BL_33
NOTICE:  PCR_Event2:
NOTICE:    PCRIndex           : 0
NOTICE:    EventType          : 1
NOTICE:    Digests Count      : 1
NOTICE:      #0 AlgorithmId   : SHA256
NOTICE:         Digest        : 25 10 60 5d d4 bc 9d 82 7a 16 9f 8a cc 47 95 a6
NOTICE:                       : fd ca a0 c1 2b c9 99 8f 51 20 ff c6 ed 74 68 5a
NOTICE:    EventSize          : 13
NOTICE:    Event              : NT_FW_CONFIG
NOTICE:  BL1: Booting BL31
NOTICE:  BL31: v2.5(release):v2.5
NOTICE:  BL31: Built : 10:41:20, Jul  2 2021

跟蹤fTPM啟動過程,我們可以看到事件日志中的所有測量都被擴展并記錄在適當的PCR中:

M/TA: TPM2_PCR_EXTEND_COMMAND returned value:
M/TA:   ret_tag = 0x8002, size = 0x00000013, rc = 0x00000000
M/TA: TPM2_PCR_EXTEND_COMMAND returned value:
M/TA:   ret_tag = 0x8002, size = 0x00000013, rc = 0x00000000
M/TA: TPM2_PCR_EXTEND_COMMAND returned value:
M/TA:   ret_tag = 0x8002, size = 0x00000013, rc = 0x00000000
M/TA: TPM2_PCR_EXTEND_COMMAND returned value:
M/TA:   ret_tag = 0x8002, size = 0x00000013, rc = 0x00000000
M/TA: TPM2_PCR_EXTEND_COMMAND returned value:
M/TA:   ret_tag = 0x8002, size = 0x00000013, rc = 0x00000000
M/TA: TPM2_PCR_EXTEND_COMMAND returned value:
M/TA:   ret_tag = 0x8002, size = 0x00000013, rc = 0x00000000
M/TA: TPM2_PCR_EXTEND_COMMAND returned value:
M/TA:   ret_tag = 0x8002, size = 0x00000013, rc = 0x00000000
M/TA: TPM2_PCR_EXTEND_COMMAND returned value:
M/TA:   ret_tag = 0x8002, size = 0x00000013, rc = 0x00000000
M/TA: TPM2_PCR_EXTEND_COMMAND returned value:
M/TA:   ret_tag = 0x8002, size = 0x00000013, rc = 0x00000000
M/TA: 9 Event logs processed

在加載fTPM TA之后,由fTPM別名發出的對insmod的調用返回,以加載fTPM內核模塊,然后通過tpm_pcrread命令讀取TPM PCRs。請注意,我們在這里只對SHA256日志感興趣,因為這是我們在TF-A上用于測量的算法(參見上面日志中的AlgorithmId字段):

sha256:
0 : 0xA6EB3A7417B8CFA9EBA2E7C22AD5A4C03CDB8F3FBDD7667F9C3EF2EA285A8C9F
1 : 0x0000000000000000000000000000000000000000000000000000000000000000
2 : 0x0000000000000000000000000000000000000000000000000000000000000000
3 : 0x0000000000000000000000000000000000000000000000000000000000000000
4 : 0x0000000000000000000000000000000000000000000000000000000000000000
5 : 0x0000000000000000000000000000000000000000000000000000000000000000
6 : 0x0000000000000000000000000000000000000000000000000000000000000000
7 : 0x0000000000000000000000000000000000000000000000000000000000000000
8 : 0x0000000000000000000000000000000000000000000000000000000000000000
9 : 0x0000000000000000000000000000000000000000000000000000000000000000
10: 0x0000000000000000000000000000000000000000000000000000000000000000
11: 0x0000000000000000000000000000000000000000000000000000000000000000
12: 0x0000000000000000000000000000000000000000000000000000000000000000
13: 0x0000000000000000000000000000000000000000000000000000000000000000
14: 0x0000000000000000000000000000000000000000000000000000000000000000
15: 0x0000000000000000000000000000000000000000000000000000000000000000
16: 0x0000000000000000000000000000000000000000000000000000000000000000
17: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
18: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
19: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
20: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
21: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
22: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
23: 0x0000000000000000000000000000000000000000000000000000000000000000

在這個PoC中,我們只對PCR0感興趣,它必須是非空的。這是因為引導進程記錄了這個PCR中的所有映像(參見上面事件日志中的PCRIndex字段)。此時其余的記錄必須為0。

【注意】:使用的fTPM服務只支持16個pcr,因此超過15個pcr的內容可以忽略。

【注意】:如前所述,Arm不提供fTPM實現,因此我們在這里不驗證PCR0的內容是否正確。對于這個PoC,我們只關注事件日志可以傳遞給第三方fTPM,并且它的記錄得到了適當的擴展。

四、微調fTPM TA

如前所述,OP-TEE工具包包括對構建第三方fTPM服務的支持。此服務的構建選項是為PoC量身定制的,并在構建環境變量FTPM_FLAGS中定義(請參閱<toolkit_home>/build/common.mk),但如果需要,可以修改它們以更好地適應特定場景。

測量引導支持最相關的選項是:

?CFG_TA_DEBUG:啟用Terminal_1控制臺的調試日志。

?CFG_TEE_TA_LOG_LEVEL:定義用于調試消息的日志級別。

?CFG_TA_MEASURED_BOOT:啟用對fTPM上測量引導的支持。

?CFG_TA_EVENT_LOG_SIZE:定義fTPM能夠存儲的大事件日志的大小(以字節為單位),因為這個緩沖區是在構建時分配的。這必須至少與TF-A生成的事件日志的大小相同。如果沒有定義這個構建選項,那么fTPM就會退回到1024字節的默認值,這對于這個PoC來說已經足夠了,所以這個變量沒有在FTPM_FLAGS中定義。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85911.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85911.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85911.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL Server基礎語句4:數據定義

文章目錄 一、數據庫與架構1.1 創建與刪除數據庫1.1.1 使用CREATE DATABASE語句創建數據庫1.1.2 使用DROP DATABASE語句刪除數據庫1.1.3 使用SSMS創建數據庫1.1.4 使用SSMS刪除數據庫 1.2 CREATE SCHEMA&#xff1a;創建新架構1.2.1 Schema簡介1.2.2 使用CREATE SCHEMA語句創建…

上門按摩app會員系統框架搭建

一、邏輯分析 用戶注冊與登錄&#xff1a; 新用戶需要提供基本信息&#xff0c;如姓名、手機號、郵箱等進行注冊。手機號用于接收驗證碼進行身份驗證&#xff0c;郵箱可用于密碼找回等功能。注冊成功后&#xff0c;用戶可以使用手機號 / 郵箱和密碼進行登錄。登錄時需要驗證用戶…

java項目打包成jar包,并給jmeter使用

1.新建項目 編寫代碼&#xff0c;導入必要的jar包&#xff0c; 右鍵點擊項目&#xff0c;然后export&#xff0c;選擇main函數&#xff0c; package utils; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.Random; …

【Qt開發】Qt音頻

Qt中&#xff0c;視頻播放的功能主要是通過 QMediaPlayer類和 QVideoWidget類來實現。在使用這兩個類時&#xff0c;需要在 .pro項目配置文件中添加對應的模塊——multimedia 和 multimediawidgets。 核心的API如下&#xff1a; 下面來模擬實現音頻文件的播放。 Widget::Widget…

橢球面上梯形面積的通用公式和圖幅公式

import numpy as np def ellipsoidal_trapezoid_area(a, b, phi1_deg, phi2_deg, delta_L_deg, is_map_sheetFalse): """ 計算橢球面上梯形面積的通用公式和圖幅公式 參數: a: 橢球長半軸&#xff08;米&#xff09; b: 橢球…

Pytest 入門:測試函數與測試類詳解

概述 在編寫自動化測試時,了解如何組織和管理測試用例是至關重要的。Pytest 提供了靈活的方式來定義測試函數和測試類,并支持多層次的設置(setup)和清理(teardown)機制,幫助你更高效地進行代碼驗證。本文將詳細介紹 測試函數 和 測試類 的概念、定義、注意點以及實際操…

大模型的部署簡單搭建

大模型的部署搭建 真的好久沒有進行博客的寫作了,原因,最近的自己生活有點小波動, 最近想想還是有空寫一篇文章,這篇文章的描述是學習的當下熱門AI 本期,介紹的也是AI相關的LLM(大語言模型) 這個好多人應該都是模糊的,包括我一開始沒有學習,就感覺牛逼的不行,今天我們親自部署實…

基于ssm英語學習交流平臺微信小程序源碼數據庫文檔

摘要 隨著信息技術在管理上越來越深入而廣泛的應用&#xff0c;管理信息系統的實施在技術上已逐步成熟。本文介紹了英語學習交流平臺小程序的開發全過程。通過分析英語學習交流平臺小程序管理的不足&#xff0c;創建了一個計算機管理英語學習交流平臺小程序的方案。文章介紹了英…

華為云Flexus+DeepSeek征文|在Dify-LLM平臺中開發童話故事精靈工作流AI Agent

華為云FlexusDeepSeek征文&#xff5c;在Dify-LLM平臺中開發童話故事精靈工作流AI Agent &#x1f31f;嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 總有人間一兩風&#xff0c;填我十萬八千夢。 &#x1f680; 路漫漫其修遠兮&#xff0c;吾將上下而求索。 目錄…

從實踐出發談如何開發一款好用的RTMP播放器

近幾年&#xff0c;RTMP 播放器市場涌現出大量“宣傳型”產品。各種“低延遲”“不卡頓”“跨平臺”幾乎成為標配口號&#xff0c;宣傳文案看起來精彩紛呈&#xff0c;實際項目落地時卻屢屢暴露問題&#xff1a;啟動緩慢、黑屏、音畫不同步&#xff0c;甚至連基本的穩定播放都無…

STM32F1\F4\H7 CubeMx 定時器配置

目錄 1 定時器使用 1.1 CubeMX 配置 1.1.1 創建工程 1.1.2 時鐘配置 1.1.3 定時器配置 1.1.4 GPIO 配置 1.1.5 工程管理 1.2 keil5 配置 1.2.1 添加代碼 1.2.2 修改配置 1.2.3 下載程序 2 PWM使用 2.1 CubeMX 配置 2.1.1 PWM 配置 2.1.2 周期\頻率計算方法 2.2…

2025中科院2區SCI-狀態優化算法Status-based Optimization-附Matlab免費代碼

近年來&#xff0c;現實世界的優化問題變得越來越復雜&#xff0c;挑戰了傳統確定性方法的有效性。本文介紹了基于狀態的優化&#xff08;SBO&#xff09;&#xff0c;這是一種受人類對地位提升的渴望啟發的高效算法。通過模擬個人如何接近、學習或從高地位人物那里獲得資源&am…

MySQL 啟動報錯 “The server quit without updating PID file“ 的全面解決方案(適用于 5.7/8.0 全版本)

摘要 在 MySQL 數據庫運維中&#xff0c;"The server quit without updating PID file" 是常見且棘手的啟動錯誤。本文結合 MySQL 官方文檔及實戰經驗&#xff0c;系統梳理該錯誤的 10 大核心成因與解決方案&#xff0c;覆蓋權限、配置、磁盤、SELinux 等多維度&…

運行時安全引擎RSE

安全之安全(security)博客目錄導讀 目錄 一、RSE 通信層 1.1 消息結構 1.2 源代碼文件 1.3 MHU 通信的 API 二、RSE 提供的運行時服務 2.1 運行時服務 API 2.2 軟件與 API 層次結構 三、基于 RSE 的 Measured Boot&#xff08;度量啟動&#xff09; 3.1 Measured Boo…

Elasticsearch、Faiss、Milvus在向量索引實現上的核心差

Faiss、Elasticsearch&#xff08;ES&#xff09;和Milvus在向量索引實現上的核心差異主要體現在架構定位、索引技術、擴展性及適用場景上&#xff0c;具體對比如下&#xff1a; 一、架構設計與定位? ?維度??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.…

內部網關協議配置實驗

一&#xff1a;靜態路由 簡述&#xff1a;在華為路由器中&#xff0c;使用ip route-static命令配置靜態路由。一條靜態路由主要包含以下要素。 目的地址&#xff1a;數據包要到達的目標IP地址 子網掩碼&#xff1a;用于指定目的地址的網絡部分和主機部分 下一跳地址&#xff08…

大模型應用:如何使用Langchain+Qwen部署一套Rag檢索系統

一、TL&#xff1b;DR 從0-1使用qwen chat model langchain的鏈式架構搭建一套rag系統詳細介紹了Langchain的工具鏈的調用流程簡單介紹了可能會出現什么問題 二、方法 參考開源鏈接&#xff1a;https://github.com/Aphasia0515/self_llm/ 2.1 硬件和軟件依賴 類型需求備注…

決策樹:化繁為簡的智能決策利器

本文來自「大千AI助手」技術實戰系列&#xff0c;專注用真話講技術&#xff0c;拒絕過度包裝。 想象一個相親決策過程&#xff1a; 對方收入 > 30萬&#xff1f; → 是 → 見面否 → 顏值高&#xff1f; → 是 → 先聊聊否 → 放棄 這種層層遞進的判斷結構&#xff0c;正是…

html中的盒子標簽div標簽,有序列表,無序列表

div標簽 div標簽對于分析數據很重要&#xff0c;因為數據在頁面中展示是以區域的形式展示的&#xff0c;而查找數據需要先找到盒子名稱在繼續向下找。前端頁面布局中有兩種布局方式&#xff0c;一種是通過表格布局&#xff0c;一種是通過divcss來布局。 <!DOCTYPE html>…