TPM2.0

TPM(Trusted Platform Module)是一種硬體安全晶片,其主要功能是提供安全的密碼和金鑰管理,並支持硬體層面的安全功能,以確保計算機系統的安全性。TPM 主要用於提供硬體級的安全功能,例如保護密碼、存儲敏感數據、驗證系統的完整性等。 TPM(Trusted Platform Module)在計算機安全方面扮演關鍵角色,主要有以下功能。

  1. 安全啟動過程通過確保系統的軟體和硬體完整性提供防範惡意攻擊的保護。
  2. 生成並安全存儲加密密鑰,用於保護敏感信息和確保通信安全。
  3. 基於硬體的加密功能提高性能並增強數據安全性。
  4. 支持遠程認證,確保遠程設備的配置完整性,加強設備間的安全通信和相互信任。

最常見的 TPM 功能是用於系統完整性測量及金鑰的建立與使用。 在系統開機程序期間,可以測量載入的開機程式碼 (包括韌體和作業系統元件) 並記錄在 TPM 中。 完整性測量可用來證明系統的啟動情況,以及確保只有在使用正確軟體來進行系統開機的情況下,才會使用 TPM 型金鑰。

TPM 可以分為三種類型

  1. dTPM(discrete TPM),即完全獨立於電腦之外的 TPM 計算模組,理論而言最為安全;
  2. fTPM(firmware TPM),又稱為韌體 TPM,通常內建於中央處理器之內,透過模擬方式實現 TPM 相關安全功能;而處理器內部的TPM,比如Intel 的平臺信任科技(PTT) 和 AMD 的 fTPM,則把金鑰存儲在主機板上的 SPI 閃存中。
  3. 整合式 TPM,將 TPM 晶片與其他電腦零組件進行整合,不過邏輯運算上分開。

AMD Ryzen 系統配置可能會間歇性地在位於主機板上的 SPI 閃存記憶體(SPIROM)中執行擴展 fTPM 相關記憶體事務,這可能導致系統交互或響應暫時暫停,直到事務完成為止。

TCG 在 TPM1.2 的設計中第一次嘗試解決以下產業界常見的問題:

  • 設備身份:在 TPM 發布之前,設備通常以 MAC 位址和 IP 位址作為自己的身份,這並不安全。
  • 金鑰的安全產生:具備一個硬體隨機數產生器對金鑰的產生是非常有利的。 許多安全解決方案因為密鑰產生的品質不高而被破解。
  • 金鑰的安全儲存:TPM 能夠安全儲存高品質的金鑰並讓它們免於軟體攻擊,這是TPM帶給設備的重大安全優勢。
  • NVRAM 儲存:當 IT 組織收到一個全新裝置時,它們常常會根據自己的標準流程格式化硬碟並重新部署軟體。 NVRAM 可以讓 TPM 一直保存憑證而不依賴外部儲存。
  • 設備健康認證:在 TPM 出現之前,IT通常使用軟體來偵測系統的健康(安全)狀態。 但是,當整個軟體系統被攻破的情況下,軟體的報告就不可信賴了。

TPM2.0 在 1.2 版本的基礎上又增加了更多:

  • 演算法彈性:因為有些演算法的強度其實比預期弱,所以未來可能需要修改。 TPM2.0 可以在不用修改規範前提下修改演算法,這一點已經多次提到了。
  • 增強的授權模式:這個功能透過增加授權策略的方式統一了 TPM 實體的授權方式。 授權策略可以支援多元素多使用者認證。 除此之外,還包括策略管理的功能。
  • 快速密鑰載入:密鑰載入是一個很耗時的過程,因為密鑰常常被加密儲存。 新的TPM規範使用對稱金鑰來加密金鑰,相對於先前的非對稱金鑰加密,速度大大提高。
  • 更穩定的PCR:過去,將密鑰和設備狀態綁定(狀態常常由PCR存儲,這裡綁定可以簡單理解為只有當某個PCR的值是某一個已知的好的狀態時,才允許訪問 密鑰)在一起會造成一些管理上的問題。 因為通常情況下,假設一個金鑰和儲存平
  • 啟動過程測量值的 PCR 綁定,當啟動韌體因為正常更新影響 PCR 的值時,相應的金鑰就要修改或重新綁定。 這個問題在新版的 TPM 已經不是問題了。
  • 靈活的管理功能:各種各樣的授權被分門別類,滿足了對 TPM 資源進行靈活管理的需求。
  • 透過名稱識別資源:TPM1.2 中對資源的間接存取產生了安全隱患。 這問題在新的規範中透過使用資源名稱來解決,名稱本身經過基於密碼學的安全處理。

