資源虛擬化
TBS 的主要功能是有效率地共用特定有限的 TPM 資源:金鑰、授權和傳輸會話。
建立其中一個資源的實例時,TBS 會建立資源的虛擬實例,並在結果命令資料流程中傳回此虛擬實例的控制碼 (,而不是 TPM) 傳回的實際控制碼實例。 TBS 會維護虛擬控制碼與內部實際控制碼之間的對應。 如果 TPM 用盡空間來保存指定類型的更多資源,則會選擇性地儲存並收回資源的現有實例,直到 TPM 可以保存新的資源為止。 再次需要舊資源時,TBS 會載入儲存的內容, (儲存並在必要時收回其他資源) ,然後再提交命令。
TBS 中的所有虛擬化都會代表特定內容執行。 每個內容只允許存取特別代表其建立的虛擬資源,以及對應至這些虛擬資源的 TPM 上的實體資源。 根據預設,所有虛擬化資源的總數限制為 500。 您可以在HKEY_LOCAL_MACHINE\Software\Microsoft\Tpm底下建立或修改名為MaxResources 的DWORD登錄值來改變此數位。 您可以使用 效能監視器 工具來追蹤 TBS 資源的數目,來觀察即時 TBS 資源使用量。 這項限制已過時,Windows 8和Windows Server 2012。
未由 TBS 虛擬化的有限 TPM 資源 (,例如計數器和 NV 存放區) 必須在軟體堆疊之間合作共用。
注意
此控制碼虛擬化會導致在計算 HMAC 授權參數時包含金鑰控制碼的命令失敗。 因此,TPM 1.2 版中已淘汰的許多命令都無法供 TBS 環境中的應用程式軟體使用。
資源限制
TPM 可讓呼叫端查詢其功能,以判斷特定資源類型可用的空間量。 其中一些資源限制,例如金鑰、授權會話和傳輸會話可用的空間量,實際上會透過虛擬化來擴充 TBS。 由 MaxResources登錄設定控制的 TBS 限制通常遠大於基礎 TPM 硬體的實際限制。 未提供與 TPM 硬體限制分開查詢 TBS 限制的機制。 此 TBS 限制已過時,Windows 8和Windows Server 2012。
索引鍵
TBS 會將金鑰控制碼虛擬化,以便在不需要金鑰時,從 TPM 透明地卸載金鑰,並在需要時載入回 TPM。 建立金鑰時,TBS 會將虛擬控制碼與載入的金鑰產生關聯。 相同的虛擬控制碼用於資源的存留期。 虛擬金鑰控制碼只有在建立虛擬金鑰控制碼的內容中才有效,而且相關聯的資源不會保留在內容存留期之外。
使用 TPM_LoadKey2 建立金鑰
如果使用TPM_LoadKey2、TPM2_CreatePrimary、TPM2_Load或TPM2_LoadExternal命令建立金鑰,TBS 會將傳回位元組資料流程中的控制碼取代為其選擇的虛擬金鑰控制碼。 因此,TBS 可確保每個虛擬控制碼都是唯一的。 如果 TBS 偵測到衝突 (極不可能的事件) ,TBS 會從 TPM 卸載金鑰,並通知呼叫軟體。 然後,軟體可以重新提交作業。 此程式可以重複執行,直到 TBS 取得唯一索引鍵控制碼為止。
清除金鑰
TBS 會在從用戶端內容收到該虛擬控制碼的TPM_FlushSpecific或TPM2_FlushCoNtext訊息時,使虛擬金鑰控制碼失效。 如果在收到排清訊息時,TPM 上實際存在金鑰,TBS 就會在該時間從 TPM 排清金鑰。
暫時移除金鑰
從 TPM 收回金鑰以讓新專案有空間時,TBS 會在金鑰上執行TPM_SaveCoNtext或TPM2_CoNtextSave命令,再收回它。
還原金鑰
當參考已載入金鑰的命令提交至 TBS 時,它會確保金鑰實際存在於 TPM 上。 如果金鑰不存在,TBS 會以呼叫 TPM_LoadCoNtext 或 TPM2_CoNtextLoad 來還原它。 如果金鑰無法還原至 TPM,TBS 會傳回TPM_E_INVALID_KEYHANDLE作為 TPM 結果。
TBS 會將命令資料流程中與金鑰相關聯的每個虛擬控制碼取代為 TPM 上載入之金鑰的實體控制碼。 如果命令是以呼叫端內容中的 TBS 無法辨識的虛擬控制碼送出,TBS 會格式化具有TPM_E_INVALID_KEYHANDLE之呼叫端的錯誤資料流程。
授權會話
授權會話是藉由呼叫TPM_OIAP、TPM_OSAP或TPM_DSAP來建立。 在每個案例中,傳回位元組資料流程都包含新建立授權會話的實體 TPM 控制碼。 TBS 會將此值取代為虛擬控制碼。 後續參考授權會話時,TBS 會將命令資料流程中的虛擬控制碼取代為授權會話的實體控制碼。 TBS 可確保虛擬授權會話的存留期符合實體授權會話的存留期。 如果用戶端嘗試使用過期的虛擬控制碼,TBS 會將錯誤資料流程格式化,並TPM_INVALIDAUTHHANDLE錯誤。
會話位置有限,而且 TBS 可能會用盡外部位置來儲存授權會話內容。 如果發生這種情況,TBS 會選擇授權會話來失效,以便成功儲存新的內容。 嘗試使用舊內容的應用程式必須重新建立授權會話。
當發生下列任一情況時,TBS 會使虛擬授權會話失效:
從 TPM 傳回的命令資料流程中,與授權會話相關聯的繼續使用旗標為 FALSE。
使用授權會話的命令失敗。
系統會執行命令,使與命令相關聯的授權會話失效 (,例如TPM_CreateWrapKey) 。
與 OSAP 或 DSAP 會話相關聯的金鑰會從 TPM 收回,並呼叫 TPM_FlushSpecific 或 TPM2_FlushCoNtext (,而不論此命令是源自 TBS 還是具有較高層級的軟體) 。
TBS 會在成功執行特定非決定性命令之後自動重新同步處理授權會話,以確保 TBS 狀態與 TPM 狀態保持一致。 受影響的命令如下:
- TPM_ORD_Delegate_Manage
- TPM_ORD_Delegate_CreateOwnerDelegation
- TPM_ORD_Delegate_LoadOwnerDelegation
在下列每個情況下,TPM 會自動排清 TPM 上的授權會話:
建立授權會話
虛擬授權會話控制碼只有在建立虛擬授權會話控制碼的內容中才有效,而且相關聯的資源不會保留在相關聯的內容存留期之外。
清除授權會話
如果 TBS 收到來自用戶端內容之虛擬控制碼的TPM_FlushSpecific或TPM2_FlushCoNtext命令,就會使虛擬授權會話失效。 如果在收到 flush 命令時,TPM 上實際存在授權會話,TBS 會立即從 TPM 排清實體會話。
暫時移除授權會話
從 TPM 收回授權會話以讓新實體有空間時,TBS 會在該授權會話上執行TPM_SaveCoNtext或TPM2_CoNtextSave。
還原授權會話
將授權的 TPM 命令提交至 TBS 時,TBS 可確保命令中參考的所有虛擬授權會話都實際存在於 TPM 上。 如果沒有任何授權會話,TBS 會透過呼叫 TPM_LoadCoNtext 或 TPM2_CoNtextLoad來還原這些會話。 如果授權會話無法還原至 TPM,TBS 會傳回TPM_E_INVALID_HANDLE作為 TPM 結果。
TBS 會將命令資料流程中與授權會話相關聯的每個虛擬控制碼取代為 TPM 上載入之授權會話的實體控制碼。
如果命令是以呼叫端內容中 TBS 無法辨識的虛擬控制碼送出,TBS 會將錯誤資料流程格式化給呼叫端,並TPM_E_INVALID_HANDLE錯誤。
傳輸會話
注意
此處所述的傳輸會話處理是 Windows Vista 和 Windows Server 2008 特有的。
傳輸會話是 TPM 所提供的機制,可讓軟體堆疊在軟體與 TPM 之間傳遞時加密命令中的資料。 這可防止敵人在通過硬體匯流排時攔截資料。
重要
只有承載資料已加密。 仍可識別正在執行的命令。
不幸的是,此機制也會防止 TBS 檢查承載資料。 在大部分情況下,這不是問題,因為 TBS 只會修改控制碼,而不是承載資料。 不過,例如,在TPM_LoadCoNtext的情況下,加密會涵蓋傳回的資源控制碼。 因此,TBS 會防止嘗試執行傳輸會話所涵蓋的TPM_LoadCoNtext作業。
TBS 會封鎖傳輸會話下的下列命令:
- TPM_EstablishTransport
- TPM_ExecuteTransport
- TPM_Terminate_Handle
- TPM_LoadKey
- TPM_EvictKey
- TPM_SaveKeyCoNtext
- TPM_LoadKeyCoNtext
- TPM_SaveAuthCoNtext
- TPM_LoadAuthCoNtext
- TPM_SaveCoNtext
- TPM_LoadCoNtext
- TPM_FlushSpecific
當傳輸會話涵蓋其中任一個命令時,TBS 會以 TPM 結果的形式傳回TPM_E_EMBEDDED_COMMAND_UNSUPPORTED。
傳輸會話控制碼的虛擬化方式類似于金鑰控制碼和授權控制碼。 TPM 上可用的已儲存傳輸會話內容位置數目有限。
如果發生下列任何情況,TBS 就會使虛擬傳輸會話失效:
從 TPM 傳回命令資料流程中,與傳輸會話相關聯的繼續使用旗標為 FALSE。
如同上述授權會話,TBS 會在成功執行特定非決定性命令之後自動重新同步處理傳輸會話,以確保 TBS 狀態與 TPM 狀態保持一致。 受影響的命令如下:
- TPM_ORD_Delegate_Manage
- TPM_ORD_Delegate_CreateOwnerDelegation
- TPM_ORD_Delegate_LoadOwnerDelegation
在這些情況下,TPM 上的傳輸會話會自動由 TPM 排清:
建立傳輸會話
TBS 會針對用戶端所建立的每個傳輸會話建立虛擬控制碼。 虛擬傳輸控制碼只有在建立這些控制碼的內容中才有效,而且相關聯的資源不會保留超過相關聯內容的存留期。
清除傳輸會話
如果 TBS 從用戶端內容收到虛擬控制碼的TPM_FlushSpecific命令,就會使虛擬傳輸會話失效。 如果收到排清命令時,傳輸會話實際存在於 TPM 上,TBS 會立即從 TPM 排清實體會話。
暫時移除傳輸會話
從 TPM 收回傳輸會話以容納新實體的空間時,TBS 會在該傳輸會話上執行TPM_SaveCoNtext。
還原傳輸會話
當TPM_ExecuteTransport命令提交至 TBS 時,TBS 可確保命令中所參考的傳輸會話實際存在於 TPM 上。 如果傳輸會話不存在,TBS 會使用對TPM_LoadCoNtext的呼叫還原它。
TBS 會將命令資料流程中與傳輸會話相關聯的虛擬控制碼取代為 TPM 上載入之傳輸會話的實體控制碼。 如果命令是以呼叫者內容中的 TBS 無法辨識的虛擬控制碼送出,則 TBS 會使用 TPM_E_INVALID_HANDLE 來格式化呼叫端的錯誤資料流程。
獨佔傳輸會話
獨佔包裝的傳輸會話是最上層軟體判斷任何其他軟體是否已在命令鏈結期間存取 TPM 的方式。 它們不會防止其他軟體存取 TPM,它們只是為傳輸會話的建立者提供判斷發生其他存取的方法。 TBS 不會對獨佔傳輸會話執行任何特定的動作,但與它們有些不相容。 TBS 會嘗試以透明方式複製 TPM 的自然行為,因此它不會偏好來自建立獨佔傳輸會話之內容的命令。 例如,如果用戶端 B 在用戶端 A 位於獨佔傳輸會話時提交命令,則會使用戶端 A 的獨佔傳輸會話失效。
TBS 起始的命令也可以終止獨佔傳輸會話。 當用戶端 A 位於獨佔傳輸會話中,以及用戶端 A 針對 TPM 中實際不存在之資源的呼叫所執行的命令時,就會發生這種情況。 這種情況會觸發 TBS 虛擬化管理員執行TPM_LoadCoNtext命令來提供該資源,以終止用戶端 A 的獨佔傳輸會話。