受信任的执行环境 ACPI 配置文件
10/11/2018
本文内容
许可: Microsoft 同意向您授予对合理且非歧视的条款的免费许可,这些条款仅用于做出、使用、出售、销售、导入或分发此规范的任何实施。 "必需的声明" 是 Microsoft 拥有或 Microsoft 控制的专利的声明,在技术上必须实现此规范的必需部分(也包括可选部分的必需元素),其中导致侵权的功能在此规范中详细说明,而不是仅引用。
1.0 背景
此规范为 TPM 2.0 设备定义了 ACPI 设备对象,以及与 Windows 8 所需的 ACPI 设备对象相关联的控制方法。 控制方法实现了等效于 TCG 物理状态 ACPI 接口,相当于平台重置攻击缓解接口,还可以选择使用 ACPI 方法将命令发送到 TPM 2.0 设备。
额外的静态 ACPI 表(TPM2)用于定义 TPM 2.0 设备与 Windows 8 操作系统之间的通信机制。
备注
Microsoft 指的是受信任的计算组的 "TPM"。下一 "术语为" TPM 2.0 "
2.0 要求
此规范假设有一个计算平台,该平台支持操作系统和固件环境之间 [ACPI09] 中指定的基于 ACPI 的通信。
3.0 使用方案(仅例如)
3.1 发送物理状态命令
典型的使用方案如下所示:
在 OS 环境中,应用程序检测到 TPM 2.0 设备未完全设置为用于 Windows 8。 (如果在预配了 TPM 2.0 的上一个 OS 映像之后安装了新的操作系统映像,则可能会发生这种情况的示例。)
应用程序启动操作系统向导来准备 TPM 2.0 设备,以供使用。
向导通过 UI 与计算机管理员交互,并确定管理员需要清除 TPM 2.0 设备来进行预配,因为 TPM 2.0 设备重置锁定授权值不可用。
若要清除 TPM 2.0 设备,操作系统请求(通过对 TPM 2.0 设备对象执行 ACPI 控制方法)固件执行操作以在下一次启动时清除 TPM 2.0 设备,前提是实际存在的用户确认他们批准清除 TPM2.0 设备。
操作系统重启平台。
在启动过程的早期阶段,固件会识别操作系统发出的挂起请求以清除 TPM 2.0 设备。
该固件向实际存在的用户提供 UI,要求他们采取某种措施来确认是否清除 TPM 2.0 设备。
实际存在的用户确认已清除 TPM 2.0 设备。
固件使用平台层次结构授权清除 TPM 2.0 设备。
如有必要,若要保持清除 TPM 2.0 设备,平台将立即重新启动。
操作系统将启动。
操作系统查询(通过 TPM 2.0 设备上的 ACPI 控制方法)如果清除 TPM 2.0 设备的最后一个 OS 请求已成功,则为(b)未由物理上的用户确认,或者(c)存在其他错误。 在以下情况下,我们假定已成功清除 TPM 2.0 设备。
OS 中的 "TPM 2.0 设备预配向导" 执行其他命令,以使设备可供 Windows 使用。
3.2 请求在下一次启动时清除内存
此方案说明了系统的 "内存清除" 功能如何帮助阻止在平台意外重新启动之后为密钥材料收集系统内存的攻击。
在操作系统中,具有 TPM 2.0 设备的系统上的管理员将为 OS 卷启用 BitLocker 功能。
BitLocker 功能调用 TPM 2.0 设备 ACPI 控制方法来设置在 TCG Platform 重置攻击缓解规范中定义的 ClearMemory 位。
BitLocker 功能对 OS 卷进行加密。
当屏幕被锁定时,管理员会使系统无人参与。
恶意用户在运行时将系统盗取。
恶意用户插入一个 USB 驾驶杆,并快速删除系统电池并重新插入。
重新插入电池时系统开始启动。
由于以前设置了 ClearMemory 位,因此固件将在启动平台制造商未提供的任何代码之前清除整个系统内存。
恶意用户会在启动过程中将固件配置为启动到 USB 设备,即使 USB 设备上的代码未正确签名也是如此。
USB 设备上的代码会扫描系统内存中的 BitLocker 卷主密钥,但找不到它。
警告
步骤11到16类似于前面的步骤,但使用 UEFI 接口而不是 ACPI
恶意用户会正常尝试启动系统。
由于已通过 TPM 密钥保护程序启用了 BitLocker,这使得 BootMgr 可以 "解封" OS 卷的卷主密钥,因为在 BootMgr 运行时,TPM 2.0 设备中的正确度量值是正确的。
引导进入操作系统登录屏幕。
恶意人员再次删除,然后重新插入电池并从 USB 设备启动代码。
由于设置了 ClearMemory 位,系统固件将在启动过程中清除整个系统内存。
尽管 USB 设备中的代码会扫描系统内存,但 OS 卷加密密钥不在内存中。
3.3 向 TPM 2.0 设备发出命令
此示例不适用于所有系统体系结构。
Windows TPM 2.0 驱动程序要向 TPM 2.0 设备发出命令。
Windows TPM 2.0 驱动程序将执行的命令写入到前面在 Windows TPM 2.0 驱动程序初始化期间从 ACPI 定义的控制区域读取的物理地址。
Windows TPM 2.0 驱动程序执行 ACPI 控制方法以执行 TPM 2.0 命令。
Windows TPM 2.0 驱动程序会轮询控制区域中的寄存器,直到它们指示 TPM 命令已完成。
Windows TPM 驱动程序从先前在 Windows TPM 驱动程序初始化期间从 ACPI 定义的控制区域读取的物理地址读取命令响应。
4.0 TPM 2.0 系统和设备的常规 ACPI 要求
4.1 电源注意事项
ACPI D1/D2
TPM 2.0 设备可能支持 ACPI D1 和/或 ACPI D2,但其行为必须与在 D1 或 D2 中处于电源状态 ACPI D0 的行为相同。
ACPI S3 (睡眠)
TPM 2.0 可能支持 S3,但必须由系统/平台制造商控制设备的 S3 低功率状态进入和退出。
操作系统(或操作系统环境中运行的其他软件)不得将 TPM 2.0 设备置于 S3 中,或者导致 TPM 2.0 设备退出 S3。 例如,如果 TPM 2.0 设备位于总线上,操作系统必须无法关闭总线,导致 TPM 2.0 设备进入 S3。
Windows 8 TPM 驱动程序将在进入 S3 (睡眠)之前尝试发出 TPM2_Shutdown 命令。
如果硬件平台支持 S3 并且在系统处于 S3 状态时 TPM 不会保留其状态,则在 S3 恢复期间,平台必须发出必需的 TPM2_Init 和 TPM2_启动(TPM_SU_状态)命令。 在进入 S3 之前,OS 可能尚未完成 TPM2_Shutdown 命令。 这可能会导致 TPM2_启动(TPM_SU_状态)的返回结果返回一个错误。 从 S3 恢复的系统固件必须适当地处理 TPM2_启动错误。 例如,通过通过硬件禁用对 TPM 的访问,发出 TPM2_启动(TPM_SU_CLEAR)命令,并通过采取措施(例如将具有错误摘要(0x01)的分隔符扩展到 PCRs 0 到7并锁定 NV 索引)安全配置设备。
系统必须按锁定时间间隔(TPM_PT_锁定_时间间隔)递减系统在 S3 中的时间,从而通过递减 TPM 字典攻击失败计数(TPM PT_锁定_计数器)来考虑 S3 的时间。_ 这可能需要平台实现来提供备用电压,以便在 S3 或平台期间保留 TPM 时钟和/或状态。还可以安全地提供有关系统处于低功耗状态的时间,以便 TPM 能够可靠地更新其字典攻击逻辑的授权失败计数。
连接备用系统的低功率状态
Windows 8 不会执行进入时与 TPM 关联的任何其他操作,并且不会在连接备用系统的低功耗状态下退出。 平台必须执行任何所需的操作,只要系统进入并退出连接备用系统的低功率状态,它就会以 D0 的方式运行。 这可能需要平台实现以提供备用电压以使 TPM 时钟和/或保持状态。 或者,平台可能需要安全地提供系统处于 TPM 低电量状态所用时间的相关信息,因此 TPM 可以可靠地为其字典攻击逻辑更新其授权失败计数。
系统关闭
系统应在系统使用每个锁定时间间隔(TPM_PT_"锁定_间隔")时,根据系统在 S5 的时间递减 TPM 字典攻击失败计数(TPM_PT_锁定_计数器),从而安全地考虑完全关闭期间所用的时间。
4.2 ACPI 表
具有 TPM 2.0 设备的系统必须提供具有硬件设备 ID 和 OS 供应商特定静态表(TPM2)的设备对象表,如下所述。
一旦将平台发运给客户,TPM2 表和 TPM 2.0 设备对象都必须保持不变。 192.168.0.2. 固件选项不得允许隐藏 TPM2 表或 TPM 2.0 设备对象。)例外情况是,如果系统附带非默认的选项来提供 TPM 1.2 功能,而不是 TPM 2.0 功能(即,与 Windows 7 等较早版本的操作系统兼容)。在这种情况下,可以通过 BIOS 配置选项删除 TPM2 表和 TPM 2.0 设备对象,并对执行的 TPM 1.2 进行枚举。 注意:默认情况下,需要为 Windows 8 连接的备用系统交付 TPM 2.0,以使其对操作系统可见。 请与 Microsoft 联系,以获取有关在硬件平台上的 TPM 2.0 和 TPM 1.2 之间切换的技术指南。
4.3 TPM 2.0 设备对象 ACPI 表
4.3.1 总线层次结构
设备对象表必须位于 ACPI 命名空间中的 DSDT 表下。TPM 2.0 设备对象必须位于 "root\_SB" 系统总线下。
4.3.2 硬件标识符
TPM 2.0 设备对象的实际即插即用硬件标识符(例如 _HID)必须是 "MSFT0101",或者设备必须具有兼容的 ID "MSFT0101",并且 _HID 可以是特定于供应商的。
4.3.3 资源描述符
ACPI TPM 2.0 设备对象必须声明 TPM 2.0 设备使用的所有资源。
4.3.4 控件方法
4.3.4.1 平台重置攻击缓解
系统必须实现 UEFI [TCG08] 的所有 ACPI 和 UEFI 相关部分。 设备对象必须实现 [TCG08],第6部分定义的控制方法接口。 即使平台无条件清除每次启动的内存,接口也是必需的。 内存清除不得针对 TPM 2.0 设备状态(相反 [TCG08] 不需要在 TPM 1.2 不拥有时清除内存)。 此外,必须实现 [TCG08] 的第3部分,共5部分。 必须根据 ACPI 规范实现 _DSM 查询函数(function index 0)。 (注意:对于 _DSM 方法的返回值,ACPI 4.0 规范中存在错误。 _DSM 方法的返回值应为包含0x03 的缓冲区。)实现必须自动检测有序的操作系统关闭,并清除此类事件的 ClearMemory 位。
使用 TPM 2.0 的基于 UEFI 的 ARM 系统的特殊说明:在使用 TPM 2.0 的基于 UEFI 的 ARM 系统上,Windows 8 将在每次启动时使用 UEFI 接口,无条件地请求内存。 仍需要实现 ACPI 接口,但接口可能实现为不更改 ClearMemory 或 DisableAutoDetect 标志的状态。 (注意: Microsoft 建议根据 TCG 规范实现 ACPI 接口,以便调用 ACPI 接口确实更改 ClearMemory 或 DisableAutoDetect 的状态。)
4.3.4.2 物理存在接口
系统必须按下面的附加说明 [TCG11] 中定义的规范:
在 TCG 规范中使用 TPM 应与 TPM 2.0 设备等同。
必须实现第2部分中定义的控制方法,但有以下限制:
必须根据 ACPI 规范实现 _DSM 查询函数(function index 0)。 (注意:对于 _DSM 方法的返回值,ACPI 4.0 规范中存在错误。 _DSM 方法的返回值应为包含0x01FF 的缓冲区。)
对于 "获取特定于平台的操作以过渡到预操作系统环境",实现必须返回值 "2:重新启动"。 若要进行重启转换,必须发生 PPI 操作,并且应发生关闭转换。
以下控制方法的实现是可选的: "将 TPM 操作请求提交到 OS 之前的环境" (可能返回 "2: General 失败")和 "提交首选用户语言" (可能返回 "3:未实现")。
第3部分中的要求必须通过以下修订版本来实现:
BIOS 不需要为 NoPPIProvision 标志提供持久存储,因为它授权的操作与 TPM 2.0 设备状态无关。
表2的修订方式如下:
表1:修改后的 PPI 表2
OperationValue
操作名称
TPM 状态
BIOS TPM 管理标志
强制和可选
需要确认物理状态时
可能需要其他启动周期
0
无操作
M
1-4
无操作
M
5
TPM2_ClearControl (NO) +
TPM2_Clear
X
M
NoPPIClear 为 FALSE
X
6-11
无操作
M
12-13
无操作
O
14
TPM2_ClearControl (NO) +
TPM2_Clear
X
M
NoPPIClear 为 FALSE
X
15-16
无操作
M
17
SetNoPPIClear_False
X
O1
18
SetNoPPIClear_True
X
O1
始终
19-20
无操作
O2
21-22
TPM2_ClearControl (NO) +
TPM2_Clear
X
M
NoPPIClear 为 FALSE
X
23 - 127
保留
>= 128
特定于供应商
X
X
O
X
重要
对于SetNoPPIClear_False:如果 BIOS 实现标记为 "O1" 或 "O2" 的项,则它必须以集的形式实现它们。 对于SetNoPPIClear_为 True的 "不执行"操作,如果不实现操作12,则 BIOS 不得实现操作19和20。
表3的修订方式如下:
运作
值
运作
名称
BIOS 发送的 TPM 命令和用于执行操作的其他 BIOS 操作
0
无操作
无操作
1-4、6-13、15-16、19-20
无操作
无操作。 但是,必须记住操作号,如果在操作系统中进行查询,则结果必须返回 success。
5、14、21、22
Clear
TPM2_ClearControl (NO) +
TPM2_Clear
* [*,如有必要,请从 TPM2_CLEAR 保存 TPM 更改。 Microsoft 在大多数系统上预计这是不必要的。]
17
SetNoPPIClear_False
(需要明确的物理状态。)
此操作不会更改 TPM 状态。
清除 BIOS TPM 管理标志 NoPPIClear 为 FALSE。
18
SetNoPPIClear_True
(对于明文,不需要确认物理状态。)
此操作不会更改 TPM 状态。
将 BIOS TPM 管理标志 NoPPIClear 设置为 TRUE。
23 - 127
保留
保留,不实现或使用
>= 128
特定于供应商
映射到供应商特定操作的 TPM 命令
必须维护第4部分的精神,以便在需要执行操作但实际机制不需要按键时从实际存在的用户处获得确认。 确认许可的密钥或其他机制由平台制造商提供。
基金
值
运作
名称
证实
文本
5、14、21和22
Clear
已请求配置更改以清除此计算机的 TPM (受信任的平台模块)
警告:清除操作将清除存储在 TPM 上的信息。 你将丢失所有已创建的密钥,并对由这些密钥加密的数据具有访问权限。
按 清除 TPM
按 拒绝此更改请求并继续
18
SetNoPPIClear_True
已请求配置更改,以允许操作系统清除计算机的 TPM (受信任的平台模块),而无需在将来请求用户确认。
注意:此操作不会清除 TPM,但通过批准此配置更改,以后清除 TPM 的操作将不需要用户确认。
警告:清除操作将清除存储在 TPM 上的信息。 你将丢失所有已创建的密钥,并对由这些密钥加密的数据具有访问权限。
按 ,批准未来的操作系统请求以清除 TPM
按 拒绝此更改请求并继续
第5部分是信息。
连接备用系统可能会将 NoPPIClear 硬编码为 TRUE,并且不实现操作17和18。 这意味着它们不需要为物理上的操作实现任何确认对话框,因为物理上的操作都不需要用户确认。
当固件将控制传递到初始程序加载程序代码(如 Windows 启动管理器)时,固件必须启用存储和签署层次结构。
4.3.4.3 可选 ACPI Start 方法
注意:某些平台可能会实现此可选 ACPI 方法,以允许 OS 请求固件执行或取消 TPM 2.0 命令。 使用 ACPI 启动方法取决于静态 ACPI 表的 StartMethod 字段(请参阅4.4 节)。如果静态 ACPI 表的 StartMethod 字段指示使用此方法,则必须实现 ACPI 启动方法。此处定义的 ACPI 函数应位于 _DSM 控制方法对象。 [注意:这不是 TPM2 ACPI 表中的控制方法。] 在此处定义的 _DSM 方法必须按如下方式实现:
UUID
A01
Function
描述
6bbf6cab-5463-4714-b7cd-f0203c0368d4
0
0
如 [ACPI09]、9.14.1 部分中所述。
0
1
开始时间
函数开始
输入参数:
Arg0 (Buffer): UUID = 6bbf6cab-5463-4714-b7cd-f0203c0368d4
Arg1 (Integer): Revision ID = 0
Arg2 (Integer): Function Index = 1
Arg3 (Package): Arguments = Empty Package
返回值:
类型: Integer
返回值的说明:
0:成功
1:常规失败
功能行为:
此函数通知系统查看 TPM 2.0 设备控制区域中的状态寄存器,并采取适当的操作执行或取消 TPM 2.0 命令。
函数是非阻塞的。 调用将立即返回。 (不要尝试从 ACPI 方法中执行命令执行。 AML 调用需要简短。)返回值0返回后,提交的命令被接受,并将由固件执行,或者在已设置 "取消" 字段时取消。 只要可能,系统应返回一个 TPM 响应,而不是此调用中的常规故障。 例如,无法立即处理命令,可能会写入 TPM2_RC 的响应缓冲区_重试,并可以清除开始字段。 如果由于设置了 "取消" 字段而取消了该命令,则此方法可能会在响应缓冲区中写入 TPM2_RC_取消的返回代码,清除开始字段并返回值0。 或者,如果设置了 "取消" 字段,则此方法可能返回值0,并且 TPM 2.0 设备可能会在以后完成,或根据取消命令的要求取消该命令。
返回值1返回后,固件无法读取或操作请求。 除返回值外,请求等效于 "无 OP"。 示例为(a)错误的操作系统驱动程序请求在上一个命令完成之前执行其他命令,(b)该控件区域不在物理内存中 [可能是由于内存损坏],或者(c)命令或响应物理地址不存在。 如果返回值为1,则可能导致 Windows TPM 2.0 驱动程序停止使用 TPM 2.0 设备,直到下一次完全系统启动(这不包括休眠/恢复循环)。
注意:命令执行开始后,如果 OS 选择 "取消当前正在执行的命令",则不会第二次调用此方法。 (但是,在设置 "取消" 字段时,最初可能会为某个命令调用 control 方法。)
4.4 TPM2 静态 ACPI 表
"RSDT" ACPI 表中列出的名为 "TPM2" 的 ACPI 表描述了平台的 TPM 2.0 硬件接口。 Windows TPM 2.0 驱动程序使用此表来确定与 TPM 2.0 设备通信的方式。 下表说明了支持此接口所需的 ACPI 表中的参数。
表3: TPM2 ACPI 表布局
字段
字节长度
字节偏移
描述
标头
签名
4
指
'TPM2'。 TPM 2.0 设备硬件接口表的签名
长度
4
04h
表的长度(以字节为单位),包括从偏移量0开始的标头。 此字段用于记录整个表的大小。
修订
1
08h
此表的修订版本,包括其引用的数据和结构。 如果此引用的任何结构(例如控制区域)被更改,则必须更改此修订版本。 值03h。
校验和
1
09h
整个表(包括校验和字段)必须添加到零,才能视为有效。
OEM ID
6
0Ah
每个 ACPI 规范的 OEM ID。 一个 OEM 提供的字符串,用于标识 OEM (这可能是芯片组供应商)。
OEM 表 ID
8
10h
OEM 表 ID 是制造商型号 ID (由 "OEM ID"确定的 OEM 指定; 可能是芯片组供应商)。
OEM 修订
4
18h
给定 OEM 表 ID 的 OEM 修订版本。 每个 ACPI 都 "[a] OEM 提供的修订号。 较大的数字被认为是较新的修订版本。"
创建者 ID
4
1Ch
创建该表的实用工具的供应商 ID。 对于包含定义块的表,这是 ASL 编译器的 ID。
创建者修订
4
20h
创建该表的实用工具的修订版本。 对于包含定义块的表,这是 ASL 编译器的修订版本。
Flags
4
24小时
保留
必须始终为零
控制区域的地址
8
28h
控件区域的物理地址。 可能是 TPM 2.0 设备内存,也可能是系统在启动过程中保留的内存。 TPM 2.0 驱动程序在整个启动周期(包括休眠和恢复周期)中保留此地址的知识。 如果系统不使用控制区域,则此值必须全为零。
Start 方法
4
30h
启动方法选择器决定 Windows TPM 2.0 驱动程序使用哪种机制将 TPM 2.0 命令与设备通信,并通知 TPM 2.0 设备命令可用于处理。 此字段可能包含以下值之一:
值
描述
0
保留。
1
保留(特定于供应商)
2
使用 ACPI 启动方法。
3-5
6
保留(特定于供应商)
为内存映射 i/o 接口预留(TIS 1.2 + 取消)。 此选项不符合 Windows 8 硬件认证。 使用此选项需要已批准的 Windows 8 WHLK 应急请求来进行徽标认证。 有关详细信息,请与 Microsoft 联系。
7
8
使用命令响应缓冲区接口。
使用带有 ACPI Start 方法的命令响应缓冲区接口。
…
保留。
平台特定参数
各种
34h
平台特定参数的内容由此系统'的 TPM 2.0 设备接口使用的启动机制决定。 此字段包含可用于启动命令处理的值。 此信息可能特定于供应商。 对于开始方法值2或6,不使用字段,并且字节长度为零。
4.4.1 控件区域内容
控件区域结构包含状态字段以及其他控件位/字段和一个或多个地址。 控制区包含命令缓冲区的物理地址和响应缓冲区的物理地址。
并非所有 TPM 2.0 接口实现都使用控制区域,例如,启动方法值6不使用控制区域,此部分中的信息不适用于平台。
控制区域必须位于 ACPI AddressRangeReserved 内存中。
下表显示了控件区域结构,除非另外指定,否则将以 little endian 格式完成对控制区域的所有访问。
表4:控件区域布局
字段
字节长度
偏移量
描述
状态字段
TPM 2.0 状态字段
保留
4
指
保留。 (必须为零。)
错误
4
04h
由 TPM 2.0 设置,以指示错误情况
Cancel
4
08h
由驱动程序设置以中止命令处理
开始时间
4
0Ch
由驱动程序设置,指示命令可用于处理。
中断控制
8
10h
保留。 (必须为零。)
命令大小
4
18h
命令缓冲区的大小
命令
8
1Ch
此字段包含命令缓冲区的物理地址。 请注意,实际的命令缓冲区(而不是命令缓冲区的物理地址)是由 TCG 强制要求的大 endian 格式。
响应大小
4
24小时
响应缓冲区的大小
响应
8
28h
此字段包含响应缓冲区的物理地址。 请注意,实际响应缓冲区(而不是响应缓冲区的物理地址)是由 TCG 强制要求的大字节序格式。
TPM 2.0 驱动程序在初始化操作系统期间会读取以下信息一次:
控件区域的物理地址
命令缓冲区的大小
命令缓冲区的物理位置
响应缓冲区的大小
响应缓冲区的物理位置
对于使用控制区域的系统(即启动方法值不等于6)并支持休眠和恢复,上述五个值必须在休眠和恢复循环之间保持不变。
4.4.1.1 错误
TPM 2.0 设备可能会设置此状态。 它只能在设置 "启动" 时写入此状态。 在 TPM 2.0 设备设置此状态之后,会立即清除起始值。 Windows TPM 2.0 驱动程序将不会读取 "错误" 字段,除非 "开始" 字段已清除。
"错误" 字段的设置值被视为 TPM 2.0 设备或其硬件接口的一般错误。 任何设置值都会导致取消当前命令。 此命令必须回滚,因此 TPM 2.0 设备处于一致状态。
对于具有 ACPI 启动方法的设备,此字段应仅用于无法为其提供响应代码的错误。 例如:响应缓冲区不在物理内存中。 设置此字段后,Windows TPM 2.0 驱动程序可能会停止使用 TPM 2.0 设备。
ExitBootServices 后此字段的初始值必须反映设备是否正常工作。
4.4.1.2 取消
Windows TPM 2.0 驱动程序可以设置此字段,请求终止当前命令的 TPM 2.0 设备处理。 Windows TPM 2.0 驱动程序未调用启动方法来启动对取消请求的处理。
如果由 Windows TPM 2.0 驱动程序设置 "取消",而 TPM 2.0 设备正在处理一个命令,则 TPM 2.0 设备将在最早的方便点停止处理当前命令。 对于大多数命令,TPM 2.0 设备应该会完成命令并提供正常响应。 对于长时间运行的命令(例如,RSA 密钥生成),TPM 2.0 设备可能会退出,因为 TPM_RC_取消。 TPM 2.0 设备必须在90秒内完成或取消该命令。 (通常,大多数 TPM 2.0 命令应在不到500毫秒内完成,但 RSA 密钥生成命令可能需要更长时间,而命令取消应在200毫秒内发生)
当 "开始" 字段清除时,Windows TPM 2.0 驱动程序可以清除此值。 ExitBootServices 后的此字段的初始值必须为 CLEAR。
4.4.1.3 开始
Windows TPM 2.0 驱动程序可以将此状态设置为指示已将新命令放入命令缓冲区。 Windows TPM 2.0 驱动程序可以调用 Start 方法来启动对该命令的处理。 TPM 2.0 设备在处理完命令后将清除此状态。
当启动方法调用失败时,Windows TPM 2.0 驱动程序可能会清除此状态。
ExitBootServices 后的此字段的初始值必须为 CLEAR。
4.4.1.4 命令
这是 Windows TPM 2.0 驱动程序将用于执行命令的物理地址。 Windows TPM 2.0 驱动程序将不会写入大于 "命令大小" 的命令。
Windows TPM 2.0 驱动程序不得写入此内存区域,除非 "开始" 字段已清除。 请注意,该地址在控件区域以小字节序格式指定,但实际的命令缓冲区采用由 TCG 强制要求的大字节序格式。
4.4.1.5 响应
这是 Windows TPM 2.0 驱动程序将从其读取命令响应的物理地址。 Windows TPM 2.0 驱动程序将不会读取大于 "响应大小" 的响应。
Windows TPM 2.0 驱动程序将仅在 "开始" 字段从 "设置为" 变为 "清除" 并清除 "错误" 后读取响应。 请注意,该地址是在控件区域以小字节序格式指定的,但实际响应缓冲区采用由 TCG 强制要求的大字节序格式。
4.5 控件区域接口定义
对于使用控制区域作为 TPM 2.0 接口的硬件平台,本节和第4.4 节中的信息描述了与硬件的 TPM 2.0 驱动程序交互。 使用控制区域的系统的一个示例是 TPM2 表中启动方法值为2的系统。
4.5.1 状态组合
表5描述了 Windows TPM 2.0 驱动程序所做更改的预期行为。 请注意,只允许某些组合。 仅记录允许的组合和更改。 所有其他组合均无效。 Windows TPM 2.0 驱动程序无需执行任何操作的字段更改意味着 TPM 2.0 设备或 ACPI 启动方法更改了字段。
标记有 "0" 的状态指示此字段是清除的。 标记为 "1" 的状态指示此字段已设置。 用 "?" 标记的状态指示此字段的值可以为 "清除" 或 "设置"。 状态字段缩写为: "ERR"-Error、"CCL"-Cancel 和 "STR"-Start。 字段可以通过 Windows TPM 2.0 驱动程序或 TPM 2.0 设备接口写入,此操作列在 "操作" 列中详细说明。
|---
当前状态
---|
|---
写入字段
---|
|---
下一个状态
---|
TPM 2.0 设备接口执行的操作
#
ERR
CCL
字符串
ERR
CCL
字符串
ERR
CCL
字符串
1
0
1
0
-
0
-
0
0
0
Windows TPM 2.0 驱动程序将清除取消值,以便为下一个命令准备控件区域。 Windows TPM 2.0 驱动程序可以仅在开始时清除 "取消" 值。
(TPM 2.0 设备不得写入 "取消" 字段。)
2
0
0
0
-
-
1
0
0
1
Windows TPM 2.0 驱动程序将设置开始值,以指示命令区域中出现命令。
Windows TPM 2.0 驱动程序可以调用 ACPI 启动方法来启动命令的执行。 完成 ACPI 启动方法后,TPM 2.0 设备必须完成命令并清除90秒内的 "开始" 字段。 超过时间限制可能导致 Windows TPM 2.0 驱动程序假定 TPM 2.0 设备挂起。
3
0
?
1
-
-
0
0
?
0
TPM 2.0 设备在完成对命令的处理或取消命令后将清除 "开始" 字段。
如果该命令已取消,则会将返回代码 TPM_RC_CANCELLED 的响应置于响应缓冲区中,并清除 Start。
Windows TPM 2.0 驱动程序可以读取响应缓冲区,而 "开始" 字段已清除。 设置 "开始" 字段时,Windows TPM 2.0 驱动程序不得读取响应缓冲区。
4
0
0
1
-
1
-
0
1
1
Windows TPM 2.0 驱动程序设置 "取消",以指示 TPM 2.0 设备取消当前命令。 通常,应在下一个方便的时候取消长时间运行的命令。 短时间运行的命令可能已完成。 具体而言,在设置 "取消" 字段之后,TPM 2.0 设备必须清除90秒内的 "开始" 字段。 (良好性能目标为200毫秒,而不是90秒。)注意:调用 ACPI Start 方法时可能会设置 "取消" 字段,因为 OS 中的一个线程可以在另一个线程调用 ACPI 启动方法之前设置 "取消" 字段。
5
0
?
1
1
-
-
1
?
1
TPM 2.0 设备指示设备中出现错误。 TPM 2.0 设备的状态如下所示。 Windows TPM 2.0 驱动程序将此值视为 TPM 2.0 设备的一般故障,并取消对命令的处理。
6
1
?
1
-
-
0
1
?
0
TPM 2.0 设备在设置错误字段后立即清除 "开始" 字段。
Windows TPM 2.0 驱动程序仅在 "开始" 字段清除时或在所需的时间范围内未出现命令执行或取消时,才会检查 "错误" 字段。 设置 "错误" 字段时,Windows TPM 2.0 驱动程序可能会停止使用 TPM 2.0 设备。
使用 ACPI Start 方法时的4.5.2 状态图
此状态图仅用于提供信息。 行为的规范说明是前面几节中的文本。 如果状态转换缺失或不明确,请参考上面的文本。
图1:使用 ACPI 启动方法时的 TPM 2.0 设备状态
备注
(a)请注意,多个并发线程可以同时与控件区域交互。 例如:一个线程可以通过设置开始字段然后发出 Start 方法来启动命令。 另一个线程可以并行设置取消字段。 因此,在设置开始字段之后、发出 Start 方法之前,可能会设置取消字段。 (b) Windows TPM 2.0 驱动程序可能会以不同于所示的方式对错误条件作出反应。 例如,它可能会在超时命中时转换为错误状态。
无 ACPI 启动方法的4.5.3 状态图
此状态图仅用于提供信息。 行为的规范说明是前面几节中的文本。 如果存在状态转换缺失或不明确,请参考上面的文本。
图2:没有 ACPI 启动方法的 TPM 2.0 设备状态
4.6 内存映射 i/o 接口
对于使用内存映射 i/o 接口的硬件平台,本节和4.4 节中的信息描述了与硬件进行的 TPM 2.0 驱动程序交互。 使用内存映射 i/o 接口的系统示例是 TPM2 表中启动方法值为6的系统。
4.6.1 TCG TPM 接口规范要求
系统必须符合以下部分 [TCG12] 中的 TPM 1.2 硬件接口要求:
节9.1: TPM 位置级别
第9.2 节:区域使用
第9.3 节:每个寄存器的位置使用情况
第10节: TPM 寄存器空间
第11节:系统交互和流
Except:节11.2.4 失败模式
Except 节11.2.5:命令持续时间,规范项2
Except 部分11.2.6:超时
Except 部分11.2.8:自测和早期平台初始化
Except 部分11.2.9:输入缓冲区大小
Except 部分11.2.10:错误,规范项2c 和3。
第13部分: TPM 硬件协议
如要了解 [TCG12 的未来草案],请联系 Microsoft。
4.6.2 支持取消命令
Windows 要求 TPM 2.0 设备通过如下所述的行为,允许使用内存映射 i/o 接口取消 TPM 2.0 命令。
STS 注册的以前未使用的24位定义为 "仅写" 并被称为 commandCancel。
在命令执行阶段,将 "1" 写入 commandCancel 可能会取消当前正在执行的命令,并且必须返回响应。 响应指示命令是否已取消(不更改 TPM 2.0 状态,但会返回取消响应代码 TPM_RC_取消)或完成(将返回一个指示命令结果的常规 TPM 2.0 响应)。 当 TPM 不处于命令执行状态时,将写入 commandCancel 注册。
4.6.3 其他要求
所有 TPM 命令都必须在最长90秒内完成。
如果 TPM 2.0 驱动程序请求取消命令,则必须在90秒内完成或取消。
必须实现以下超时值: TIMEOUT_A = 1 秒,超时_B = 2 秒,超时_C = 1 秒,超时_D = 1 秒。
最小输入缓冲区大小必须为0x500 (或更大)。
5.0 引用
[ACPI09]
"高级配置和电源接口规范," 版本4.0,年6月 16 2009 日。
[TCG08]
受信任的计算组、"TCG 平台重置攻击缓解规范、" 版本1.0、5月15日、2008。
[TCG11]
受信任的计算组 "TCG 物理存在接口规范," 版本1.20、2011。
[TCG12]
受信任的计算组,"电脑客户端工作组电脑客户端特定 TPM 接口规范(TIS)版本1.21,修订版1.00。