TPM -- Activating a Credential

前言

本文主要講述的是如果從TPM 裏面生成的非對稱的Key想要獲取第三方證書頒發者(credential provider)請求證書的流程, 還有獲取證書後是如何保存到TPM的? 如上的過程我們通常稱爲Activating a Credential in the TPM.


對於TPM而言,它並不關心credential的格式, 不過一般情況下都是X.509格式certificate。
該激活證書的流程可以幫助實現如下的2個目標:

 - credential provider可以確保需要認證的key的一些屬性(例如:signing/decryption)。
 - TPM密鑰簽名的接收者無法確定多個密鑰駐留在同一TPM上。(因爲EK只在Credential 激活的階段纔會被使用到)

改流程可以簡單的理解爲:

CA爲該pub key頒發了一個證書,該證書被TPM的初始密鑰的public key(Endorsement Key)進行了加密, 只有在TPM裏面使用對應的private key纔可以解開。

當然,實際情況比較複雜,詳細的步驟我們接下來會具體分析:

激活證書的流程

在這裏插入圖片描述
Credential Provider需要做的工作
步驟一: CA收到了一個爲Kpub頒發證書的請求,該請求包含來自TPM的公鑰Kpub, 和其TPM的EK(Endorsement Key)的證書 (該證書由product vendor頒發)
步驟二: CA首先會驗證EK的證書是否合法, 改過程會使用到vendor的根證書,由次確保EK的確是存在於對應的TPM上的。
步驟三/四: CA檢測想要請求證書的Kpub的屬性,確保是否符合要求,完成檢查之後,會給它頒發證書Cert_Kpub
步驟五: CA生成一個Secret, 用來加密步驟三中生成的Cert_Kpub
步驟六/七: CA會再生成一個Seed, 這個Seed會被EK cert中的public key進行加密, 而Seed本身會和key name一起做KDF算法生成一個對稱的密鑰SK,和一個HAMC key
步驟八: 使用上一步的SK對Secret進行加密, HAMC key來保證Cert_Kpub的完整性, 然後這樣我們就會得到如下三個object,作爲參數TPM_import到TPM裏面:

	a. Cert_Kpub被Secret進行加密
	b. Secret被從Seed派生出來的SK進行加密
	c. Seed被EK cert中的公鑰進行了加密

TPM需要做的工作
步驟一: TPM使用EK的私鑰private key(一般存儲在TPM的reserved的一個storage裏面)把Seed進行解密。
步驟二/三: 使用同樣的KDF算法,把Seedkeyname作爲參數,派生出SKHAMC key
步驟四: 使用SKSecret進行解密, HAMC key進行cert_kpub的完整性檢查。
步驟五: 獲得解密後的secret後, 用它對cert_kpub進行解密, 然後就得到了明文的CA給Kpub頒發的證書Cert_Kpub
步驟六: TPM會把該明文的Cert_Kpub存儲到之前reserved的NVIndex中

注意: TPM中的IDevID key(Initial device identity Key)和AIK key(attestation identity key)的provision過程基本都是使用如上的流程。

在這裏插入圖片描述

參考文檔:
TPM2.0_Practical_Guide.pdf
https://pan.baidu.com/s/11enEtANxgrENcQCZdSu5Cg (提取碼:3rka)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章