信賴平臺模組

符合TPM 1.2版標準的受信任的平臺模塊的組件
信賴平臺模組，或受信任的平臺模塊（Trusted Platform Module，縮寫：TPM），是一項Secure cryptoprocessor的國際標準，旨在使用設備中集成的專用微控制器（安全硬件）處理設備中的加密密鑰。TPM的技術規範由稱為Trusted Computing Group（TCG）的資訊業聯合體編寫。國際標準化組織（ISO）和國際電工委員會（IEC）已於2009年將規範標準化為ISO/IEC 11889。
中華人民共和國商用密碼產品銷售管理以前規定「任何單位或個人不得銷售境外的密碼產品」，因此早期市場銷售的資訊設備不搭載TPM。

**歷史**
可信平臺模塊（TPM）由一個名為Trusted_Computing_Group（TCG）的資訊業聯合體構思。它發展成為《TPM主要規範版本1.2》（TPM Main Specification Version 1.2），該規範於 2009 年由國際標準化組織（ISO）和國際電工委員會（IEC）標準化，編號為ISO/IEC 11889:2009。《TPM主要規範版本1.2》版本修訂116於2011年3月3日完成修訂並最終確定。
2014 年4月9日，Trusted_Computing_Group宣佈對其規範進行重大升級，命名為《TPM庫規範2.0》（TPM Library Specification 2.0）。該組織繼續致力於該標準的工作，包括勘誤表、算法添加和新命令，其最新版本於2019年11月發佈，版本號為2.0。該版本成為ISO/IEC 11889:2015標準。
當新版本發佈時，可信計算組織將其分為多個部分。每個部分都包含一個文檔，這些文檔構成了新TPM規範的全部內容。- 第1部分：架構（更名自“設計原則”）- 第2部分：TPM的結構- 第3部分：命令- 第4部分：支持例程（增加於TPM 2.0）

**概述**
可信平臺模塊（TPM）提供：- 硬件隨機數生成器。- 用於安全生成有限用途的加密密鑰的設施。- 遠程認證: 創建硬件和軟件配置的幾乎不可偽造的哈希密鑰摘要。可以使用哈希值來驗證硬件和軟件是否已被更改。負責對設置進行哈希處理的軟件決定摘要的範圍。- 綁定: 數據使用TPM綁定密鑰進行加密，TPM綁定密鑰是從存儲密鑰派生的唯一RSA密鑰。包含TPM的計算機可以創建加密密鑰並對其進行加密，以便只有TPM才能解密它們。此過程通常稱為包裝或綁定密鑰，有助於保護密鑰不被洩露。每個TPM都有一個主包裝密鑰，稱為存儲根密鑰，它存儲在TPM本身中。用戶級RSA密鑰容器與特定用戶的Windows用戶配置文件一起存儲，可用於加密和解密在該特定用戶身份下運行的應用程序的信息。- Sealed storage: 指定要解密（解封）數據的TPM狀態。- 其他可信計算功能，用於解密（解封）數據。
計算機程序可以使用TPM進行硬件設備的身份驗證，因為每個TPM芯片在生產時都燒錄了一個唯一的密鑰背書密鑰 （EK）。嵌入硬件的安全性比純軟件解決方案提供了更多保護。在某些國家/地區，其使用受到限制。

**用途**

**平臺完整性**
TPM的主要用途是確保平臺的完整性。在這種情況下，“完整性”意味著“按預期運行”，“平臺”是指任何計算機設備，無論其操作系統如何。這是為了確保引導過程從硬件和軟件的可信組合開始，並持續到操作系統完全啟動並運行應用程序。
當使用TPM時，固件和操作系統負責確保完整性。
例如，統一可擴展固件接口（UEFI）可以使用TPM來形成信任根：TPM包含多個平臺配置寄存器（PCR），允許安全存儲和報告與安全相關的指標。這些指標可用於檢測先前配置的更改並決定如何繼續。此類用例可以在Linux統一密鑰設置（LUKS）、 BitLocker和PrivateCore vCage內存加密中找到。（見下文。）
通過TPM實現平臺完整性的另一個示例是使用Microsoft Office 365許可和Outlook Exchange。
TPM 用於平臺完整性的另一個例子是Trusted_Execution_Technology（TXT），它創建了一個信任鏈。它可以遠程證明計算機正在使用指定的硬件和軟件。