9.1 Trust

  • 在可信賴計算組 (TCG) 規範的脈絡中,「信任」旨在傳達對行為的期望,如果一個系統運算總是按照預期的方式和目標進行,那它就是可信的。然而可預測的行為不一定構成值得信任的行為。例如,我們期望銀行會表現得像銀行,我們期望小偷會表現得像小偷。
  • TCG 定義了在平台中建立信任的方案,該方案基於識別其硬體和軟體元件,可信任平台模組 (TPM) 提供了收集和報告這些身分的方法,電腦系統中使用的 TPM 以允許確定預期行為並根據該預期建立信任的方式報告硬體和軟體。

11.3 I/O Buffer

  • I/O Buffer 是 TPM 和主機系統之間的通訊區域,系統將命令資料放入I/O Buffer並從 Buffer 中檢索回應數據。
  • 用於將 I/O Buffer 資料移入/移出系統的物理過程的描述超出了本規範的範圍,TCG 內的特定於平台的工作小組為其平台上的 TPM 實體介面製定規格,這些規格詳細說明了系統軟體和 TPM I/O Buffer之間的交互。
  • 不要求 I/O Buffer 與系統的其他部分物理隔離,它可以是共享記憶體,但是當開始處理命令時,實作必須確保 TPM 使用正確的值。例如,如果 TPM 執行命令資料的 hsah 作為授權處理的一部分,則 TPM 需要保護已驗證的命令資料免於修改。也就是說,在資料被驗證前保護其不被修改。在修改資料之前將其置於 Shielded Location。

11.4 Cryptography Subsystem

Cryptography Subsystem 實現 TPM 的加密功能。它可以由 Command Parsing module、Authorization Subsystem 或 Command Execution module呼叫。 TPM 以常規方式採用常規加密操作。這些操作包括:

  1. hash function
  2. asymmetric encryption, decryption, signing and signature verification
  3. symmetric encryption, decryption, signing (HMAC and SMAC) and signature verification
  4. key generation

Hash

Hash(哈希或散列)算法,又常被稱為指紋(fingerprint)或摘要(digest)算法,是非常基礎也非常重要的一類算法。可以將任意長度的二進制明文串映射為較短的(通常是固定長度的)二進制串(Hash 值),並且不同的明文很難映射為相同的 Hash 值。

  • 一個好的哈希算法具有以下特點:
    1. 正向快速:給定原文和 Hash 算法,在有限時間和有限資源內能計算得到 Hash 值;
    2. 逆向困難:給定(若干)Hash 值,在有限時間內無法(基本不可能)逆推出原文;
    3. 輸入敏感:原始輸入信息發生任何改變,新產生的 Hash 值都應該發生很大變化;
    4. 碰撞避免:很難找到兩段內容不同的明文,使得它們的 Hash 值一致(即發生碰撞)。
  • 用途: 對傳輸數據進行摘要(fingerprint)並與數據一同發出,接收端接收後對數據 Hash 與給定的 Hash 比較就能確定資料是否正確。

Asymmetric cryptography

顧名思義,非對稱加密中,加密密鑰和解密密鑰是不同的,分別被稱為公鑰(Public Key)和私鑰(Private Key)。私鑰一般通過隨機數算法生成,公鑰可以根據私鑰生成。 其中,公鑰一般是公開的,他人可獲取的;私鑰則是個人持有並且要嚴密保護,不能被他人獲取。

  • RSA: 算法利用了對大數進行質因子分解困難的特性,但目前還沒有數學證明兩者難度等價,或許存在未知算法可以繞過大數分解而進行解密。
  • ECC: Elliptic Curve Cryptography,應用最廣也是強度最早的系列算法,基於對橢圓曲線上特定點進行特殊乘法逆運算(求離散對數)難以計算的特性。

