信赖平台模组

符合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