**磁盤加密**
全磁盤加密實用程序（例如dm-crypt）可以使用此技術來保護用於加密計算機存儲設備的密鑰，併為包括固件和引導扇區在內的可信引導路徑提供完整性身份驗證。

**其他用途和問題**
任何應用程序都可以將TPM芯片用於：- 數字版權管理（DRM)- Windows Defender- Windows域登錄- 軟件許可的保護和執行- 防止網絡遊戲作弊
還存在其他用途，其中一些用途引發了隱私問題。TPM的“物理存在”功能通過要求對諸如激活、停用、清除或更改 TPM 所有權等操作進行 BIOS/UEFI 級別的確認來解決其中一些問題，該確認由實際出現在機器控制檯的人員執行。

**機構使用**
美國國防部（DoD）規定“為支持國防部而採購的新計算機資產（例如，服務器、臺式機、筆記本電腦、瘦客戶端、平板電腦、智能手機、個人數字助理、移動電話）將包括TPM 1.2或更高版本，其中Defense_Information_Systems_Agency（DISA）Security_Technical_Implementation_Guide（STIG）要求，並且此類技術可用。”國防部預計TPM將用於設備識別、身份驗證、加密和設備完整性驗證。

**TPM實現**
安裝在主板上的ASUS可信平臺模塊

**筆記本電腦**
2006年，開始銷售內置TPM芯片的新筆記本電腦。未來，這個概念可以與計算機中現有主板芯片或可以使用 TPM 功能的任何其他設備（例如手機）共存。在PC上，LPC總線或串行外設接口（SPI）總線用於連接到TPM芯片。
（TCG）已經認證了由英飛凌科技、新唐科技和意法半導體制造的TPM芯片，並已將TPM供應商ID分配給超威半導體、愛特梅爾、博通、IBM、英飛凌、英特爾、聯想、美國國家半導體、Nationz Technologies、新唐科技、高通、瑞昱半導體、標準微系統公司、意法半導體、三星、Sinosun、德州儀器和華邦電子。

**TPM 2.0 實現**
TPM 2.0有五種不同實現類型（按安全性從高到低排列）：- 獨立TPM 是在其自己的防篡改半導體封裝中實現TPM功能的專用芯片。它們是最安全的，通過了 FIPS-140 認證，具有3級物理安全，相對於軟件中實現的例程，它們對攻擊的抵抗力更強，並且它們的封裝需要實現一定的防篡改能力。例如，汽車制動控制器中的TPM通過複雜的方法防止黑客入侵。- 集成TPM 是另一個芯片的一部分。雖然它們使用可以抵抗軟件錯誤的硬件，但它們不需要實現防篡改功能。英特爾已在其部分芯片組中集成了TPM。- 固件TPM（fTPM）是基於固件（例如 UEFI）的解決方案，在 CPU 的可信執行環境中運行。英特爾、AMD 和高通已經實現了固件 TPM。- 虛擬TPM（vTPM）由虛擬機內部運行的軟件隱藏的隔離執行環境中的虛擬機監控程序提供並依賴於該程序，以保護其代碼免受虛擬機中軟件的攻擊。它們可以提供與固件 TPM 相當的安全級別。谷歌雲平臺已經實現了vTPM。- 軟件TPM 是 TPM 的軟件仿真器，其運行時獲得的保護不超過操作系統中常規程序獲得的保護。它們完全依賴於運行環境，因此它們提供的安全性不超過正常執行環境可以提供的安全性。它們對於開發目的很有用。