Symmetric cryptography

對稱加密算法,顧名思義,加密和解密過程的密鑰是相同的。該類算法優點是加解密效率(速度快,空間佔用小)和加密強度都很高。

  • AES: 標準為 FIPS-197。AES 也是分組算法,分組長度為 128、192、256 位三種。AES 的優勢在於處理速度快,整個過程可以數學化描述,目前尚未有有效的破解手段。
  • DES: 採用 FIPS-46-3,將 64 位明文加密為 64 位的密文。其密鑰長度為 64 位(包括 8 位校驗碼),現在已經很容易被暴力破解。 stream ciphe(RC4),block cipher(DES, AES)

Block Cipher Modes 分組加密(英語:Block cipher),又稱分塊加密或塊密碼,是一種對稱金鑰演算法。 它將明文分成多個等長的模組(block),使用確定的演算法和對稱金鑰對每組分別加密解密,對於如何切分、加密對應不同的工作模式,針對 AES 共有 5 種模式。

  • Block Cipher Modes
    Mode Name -
    ECB Electronic Code Book Mode 將明文按分組大小切分,然後用同樣的金鑰正常加密切分好的明文分組。
    CBC Cipher Block Chaining Mode 每個明文塊先與前一個密文塊進行互斥或後,再進行加密。為了保證每條訊息的唯一性,在第一個塊中需要使用初始化向量IV。
    CFB Cipher Feedback Mode 與CBC模式類似,但不同的地方在於,CFB模式先生成密碼流字典,然後用密碼字典與明文進行異或操作並最終生成密文。
    OFB Output Feedback Mode OFB模式與CFB模式不同的地方是:生成字典的時候會採用明文參與運算,CFB採用的是密文。
    CTR Counter Mode CTR模式同樣會產生流密碼字典,但同是會引入一個計數,以保證任意長時間均不會產生重複輸出。

Cipher Feedback (CFB) Mode

當選擇對稱分組密碼作為與會話關聯的加密演算法時,將使用 CFB。 當用於參數加密時,金鑰和 Initialization Vector (IV) 是從每個會話金鑰派生的,因此從統計角度來看,重複使用相同的金鑰和 IV 是不太可能的。當物件未儲存在屏蔽位置時,CFB 也用於物件敏感區域的對稱加密。 以這種方式使用時,密鑰和 IV 源自於 secret。 在某些情況下,IV 設定為零。

XOR Obfuscation

XOR混淆類似於計數器模式(CTR)塊加密,但它使用一個密鑰派生函數(KDF)作為偽隨機函數,而不是對稱塊加密。XOR混淆將調用方與TPM共享的算法數量減少到一個(哈希),以便以某種程度的保密性和身份驗證使用TPM。該規範中的XOR方案與TPM 1.2中使用的方案不同:它使用不同的公式將輸入輸入到哈希函數中。 TPM2.0 所指的 XOR obfuscation 如下所示:

XOR(data,hashAlg,key,contextU,contextV)

  • data: 包含要混淆的資料的可變大小的緩衝區
  • hashAlg: KDF 中使用的雜湊演算法
  • key: 包含金鑰的可變大小的值
  • contextU: 一個可變大小的值,用於限定操作的一方(通常是隨機數值)
  • contextV: 一個可變大小的值,用於限定操作的一方(通常是隨機數值)

XOR() function 會使用 KDFa() 產生 mask,定義如下:

maskKDFa(hashAlg,key,XOR,contextU,contextV,data.size8)

  • 然後將 mask 的 8 Bytes 與 data.buffer 的 8 Bytes 進行 XOR。

Extend

「擴展」操作用於對摘要值進行增量更新。它對於更新PCR、auditing 和構建 policy 非常有用,也用於擴展具 TPMA_NV_EXTEND屬性的 NV Index。擴展操作使用 hash 將新數據與現有摘要結合。其表示法為:

digestnewHhashAlg(digestold||datanew)

  • digestnew
    : Extend 操作後的摘要值 (例如 PCR)
  • HhashAlg
    : Hash 函數(例如與特定 PCR bank 相關的雜湊演算法)
  • digestold
    : Extend 操作前的摘要值
  • datanew
    : 可變數量的資料八位元組,與
    digestold
    Hash 產生 Extend 結果

AES也是一種密碼強度很高的對稱密碼演算法,但是如果需要商用的話要向NIST支付授權費用?

Key Generation

密鑰產生產生兩種不同類型的密鑰,

  1. 第一種是 ordinary key 普通密鑰,由 random number generator (RNG) 直接產生亂數 seed 進行計算,計算後產生的密鑰保存在本地的屏蔽區域。
  2. 第二種為 Primary Key 主鍵,由 seed 進行計算產生,TPM 將持久性儲存由 RNG 產生的 seed,並使用 key derivation function (KDF) 派生密鑰,SP800-108 的 KDF 廣泛用於本規範。除了由 RNG 產生也可以由其他 secret value 作為 seed

主鍵

Key Derivation Function

TPM 使用基於雜湊的函數來產生用於多種目的的金鑰。此規範使用兩種不同的方案:一種用於 ECDH,另一種用於 KDF 的所有其他用途。ECDH KDF 來自 SP800-56A。計數器模式 KDF 來自 SP800-108 使用 HMAC 作為偽隨機函數 pseudo-random function (PRF)。它在規範中被稱為

KDFa()。另外有些演算法具有已知的弱密鑰。如果產生了這樣的金鑰,則必須將其丟棄,並透過 KDF 的另一次迭代重新開始產生新密鑰。


KDFa() 用於除 ECDH 之外,所有需要 KDF 的情況。
KDFa()
使用 SP800-108 的計數器模式,以 HMAC 作為 PRF,根據 SP800-108,規範要求使用此 KDF,它使用對 KDFa() 的函數引用。

  • 用於建構
    KDFa()
    key stream 的 inner loop 定義如下:

K(i)HMAC(KI,[i]2||Label||0016||Context||[L]2)

  • K(i)
    : KDF 內循環的第
    ith
    迭代
  • HMAC()
    : HMAC 演算法
  • KI
    : the secret key
  • [i]2
    : 從 1 開始迭代的 32-bit counter
  • Label
    : 一個八位元組流,指示此 KDF 產生的金鑰的使用
  • 0016
    : 當
    Label
    不存在或
    Label
    的最後一個八位元組不為零時添加
  • Context
    : 與派生金鑰材料相關的資訊的二進位字串
  • [L]2
    : 32-bit值,指示要從 KDF 傳回的位數
  • KDFa()
    函數原型為:

KDFa(hashAlg,key,label,contextU,contextV,bits)

  • hashAlg
    : KDF 中 HMAC 中使用的 TPM_ALG_ID
  • key
    : 用作
    KI
    的可變大小值
  • label
    : 用作
    Label
    的可變大小值
  • contextU
    : 與 contextV 連接用作
    Context
    的可變大小值
  • contextV
    : 與 contextU 連接用作
    Context
    的可變大小值
  • bits
    : 用作
    [L]2
    的 32-bit值
  • contextU
    contextV
    的值會作為大小緩衝區傳遞,並且僅使用緩衝區資料來組成
    Context

ContextcontextU.buffer||contextV.buffer


KDFe 用於 ECDH,根據 SP800-56A 為受 ECC 保護的物件產生對稱加密金鑰,使用的 KDF 是“Concatenation Key Derivation Function”,

  • inner loop 定義如下:

digestiH(counter||Z||OtherInfo)

  • digesti
  • H()
  • counter
  • Z
  • OtherInfo
  • 本規範要求
    OtherInfo
    為:

OtherInfoUse||PartyUInfo.buffer||PartyVInfo.buffer

  • Use
  • PartyUInfo.buffer
  • PartyVInfo.buffer
  • KDFe()
    函數原型為:

KDFe(hashAlg,Z,Use,PartyUInfo,PartyVInfo,bits)

  • hashAlg
  • Z
  • Use
  • PartyUInfo
  • PartyVInfo
  • bits

