可信平台模块(Trusted Platform Module,TPM)是可信计算平台的核心和基础,是可信计算平台推广和应用的关键。它根据可信计算组织(Trusted Computing Group,TCG)制定的标准而实现,是一种植于计算设备硬件之上、用于提供可信运算基础的安全芯片。
1、可信平台
1.1 信任
在可信计算组织的规范中, “信任”意在表达对行为的期望。然而,可预测的行为并不一定构成值得信任的行为。为了确定一个平台的预期行为,有必要确定其身份,因为它与平台行为有关。物理上不同的平台可能有相同的行为。如果它们是由具有相同行为的组件(硬件和软件)构成的,那么它们的信任属性应该是相同的。
TCG定义了在平台中建立信任的方案,这些方案基于识别其硬件和软件组件。可信平台模块(TPM)提供了收集和报告这些身份的方法。计算系统中使用TPM报告硬件和软件的方式,允许确定预期行为,并从该预期中建立信任。
1.2 可信计算
可信计算并没有一个明确的定义,主要思路是先在计算系统中建立一个物理安全的信任根,再基于该信任根建立一条认证和信任链,把信任扩展到整个系统,最终确保整个系统的可信。其中,信任根是指能够保证所有应用主体行为可信的基本安全模块,它不仅可以判断行为结果的可信性,还能够杜绝一切非授权行为的实施,是构建可信系统的基础。图1所示是信任链在可信计算系统中的传递过程。
图1 可信计算系统中的信任链
具体到能够提供可信计算服务的计算软硬件实体的可信平台上,就是在计算硬件平台上引入安全芯片架构,以提高终端平台的安全性。可信安全芯片构成的模块以可信度量根(CRTM)为信任根,再建立一条信任链,一级度量认证一级,一级信任一级,把信任关系扩展到整个平台,从而确保整个平台的可信。通过可信计算可以实现以下几个方面的功能:
(1)用户的身份认证:对使用者的信任
(2)平台软硬件配置的正确性:体现使用者对平台运行环境的信任
(3)应用程序的完整性和合法性:体现了应用程序运行的可信
(4)平台之间的可验证性:指网络环境下平台之间的相互信任
1.3 可信平台模块(TPM)
TPM是一个系统组件,它的状态与它所报告的系统(主机系统)是分开的。TPM和主机系统之间的唯一交互是通过TCG规范中定义的接口。
TPM是直接或间接地在物理资源上实现的。一个TPM可以使用永久和专门用于TPM的物理资源,或使用临时分配给TPM的物理资源来构建。一个TPM的所有物理资源可能位于同一个物理边界内,或者不同的物理资源可能位于不同的物理边界内。
一些TPM被实现为单芯片组件,使用低引脚数接口(LPC)或串行外设接口(SPI)连接到系统(通常为计算机系统)。TPM组件有一个处理器、RAM、ROM和Flash存储器。与这些TPM的唯一交互是通过LPC总线或SPI总线。除了通过作为接口一部分的I/O缓冲器外,主机系统不能直接改变TPM存储器中的值。
2、可信平台模块(TPM)架构
TPM 本质上是一个SoC 芯片系统,其体系架构如图2所示,内含独立的中央处理器、密码协处理器、随机数发生器、存储器和I/O等部件,能够完成可信度量存储、可信度量报告、密钥产生、加密签名、用户认证、数据安全存储、系统监控等安全信任功能。
图2 TPM体系架构
I/O(输入/输出)模块用来管理通信总线上的信息流,执行适合外部和内部总线通信协议的编码/解码,将消息传递给适当的组件。执行部件模块执行经过I/O传送给TPM的命令。在执行命令前,要先确信命令的执行环境是隔离的和安全的。
选项控制器模块提供对TPM功能开启和关闭的机制,通过改变一些可变标志位来设置TPM的功能选项。TPM要求能够感应任何电源状态的变化,电源检测模块则帮助TPM在电源状态发生变化时,如突然掉电的情况,采取适当的限制措施。挥发性存储器用于存放一些临时数据,如要使用AIK时,就将AIK从外部存储器中调进TPM的挥发性存储器中。平台配置寄存器(PCR)用于存放完整性检测所得到检测值的信息摘要值,可以为挥发性或非挥发性存储器。一个TPM至少需要16个PCR寄存器。
密码协处理器负责RSA算法的实现,RSA算法是TPM芯片使用的主要密码算法,该模块内含一个RSA引擎,提供对内对外的数字签名功能、内部存储数据和传输数据加/解密等功能。HMAC引擎通过HMAC运算生成消息摘要值来确认报文数据是否正确,以防止数据和命令发生错误或被篡改的情况。HMAC引擎仅仅提供运算功能,生成摘要值。它不负责管理数据和命令传输机制。SHA-l引擎负责完成一种基本的hash运算,其hash接口对外暴露,可被调用。密钥生成器负责生成对称密钥和非对称密钥对,密钥生成器一般与随机数生成器(RNG)配合使用。因为对于RSA算法,它要完成大素数的测试,因此RSA非对称密钥对的生成过程会用到RNG随机产生的数据。随机数发生器(RNG)除了用于RSA密钥对的生成,还负责产生各种运算所需要的随机数,如在TPM与外部实体的授权会话协议中,生成偶nonce。其输入可为噪声,时钟等。非易失性存储器一般为EEPROM,用于存放一些永久性数据,如签署密钥EK、存储根密钥SRK、属主授权数据等。
3、 X86服务器可信平台模块设计与实现
在新一代的X86服务器中,TPM模块是嵌入到服务器主板上的,在主板上通过SPI接口和平台控制中枢PCH连接,是独立的、被隔离的硬件,拒绝未经TPM授权的包括CPU在内的实体访问和读取数据,并且有防范物理攻击的能力。
PCH的SPI接口是一个标准的4 引脚串行外设接口。 该接口用于通过两个独立的芯片选择引脚支持最多两个 SPI 兼容闪存设备,而且可以通过第三个芯片选择引脚 SPI_CS2# 支持一个 TPM 模块。SPI接口信号如下表1所示:
表1 SPI接口信号
信号名 |
信号组 |
描述 |
SPI0_MOSI_IO_0 |
数据 |
SPI 串行输出数据从 PCH 到 SPI 设备。 |
SPI0_MISO_IO_1 |
数据 |
SPI 串行输入数据从 SPI 设备到 PCH。 |
SPI0_IO_2 |
数据 |
SPI I/O 用于对四路I/O 操作的支持。 |
SPI0_IO_3 |
数据 |
SPI I/O 用于对四路I/O 操作的支持。 |
SPI0_CLK |
时钟 |
来自 PCH 的 SPI 时钟输出。 |
SPI0_FLASH_0_CS_N |
片选0 |
Select0 SPI 片选 0。 |
SPI0_FLASH_1_CS_N |
片选1 |
Select1 SPI 片选 1 ,信号在使用 2 个设备时用作第二个片选。 仅使用一个 SPI 设备时不使用。 |
SPI0_TPM_CS_N |
片选2 |
Select2 片选 2 专用于支持 SPI 上的 TPM。 |
系统设计通常使用SPI0_FLASH_0_CS_N片选信号和SPI0_FLASH_1_CS_N片选信号分别控制2个SPI Flash芯片,使BIOS支持双固件设计(芯片级冗余)。两个SPI Flash使用相同的4路数据和1路时钟信号。同时,使用SPI0_TPM_CS_N片选信号控制一个TPM 2.0芯片,支持可信认证和安全加密等功能。数据信号使用SPI0_IO_2和SPI0_IO_3,时钟信号使用SPI0_CLK。X86服务器系统TMP模块实现原理和参考电路如下图3和图4所示。
图3 X86服务器系统TMP模块实现原理框图
图4 X86服务器系统TMP模块实现参考电路