**開源實現**
TPM 2.0規範的官方TCG參考實現由微軟開發。它在BSD許可證下獲得許可，並且源代碼可在GitHub上獲得。
2018 年，英特爾開源了其可信平臺模塊2.0（TPM2）軟件棧，支持Linux和Microsoft Windows。源代碼託管在GitHub上，並在BSD許可證下獲得許可。
英飛凌資助開發了一個開源TPM中間件，該中間件符合TCG的軟件棧（TSS）增強系統API（ESAPI）規範。它由弗勞恩霍夫協會安全信息技術研究所（SIT）開發。
IBM的軟件TPM 2.0是TCG TPM 2.0規範的實現。它基於TPM規範第3部分和第4部分以及微軟捐贈的源代碼。它包含完成實現的其他文件。源代碼託管在 SourceForge 和 GitHub 上，並在 BSD 許可證下獲得許可。
2022 年，AMD宣佈，在某些情況下，他們的fTPM實現會導致性能問題。BIOS更新中提供了修復程序。

**TPM 1.2與TPM 2.0**
雖然TPM 2.0涵蓋了許多相同的用例並具有相似的功能，但細節有所不同。TPM 2.0不向後兼容TPM 1.2。
TPM 2.0策略授權包括1.2 HMAC、局部性、物理存在和PCR。它添加了基於非對稱數字簽名的授權、對另一個授權密鑰的間接授權、計數器和時間限制、NVRAM值、特定命令或命令參數以及物理存在。它允許對這些授權原語進行AND和OR運算以構建複雜的授權策略。

**接受度**
中華人民共和國商用密碼產品銷售管理以前規定「任何單位或個人不得銷售境外的密碼產品」，因此早期市場銷售的資訊設備不搭載TPM。2005年前後，中國開始推行國產密碼技術TCM系統（Trusted Cryptographic Module）。
（TCG）在某些領域推廣這項技術時遇到了阻力，一些作者認為這項技術可能存在與可信計算無關的用途，這可能會引發隱私問題。這些擔憂包括濫用軟件遠程驗證來決定允許運行哪些軟件，以及可能以用戶完全無法察覺的方式將用戶採取的操作記錄到數據庫中。
TrueCrypt磁盤加密實用程序及其衍生產品VeraCrypt不支持TPM。最初的TrueCrypt開發人員認為，TPM的唯一目的是“防止需要攻擊者擁有管理員權限或物理訪問計算機的攻擊”。對計算機擁有物理或管理訪問權限的攻擊者可以繞過TPM，例如，通過安裝硬件擊鍵記錄器、重置TPM或捕獲內存內容並檢索TPM發出的密鑰。譴責性文字甚至聲稱TPM完全是多餘的。VeraCrypt發佈者複製了最初的說法，除了將“TrueCrypt”替換為“VeraCrypt”之外沒有任何更改。作者的觀點是正確的，即在獲得不受限制的物理訪問權限或管理員權限後，繞過現有的其他安全措施只是時間問題。但是，阻止擁有管理員權限的攻擊者從來都不是TPM的目標之一（有關詳細信息，請參閱用途），並且TPM可以阻止某些物理篡改。
2015 年，理查德·斯托曼建議將“可信計算”一詞替換為“背叛計算”，因為如果密碼密鑰對用戶保密，則計算機可能會被設置為系統地不服從其所有者。他還認為，2015年用於PC的TPM目前並不危險，並且沒有理由不在計算機中包含TPM或在軟件中支持TPM，因為業界嘗試使用該技術進行DRM的嘗試失敗了，但2022年發佈的TPM2正是他警告過的“背叛計算”威脅。