HMAC

HMAC(Hash Message Authentication Code),通過特別計算方式之後產生的訊息鑑別碼(MAC),使用密碼雜湊函數,同時結合一個加密金鑰。它可以用來保證資料的完整性,同時可以用來作某個訊息的身分驗證,另外 HMAC 也用於產生密鑰。
HMAC 有時被稱為對稱簽章,因為它們的運作方式類似於數位簽章,但使用單一金鑰進行簽署和驗證。

HMAC(Key,Text)=Hash((KeyOPad)||Hash((KeyIPad)||Text))

: XOR

  • Key(金鑰)、test(文本)、Hash(SHA家族的任何一個Hash)
  • opad跟ipad(填充)
    • opad :0x5c5c5c…5c5c。
    • ipad :0x363636…3636。
  • SMAC (Symmetric Block Cipher Message Authentication Code),SMAC 是使用對稱加密算法對某些資料進行對稱簽章的一種形式。它保證受保護的資料未被修改,密鑰值必須是 secret 或 share secret。

Signature

TPM 可以使用非對稱或對稱演算法進行簽署。簽章方法取決於金鑰的類型。對於非對稱演算法,簽章方法取決於演算法(RSA 或 ECC)。對於對稱簽章,定義了 HMAC 和 SMAC 簽章。 TPM 只對經 TPM 運算的消息進行簽署,任何 TPM 產生的資料都有標頭 'TPM_GENERATED_VALUE',當 TPM 進行簽署時會去確認 'TPM_GENERATED_VALUE' 。

  • TPM 使用TPM2_VerifySignature()對簽章進行認證
  • 經由 HMAC 簽署的稱為 'Tickets'

Tickets

  • Tickets 主要有兩個目的
    1. re-signing data: 在TPM檢查非對稱簽名後,使用TPM對稱密鑰重新對摘要進行簽名,TPM可以在不載入非對稱密鑰的情況下重新驗證簽名。
    2. expanding state memory: 當對外部消息進行哈希時,TPM具有一些狀態表明消息不是以 TPM_GENERATED_VALUE開頭的。Tickets 允許將這個狀態存儲在 TPM 之外的某個地方,當稍後將摘要提供給 TPM 進行簽名時,提供 Tickets,使 TPM 能夠驗證待簽名的摘要是安全的。
  • 用於 Tickets 的證明值,至少應具有與哈希算法產生的摘要大小相等的位數。(EXAMPLE: A proof value of 256 bits is required for a SHA256 ticket.)
  • Tickets 有五種
    1. TPMT_TK_CREATION: 由TPM2_Create() TPM2_CreatePrimary()時生成,在 TPM2_CertifyCreation() 中使用,以便 TPM 能夠證明它創建了一個特定對象以及在創建對象時存在的環境參數(PCR)。這樣可以避免將創建數據的摘要作為對象數據結構的永久部分。
    2. TPMT_TK_VERIFIED: 由TPM2_VerifySignature()生成,並被TPM2_PolicyAuthorize()使用。如果簽名是由非對稱密鑰簽署的,那麼簽名驗證可能需要花費時間。如果同一授權將被多次使用(例如用於TPM2_PolicyAuthorize()的授權),那麼將非對稱授權轉換為使用對稱加密的方式可能會有性能上的優勢,因為對稱密加密通常更快。此 Tickets 是對稱等效授權。
    3. TPMT_TK_AUTH: 由TPM2_PolicySigned()TPM2_PolicySecret()生成,並在TPM2_PolicyTicket()中使用。策略授權可以與特定的策略會話關聯,或者允許在任何策略中使用。當它可以在任何策略中使用時,它會有一個到期時間(可以是未來的任意時間)。長期有效的授權可能在TPM2_PolicySigned()/TPM2_PolicySecret()中給出,並生成一個 Tickets ,用於驗證授權參數(已授權內容)和未來到期的授權時間。然後,此票證由TPM2_PolicyTicket()處理,在 Tickets 到期之前,將對策略摘要計算具有與原始授權相同的效果。
    4. TPMT_TK_HASHCHECK: 用於指示外部數據的摘要是否安全可簽名使用受限制的簽名密鑰。受限制的簽名密鑰只能對由 TPM 生成的摘要進行簽名。如果摘要是從外部提供的數據生成的,則需要有一個指示,表明該數據的開頭並不與在TPM內部生成的數據使用的第一個八位組相同。這可以防止對存證數據的“偽造”。此票證用於提供證據,表明TPM檢查了摘要中使用的數據並且可以安全地進行簽名。假設外部數據是“安全的”,則此類票證由TPM2_Hash()TPM2_SequenceComplete()生成並由TPM2_Sign()使用。
    5. NULL Ticket: 當回應具有一個 Ticket,但未生成任何 Ticket 時,將生成一個 NULL Ticket。例如使用 TPM2_PolicySecret() 指定過期時間為零,這不會生成 Ticket,因為過期時間為零,授權將立即過期,在這種情況下 TPM 將返回一個 NULL Ticket。當命令需要一個 Ticket,但沒有可用的 Ticket 數據時,也可以將 NULL Ticket 用作輸入參數。

