TPM功能简介1TPM架构TPM架构:非易失性存储(Non-VolatileStorage);平台配置寄存器PCR;身份认证密钥(Attes.Id.K.);程序代码(ProgramCode);随机数生成器RNG;SHA-1引擎;密钥生成(KeyGen.);可选状态配置(Opt-in);执行引擎(Execengine);输入输出I/O。2安全度量和报告因系统而异,平台的运行状态主要包括内核镜像、进程信息列表、应用的二进制可执行程序。且因TPM存储空间有限,不可能存放与运行状态相关的完整信息,而只能存储其摘要。平台状态寄存器(PCR)是用来记录系统运行状态的寄存器,TCG规范要求实现的一组寄存器,至少有16个(TCG1.1规范),TCG1.2规范中引进了8个额外的平台状态寄存器用于实现动态可信度量,平台状态信息的SHA-1散列值存储在平台状态寄存器中,平台状态寄存器就能够代表机器的运行状态。2.1PCR的安全访问为了防止PCR值被恶意代码随便篡改或伪造,TPM限制对平台状态寄存器的操作,不能像普通字符设备的寄存器那样通过端口映射来随意进行读写操作,平台状态寄存器位于TPM内部,其内部数据受到TPM的保护。对PCR内容的读取是不受限制的,TPM只允许两种操作来修改PCR的值:重置操作(Reset)和扩展操作(Extend),重置操作发生在机器断电或者重新启动之后,PCR的值自动重新清零(TCG1.2新引入的寄存器除外)。系统运行过程中,只能通过扩展操作来改变PCR的内容,扩展操作:PCR[n]=SHA-1{PCR[n-1]||newMeasurement}。扩展操作是不可逆的,即先扩展度量值A再扩展度量值B所得到的PCR值跟先扩展B再扩展A的结果是不同的。通过扩展,PCR能够记录一个无限长的度量值序列,这一系列度量值组成的序列反应了系统状态的变迁,这个扩展序列中的某一个度量值被改变了,之后的度量序列都会受到影响。平台状态信息可以日志的形式放置在TPM外部的度量日志文件中。PCR中通过扩展来记录度量日志信息的摘要,以供以后对度量日志进行验证。虽然理论上来说,一个PCR维护的度量序列就能够记录整个平台的状态值,但PCR并不只用于校验度量日志,因此在启动过程中用到了多个PCR。2.2信任链产生与完整性度量恶意代码能够在这个启动序列中的某一个环节上截取控制权,那么它就能够任意篡改和控制之后的启动序列。必须有一种强有力的信任机制来评估系统启动过程是否已经被攻击者所篡改,TPM硬件提供的完整性度量机制能够为启动过程提供可信评估,让机器使用者能够在系统被篡改后能够对此作出正确判断。信任传递机制:在信任当前某一环节的前提下,由该环节去评估下一个环节的安全性,确定下一环节可信之后再将控制权转交给下一环节,然后依次向后推进。整个启动序列中都遵循“先度量,再执行”的原则,当前阶段的代码负责度量下一阶段即将要执行的代码,然后再将度量值扩展到PCR寄存器中,这样循环往复,这就构成了信任链。源头(BIOS启动模块)在启动过程中是没有受到度量,即存在一个假设—这个源头是安全可信的。大多数PC系统使用的是可刷写的BIOS固件,这就使得攻击者有可能通过修改BIOS从而摧毁信任根。符合TCG规范的系统必须拥有不可更改的BIOS代码,这段代码可以是一段短小的固化BIOS代码,它来度量其余的大段BIOS,但是最初执行的代码必须是固化不可修改的。各阶段代码的详细配置信息和对PCR值扩展的操作的历史记录是保存在度量日志中的,度量日志存储在磁盘上,而磁盘属于不可信的外存,因此度量日志是可能被攻击者篡改的。对保存在磁盘上的度量日志并不需要进行额外的保护,攻击者即使篡改了度量日志,但由于PCR中记录的度量值是不可伪造的,用户对度量日志进行摘要就会发现与度量值不匹配。基于TPM的可信启动并不能强制保证启动过程是可信的,而只是忠实的记录启动过程的完整性状态,交由用户在启动完成之后做可信判断,TPM本身并不能够控制CPU的执行过程。对启动过程完成了度量记录之后,就必须将记录的状态信息安全地报告给要做可信判断的挑战者,以供进一步根据状态判断启动过程是否可信状态信息包括度量日志和相应的PCR值。BIOS启动块通电自检BIOSGrubLinux内核镜像1.度量1.度量1.度量2.扩展PCR3.写入日志4.移交控制2.扩展PCR2.扩展PCR4.移交控制4.移交控制3.写入日志3.写入日志3.写入日志度量日志TPM2.3远程报告与本地报告根据挑战者是处于远程还是本地,有不同的安全报告方式:远程报告和本地报告。可信平台使用AIK对当前平台的PCR值进行签名,报告给远程挑战者以证明其平台状态的可信性。前者通过使用挑战/应答协议来完成,远程挑战者产生一个随机数nonce对某一可信平台发起挑战请求,最终获取到可信平台用自身AIK密钥签名的PCR值,由于签名算法中加入了nonce,挑战者可以知道签名的新鲜性,以防止重放攻击。可信平台除了发送已签名的PCR外,还包括有度量日志和AIK证书,通过验证AIK证书、AIK签名和nonce的合法性证实平台的身份。挑战者将PCR值与期望值比较可以验证被证明平台的可信性。在进行远程证明时,挑战者是用另一台安全的计算机来校验状态信息,但当挑战者要判断本地机器是否被攻陷,意味着本机有可能是不可信的。如果本机已经被攻击者控制,那么可信判断所得到的结果就会被攻击者篡改,挑战者就会受到欺骗。Seal操作是将数据或密钥与一组指定的PCR状态绑定,只有当这组PCR的值符合特定的一组值时,这些数据和密钥才能够被释放出来。将数据的可访问性与机器状态绑定,操作系统或者用户能够在特定的机器状态访问某些被Seal的数据,机器状态(PCR值)改变之后数据就不在可访问。当要判断机器是否可信,用户可以要求TPM对这条秘密信息执行Unseal操作。3远程证明远程证明是通过一个典型的“挑战-应答”协议来实现的,一个平台(挑战者)向另一个平台(证明者)发送一个挑战证明的消息和一个随机数(nonce),要求获得一个或者多个PCR值对证明者的平台状态进行证明。每个TPM拥有唯一的背书密钥(EndorsementKey),为了尽量减少隐私的泄漏,TCG规定不能使用EK用作身份认证,而使用身份认证密钥AIK以作为EK的别名。TPM使用EK生成AIK,并通过PCA签发的AIK证书来完成身份认证。远程证明是一个综合完整性校验和身份鉴别的过程,向验证者提供了一份可信的平台状态报告。远程证明流程:(1)远程挑战者产生一个随机数nonce对可信平台客户端发起挑战请求,指定要求的PCR寄存器编号。(2)配备TPM的客户端与TSS交互,载入AIK,调用Tspi_TPM_Quote接口对指定的PCR进行签名。Tspi_TPM_Quote接口的输入包括TPM对象句柄,签名密钥对象的句柄,PCR组件对象(含需要签名的PCR索引号)以及对PCR签名的相关信息。对PCR签名的相关信息包含输入数据和输出数据,输入数据指定完成签名需要的额外数据如nonce,输出数据记录签名成功后获取到的TSS_PCRS_STRUCT_INFO结构和签名的PCR值。(3)经过签名的PCR值和对应的度量日志的摘要和AIK证书被反馈给挑战者。(4)挑战者验证摘要数据块的签名,检查nonce。这一步骤验证AIK签名的合法性。挑战者从TSS_PCRS_STRUCT_INFO中获取到PCR值,与nonce串联后计算其哈希值,得到SHA1(PCR||nonce);另外使用AIK证书的公钥解密已签名的PCR值,得到RSA_DecAIK(Quote),如果SHA1(PCR||nonce)==RSA_DecAIK(Quote)则AIK签名是合法的,否则PCR值是已被篡改的或者nonce不是新鲜的。(5)挑战者验证AIK证书的合法性,是否为CA所签发,AIK证书是否仍在有效期内。(6)挑战者基于客户端状态做出下一步动作的决定,即对比PCR摘要值是否与期望值相符,其关键是用户读取度量日志(SML)重新计算期望值的过程。请求的PCRs,nonce配备TPM的客户端挑战者第三方CA使用AIK对要求的PCRs和nonce进行数字签名请求一次摘要验证摘要数据块的签名,检查nonce基于客户端状态做出下一步动作的决定验证AIK证书证书验证,证书作废列表已签名的摘要AIK证书3.1隐私CA(PCA)AIK证书是由PCA(PrivacyCA,隐私CA)创建的,创建流程如下:配备TPM的客户端调用TPM_MakeIdentity以创建AIK密钥;TSS组织AIK请求,包括AIK公钥部分和TPM的EK证书;客户端用PCA公钥对AIK请求进行加密,并将加密数据发送给PCA;PCA验证AIK请求,包括检查请求中EK证书的合法性;PCA签署AIK证书,使用客户端的EK公钥进行加密,然后将数据发送到客户端;客户端调用TPM_ActivateIdentity以获得AIK证书。区别传统CA的证书离线创建,AIK证书的创建过程是在线、自动进行的。通常证书请求者需要向证书注册机构(RegisterAuthority,RA)寄送书面请求报告,以便RA对证书进行离线审核。AIK证书的在线创建基于“TPM是可信的”这个前提,从而免去了证书请求审核过程。使用PCA进行远程证明也有不足之处:PCA与验证方合谋泄漏TPM平台的身份,验证方进行AIK证书验证时需要验证PCA证书的合法性,PCA了解AIK证书对应的EK证书;AIK证书创建时的效率问题,大量在线的AIK证书创建请求可能带来瓶颈。3.2直接匿名认证(DAA)TPM平台、DAA签署方(Issuer)和DAA验证方。加入(Join)和签名/验证(Sign/Verify)。Join:签署方验证TPM平台,并为TPM平台签署DAA证书。Sign/Verify:TPM使用DAA证书与验证方进行交互,验证方通过“零知识证明”可以在不违背TPM平台隐私前提下对DAA进行验证,DAA协议支持黑名单功能,识别被攻陷的TPM。匿名认证的好处:DAA签署方不能把AIK的签署和EK联系在一起;两个DAA签名不能够区分是否来自同一TPM。DAA协议流程如下所示,它作为PCA的一种替代方案,验证方在进行证书验证过程中不需要了解PCA的信息,避免了验证方和PCA的合谋,TPM和DAA签署方交互一次,可生成多个AIK证书,解决了可扩展性/可用性。4数据保护可信平台的基本原则:必须真实报告系统的状态,同时不能暴露密钥和尽量不表露自己的身份。数据安全保护是可信平台的核心功能之一,数据安全保护就是通过密钥对数据采用特定的保护方式进行处理,基本单元包括:密钥、数据、数据保护方式。用于数据安全保护的密钥分为对称密钥和非对称密钥,被保护的数据可以是任何数据。数据安全保护方式包括:数据加解密、数据封装、数字信封等方式。保护区域:一块可信平台模块中存放敏感信息的存储区,能够安全操作敏感数据的地方。可信平台模块提供的可以对被保护区域进行访问的功能,以命令的形式提供。通过建立平台的保护区域,实现对敏感数据的访问授权,从而控制外部实体对这些敏感数据的访问。使用TPM内部固件和逻辑电路来处理指令,所以它不依赖于操作系统,也不会受到外部软件漏洞的影响;TPM芯片具有很好的物理防篡改性;TPM支持绑定和密封等操作。内置了TPM的计算机能够创建加密密钥并对其进行加密,以便只能由TPM解密,此过程通常称为数据绑定,即将绑定密钥与数据进行绑定。主覆盖/绑定密钥:“存储根密钥(StorageRootKey,SRK)”,存储在TPM的内部。内置了TPM的计算机可以创建一个密钥,该密钥被关联到特定硬件或软件条件,这称为密封密钥。首次创建密封密钥时,TPM将记录配置值和文件哈希的快照,仅在当前系统值与快照中的值相匹配时才解密封或释放密封密钥。用户在他的计算机上保存自己的日记,但是不希望其他的程序或计算机读取,使用密封密钥进行密封操作,就能保证该日志只有在该计算机上的未被修改的日记软件才可以打开,转发到别的计算机或篡改用户