**攻擊**
2010年，Christopher_Tarnovsky在黑帽大會上展示了針對TPM的攻擊，他聲稱能夠從單個TPM中提取秘密。在對Infineon SLE 66 CL PC插入探針並監視內部總線進行6個月的研究後，他成功實現了這一點。
如果存在物理訪問權限，則配備TPM 1.2的計算機容易受到冷啟動攻擊，只要系統處於開啟狀態或可以在不輸入密碼的情況下從關機、睡眠或休眠狀態啟動即可，這是使用BitLocker全磁盤加密的Windows計算機的默認設置。有人提出了一種修復方法，該方法已在TPM 2.0規範中採用。
2009 年，TPM 1.2中共享授權數據的概念被發現存在缺陷。獲得數據訪問權限的攻擊者可以欺騙來自TPM的響應。有人提出了一種修復方法，該方法已在TPM 2.0規範中採用。
2015年，作為斯諾登事件的一部分，據透露，美國中央情報局的一個團隊在2010年的一次內部會議上聲稱，他們對TPM進行了差分功率分析攻擊，併成功提取了秘密。
2017年11月之前的主要可信啟動行版都受到測量動態信任根（DRTM）攻擊（2017-16837）的影響，該攻擊會影響在英特爾可信執行技術（TXT）上運行啟動例程的計算機。
2018年，有人報告了用於測量靜態信任根（SRTM）的TPM 2.0規範中的一個設計缺陷（2018-6622）。它允許攻擊者重置和偽造平臺配置寄存器，這些寄存器旨在安全地保存用於啟動計算機的軟件測量值。修復它需要特定於硬件的固件補丁。攻擊者濫用電源中斷和TPM狀態恢復來欺騙TPM，使其誤以為它在未被篡改的組件上運行。
2021年，Dolos Group展示了對獨立TPM的攻擊，其中TPM芯片本身具有一定的防篡改能力，但其通信總線的其他端點卻沒有。他們在全磁盤加密密鑰通過主板傳輸時讀取了它，並使用它解密了筆記本電腦的SSD。

**2017年弱密鑰生成爭議**
2017年10月，據報道，由英飛凌開發並在其TPM中廣泛使用的代碼庫包含一個名為ROCA的漏洞，該漏洞會生成弱RSA密鑰對，從而允許從公鑰推斷出私鑰。因此，所有依賴此類弱密鑰的隱私的系統都容易受到攻擊，例如身份盜竊或欺騙。
將加密密鑰直接存儲在TPM中而不進行Blinding_(cryptography)的密碼系統可能特別容易受到此類攻擊，因為如果攻擊者可以提取加密密鑰，則密碼和其他因素將毫無意義。
英飛凌已向使用其TPM的製造商發佈了固件更新。

**可用性**
目前，幾乎所有PC和筆記本電腦製造商都在其產品中提供了TPM。

**TPM**
TPM 由多家供應商提供：- 英飛凌提供TPM芯片和TPM軟件，它們作為 OEM 版本隨新計算機一起交付，英飛凌還單獨提供符合TCG標準的TPM技術產品。例如，英飛凌在2004年向Broadcom公司授權了TPM管理軟件。- 微芯（前身為 Atmel）製造的TPM設備聲稱符合可信平臺模塊規範1.2版修訂版116，並提供多種接口（LPC、SPI 和 I2C）、模式（FIPS 140-2 認證和標準模式）、溫度等級（商用和工業級）和封裝（TSSOP和QFN）。 其TPM支持PC和嵌入式設備。它還提供 TPM 開發套件，以支持將其TPM設備集成到各種嵌入式設計中。- 新唐科技為PC應用提供 TPM 設備。新唐還通過 I2C 和 SPI 主機接口為嵌入式系統和物聯網（IoT）應用提供TPM設備。新唐的TPM符合共同準則（CC），保證等級為EAL 4，並增加了ALC_FLR.1、AVA_VAN.4 ALC_DVS.2，FIPS_140-2等級為2，物理安全性和EMI/EMC等級為3，並符合Trusted_Computing_Group的要求，所有這些都在一個設備中得到支持。華邦電子生產的TPM現在是新唐的一部分。- 意法半導體自2005年以來一直為PC平臺和嵌入式系統提供TPM。產品包括具有多個接口的獨立設備，支持串行外設接口（SPI）和I²C以及不同的認證等級（消費級、工業級和汽車級）。TPM產品已通過共同準則（CC）認證EAL4+，並增加了ALC_FLR.1和 AVA_VAN.5，FIPS_140-2 2級認證，物理安全等級為3，並且還通過了Trusted_Computing_Group（TCG）認證。
還有混合類型；例如，TPM 可以集成到以太網控制器中，從而無需單獨的主板組件。