Random Number Generator (RNG) Module

RNG 是 TPM 中的亂數產生器。 TPM 在金鑰產生中使用隨機值作為隨機數,並在簽章中使用隨機值 RNG Module 通常包含以下內容

  1. An entropy source and collector
  2. State Register
  3. A mixing function(通常是hash function)

TPM 中的 entropy source 是 entropy collector。顧名思義,熵收集器從熵源收集熵並消除偏差。這些來源可能包括噪音、時鐘變化、空氣流動等事件。 mixing function 可以用偽隨機數產生器(PRNG)來實現。 PRNG 可能會從非隨機輸入(例如計數器)中產生明顯隨機的數字。 TPM 應為內部功能的每次使用提供足夠的隨機性,每次呼叫時應提供 32 Octet 的隨機性。

Algorithms

  • 本規範中的 structures 和 commands 是在最小程度地依賴演算法預設值的情況下建構的。在大多數情況下,演算法標識符標識一系列演算法,後面跟著限定符。本規範僅使用雜湊演算法演算法識別碼,因為雜湊演算法標識符意味著摘要大小,如TPM_ALG_SHA256TPM_ALG_SHA384。對稱和非對稱加密的演算法標識符標識家族,例如RSA、ECC、AES等。對於這些演算法,需要補充資訊來定義參數如 TPM_ALG_RSATPM_ALG_AES
  • 本規範不要求實現任何特定的演算法集。如果沒有一套至少包括一種雜湊演算法、一種具有批准參數的對稱加密演算法以及一種具有批准參數的非對稱加密/簽名演算法,TPM 將無法支援所有必要的功能。TPM 只能實作具有 TCG 分配的演算法 ID 的演算法。

Random Access Memory

數據在斷電會消失,但不保證一定消失。

PCR

TPM 就可以用來保存系統啟動過程中系統狀態測量值,PCR 就用來實現這個功能,PCR 中儲存了由軟體計算的一系列 Hash 值,TPM 可以透過使用一個特定的私鑰來簽署這些測量值,然後向外部報告。PCR 有一個單向儲存的特性可以保證內容不被篡改(HashExtend)。 因此,如果PCR中的值與預期的可信值相同,那麼這些值就被認為是可信的。 PCR 可以用於認證,創建的同時讓它們的授權配置與PCR某一個值綁定,只有PCR的值是某一個預期的狀態時才可以使用它們,例如:

  • VPN只有在確認PC已經運行了所有IT允許的軟體後才授權設備存取網絡,如果是不被允許的軟體,PCR值會不同,認證會失敗。
  • 檔案系統服務只有在確認MBR正常以及硬碟確實存在時才會得到解密金鑰。

Non-Volatile (NV) Memory

TPM 中的 NVRAM 可以配置為單獨控制讀取和寫入功能,這意味著可以向用戶提供某些數據,而不必擔心這些數據會被意外或惡意刪除。具訪問控制的 NVRAM 有許多好處,它可以儲存在機器關閉時不可用的金鑰;比使用公鑰/私鑰對解密更快地存取數據,並提系統不同部分之間傳遞訊息的機制。系統在啟動初期沒辦法存取硬碟,這時 NVRAM 就可以用來儲存這個時候必須要使用的金鑰。 一個明顯的例子是,系統在啟動時在存取自加密硬碟之前必須輸入才密碼能讀寫。

具備NVRAM能夠提供以下功能:

  • 儲存憑證鏈的根密鑰: 一般是每個人都可以存取的 public keys,但是必須保證 public keys 不能被修改。
  • 儲存背書金鑰(endorsement key): 背書金鑰 EK 用於 TPM 在出廠設定階段解密憑證和傳遞密碼。
  • 儲存機器已知的好的狀態(一些列的系統測量(HASH extend))值: UEFI 的安全啟動技術所使用的根公鑰類似,這些值用於系統擁有者控制系統在啟動虛擬機器(或 OS )之前應該處於什麼樣的狀態。INTEL CPU有一個 Trusted Execution Technology(TXT),其中的啟動控制策略(LaunchControlPolicy) 就用到了 TPM NVRAM 的這個作用。 在 TXT 中,使用者對 NVRAM 的內容有絕對的控制權,而 UEFI 的安全啟動並非如此。
  • 儲存硬碟可用之前的解密金鑰:剛剛前文也介紹了,自加密硬碟。

Authorization Subsystem

  • Command Dispatch module 在命令開始和結束時,會呼叫 Authorization Subsystem。在執行命令之前,Authorization Subsystem 會檢查是否已提供使用每個屏蔽位置的適當授權。
  • 某些命令無需授權即可存取屏蔽位置;存取某些位置可能需要單因素授權;存取其他屏蔽位置可能需要使用任意複雜的授權策略。
  • 授權子系統所需的唯一加密函數是雜湊和 HMAC。如果實作 TPM2_PolicySigned(),則可能需要非對稱演算法。

Power Detection Module

此模組結合平台電源狀態來管理 TPM 電源狀態。TPM 僅支援 ON 和 OFF 電源狀態。任何需要重設 RTM 的系統電源轉換也會導致 TPM 重設 (_TPM_Init),也會導致 RTM 重置。

In most cases, the RTM will be a host CPU.

Note

Useful Command

  • VirtuarlBox 7.0 之後可以開啟 TPM 支援
  • VB file
  sudo TCTI_PCAP_FILE=- tpm2_getrandom --tcti "pcap:device:/dev/tpm0" -0 rand.bin 5 | wireshark -ki -
  sudo TCTI_PCAP_FILE=- tpm2_pcrread sha256 --tcti "pcap:device:/dev/tpm0" -o pcr.bin | wireshark -ki -
  xxd -c 32 pcr.bin
  echo -e -n helloword>tmp.bin | sudo TCTI_PCAP_FILE=- tpm2_hash -g sha256 tmp.bin --tcti "pcap:device:/dev/tpm0" --hex | wireshark -ki -

my_random.c code gcc -o my_random my_random.c -ltss2-esys -ltss2-rc

#include <stdlib.h>
#include <stdio.h>
#include <tss2/tss2_esys.h>
#include <tss2/tss2_rc.h>

int main() {
	ESYS_CONTEXT *context = NULL;

	// ESYS 初始化
	TSS2_RC rc = Esys_Initialize(&context, NULL, NULL);

	// 檢查 ESYS 初始化是否成功
	if (rc != TSS2_RC_SUCCESS) {
		fprintf(stderr, "Esys_Initialize: %s\n", Tss2_RC_Decode(rc));
		return EXIT_FAILURE;
	}

	TPM2B_DIGEST *bytes = NULL;

	// 使用 TPM 產生亂數
	rc = Esys_GetRandom(context,
			ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE,
			8,  // 產生的亂數資料長度
			&bytes);

	// 檢查 TPM 產生亂數是否成功
	if (rc != TSS2_RC_SUCCESS) {
		fprintf(stderr, "Esys_GetRandom: %s\n", Tss2_RC_Decode(rc));
		return EXIT_FAILURE;
	}

	// 輸出亂數
	for (size_t i = 0; i < bytes->size; i++) {
		printf("%02x", bytes->buffer[i]);
	}
	printf("\n");

	Esys_Free(bytes);
	Esys_Finalize(&context);
	return EXIT_SUCCESS;
}