**現場升級**
現場升級是TCG用於更新TPM固件的術語。更新可以在TPM 1.2和TPM 2.0之間，或在固件版本之間進行。一些供應商限制了1.2和2.0之間的轉換次數，而一些供應商則限制回滾到以前的版本。date=September 2021平臺OEM（如惠普）提供升級工具。
自2016年7月28日起，所有新的Microsoft設備型號、系列或系列（或通過重大更新（如 CPU、顯卡）更新現有型號、系列或系列的硬件配置）都默認實現並啟用了TPM 2.0。
雖然TPM 1.2部件是獨立的硅組件，通常焊接到主板上，但TPM 2.0可以作為獨立的（dTPM）硅組件在一個半導體封裝中使用，也可以作為集成組件併入一個或多個半導體封裝中——與同一封裝中的其他邏輯單元一起使用，還可以作為基於固件（fTPM）的組件在通用片上系統（SoC）上的可信執行環境（TEE）中運行。

**虛擬TPM**
 Google計算引擎將虛擬化TPM（vTPM）作為Google Cloud的Shielded VM產品的一部分提供。- libtpms 庫提供了可信平臺模塊（TPM 1.2 和 TPM 2.0）的軟件仿真。它的目標是將 TPM 功能集成到虛擬機管理程序中，主要是集成到Qemu中。

**操作系統**
 Windows 11要求TPM 2.0支持作為最低系統要求。在許多系統上，TPM默認情況下是禁用的，需要更改計算機UEFI 中的設置才能啟用它。- Windows 8及更高版本原生支持TPM 2.0。- Windows 7可以安裝官方補丁以添加TPM 2.0支持。- 從Windows Vista到Windows 10都原生支持TPM 1.2。- Linux 內核自3.20版本（2012 年）起就支持可信平臺模塊2.0（TPM 2.0)

**平臺**
 谷歌在其安全模型中將TPM包含在Chromebook中。- 甲骨文在其 X 系列和T系列系統（如 T3 或 T4 系列服務器）中提供TPM。Solaris 11中包含對此的支持。- 2006年，隨著首批採用英特爾處理器的Macintosh機型的推出，蘋果開始在Mac中配備TPM。蘋果從未提供過官方驅動程序，但有一個GPL下的端口可用。自2006年以來，蘋果就沒有推出過配備TPM的計算機。- 2011年，臺灣製造商微星推出了其Windpad 110W平板電腦，該平板電腦配備了AMD CPU和英飛凌安全平臺TPM，並預裝了3.7版控制軟件。該芯片默認情況下處於禁用狀態，但可以使用隨附的預安裝軟件啟用。

**虛擬化**
 VMware ESXi虛擬機管理程序自4.x版本開始支持TPM，從5.0版本開始默認啟用。- Xen虛擬機管理程序支持虛擬化TPM。每個guest都獲得其自己唯一的、模擬的軟件TPM。- KVM與QEMU結合使用，支持虛擬化 TPM。2012，它支持將物理TPM芯片直通到單個專用guest。2017年12月發佈的QEMU 2.11還為guest提供了模擬 TPM。- VirtualBox從2022年10月發佈的7.0版本開始支持虛擬TPM 1.2和2.0設備。

**軟件**
 微軟操作系統Windows Vista及更高版本將該芯片與其包含的名為BitLocker的磁盤加密組件結合使用。微軟曾宣佈，從2015年1月1日起，所有計算機都必須配備TPM 2.0模塊才能通過Windows 8.1Hardware_certification。但是，在2014 年 12月對Windows認證計劃的審查中，這成為了一項可選要求。但是，連接待機系統需要TPM 2.0。 從Windows 10 1511和Windows Server 2016開始，在 Hyper-V 上運行的虛擬機可以擁有自己的虛擬 TPM 模塊。 Microsoft Windows 包含兩個與 TPM 相關的命令：tpmtool（可用於檢索有關 TPM 信息的實用程序）和tpmvscmgr（允許在計算機上創建和刪除TPM虛擬智能卡的命令行工具）。

**參見**
 硬體安全- 硬件安全模塊- Hengzhi chip- 下一代安全計算基礎- 可信計算- 統一可延伸韌體介面（UEFI）- 威脅模型分析

**參考資料**

**外部鏈接**
dead-url=yes