Refer

IC

Web

  1. TPM 2.0 Library , PC Client , PC Client Device Driver Design

  2. tpm2-tools , TPM2-TSS , m$_tpm2.0 , Software TPM Emulator , tpm-js

  3. wiki , Linux 使用 TPM 2.0 產生真實隨機亂數教學與範例 , kernel TPM doc , 初探 TPM 2.0 , TPM 2.0规范解读系列 , TPM分析笔记 , TPM学习笔记 , PTP协议-1 , PTP协议-2 , 檢測TPM , kernel , Using the tpm-elinux , 略談信賴運算(一) , 略談信賴運算(二) , 略談信賴運算(三) , 略談信賴運算(四) , 密碼學簡史 , 可信賴運算(Trusted Computing) , TPM 密钥证明 , TPM Specification Overview , A mobile and portable trusted computing platform , Secure Boot using Trusted Firmware-M , Trusted Platform Module , BIOS Chronomancy : Fixing the Core Root of Trust for Measurement , A Novel Approach for a Flexible and Secure Update of Cryptographic Engines on a Trusted Platform Module , Trusted Platforms UEFI, PI and TCG-based firmware , 基于静态可信根(SRTM)的Bitlocker的工作原理是什么? , 嵌入式設備的基本應用TPM 2.0 , TPM2.0 Key hierarchies筆記 , TPM 2.0 裝置上的 PCR , Designing in A Designing in A Trusted Platform Module (TPM) Trusted Platform Module (TPM , TPM.dev tutorials , 【可信计算】复习篇 , 【可信计算】第五次课:可信计算规范与标准 , 【TPM2.0原理及应用指南】 1-3章 , 【TPM2.0原理及应用指南】 5、7、8章 , Research on trusted computing and its development , Advanced Trusted Platform Module (TPM) Usage , UEFI Utility to Read TPM 2.0 PCRs , 解碼測量開機記錄以追蹤 PCR 變更 , What's the difference between the endorsement key and the attestation identity key within the TPM? , UEFI安全启动 , Core Root of Trust for Measurement , 代碼範例:使用Intel® Platform Trust Technology , TPM2 Software Stack (TSS2) , The Trusted Platform Module key hierarchy , From TPM 1.2 to 2.0 and some more , Citizen Electronic Identities using TPM 2.0 , Secure the Windows boot process , BIOS Integrity Measurement Guidelines , Platform Firmware Resiliency Guidelines , TCG TRUSTED BOOT CHAIN IN EDK II , Understanding the UEFI Secure Boot Chain , Understanding UEFI Secure Boot and how it helps to secure the Windows 10 boot process , Trusted Computing Overview , A BAD DREAM: SUBVERTING TRUSTED PLATFORM MODULE WHILE YOU ARE SLEEPING , Force firmware code to be measured and attested by Secure Launch on Windows 10 , UEFI Secure Boot

  4. 金鑰衍生函式 , NIST SP 800-108密钥导出函数KDF研究 , 安全與密碼學 , 加密演算法基礎介紹

  5. Breaking Bitlocker - Bypassing the Windows Disk Encryption

Table

TPM 2.0 Part 1: Architecture 5.2 有縮寫

  • TPM: Trusted Platform Module 信賴平台模組
  • ECC: Elliptic Curve Cryptography 橢圓曲線密碼學
  • NIST: National Institute of Standards and Technology 美國國家標準暨技術研究院
  • PCR: Platform Configuration Register
  • SML: Store Measurement Log
  • NV: Non-Volatile 非揮發性
  • EK: Endorsement Key 認證密鑰
  • CA: Certificate Authority 數位憑證認證機構
  • CRTM: Core of Root of Trusted for Measurement
  • SRTM: Static Root of Trust for Measurement
  • RTM: Root of Trust for Measurement
  • RTS: Root of Trust for Storage
  • RTR: Root of Trust for Reporting
  • EPI: Extended Peripheral Interface 擴充週邊介面
  • GPIO: General purpose I/O