如何确保在TPM内部创建密钥?

时间:2018-12-03 10:14:53

标签: windows security tpm

我需要

  • 在客户端计算机上运行.exe,这将在TPM中创建密钥对。
  • 然后我将使用TPM生成的密钥对的公钥部分创建CSR。

我关心的是如何确保在TPM内部创建密钥,而不是通过欺骗的TPM创建密钥。这样可以迁移和复制私钥。

我听说这是AIK的目的,但我不知道这如何防止TPM被欺骗?

我能想到的一种解决方案是:我进入客户端,使用受信任的操作系统从USB启动,然后获得EKpub。

1 个答案:

答案 0 :(得分:0)

证明密钥源自TPM的过程称为:

  • 对于TPM 2.0:凭据激活,由TPM2_ActivateCredential强制执行
  • 对于TPM 1.2:身份激活,由TPM_ActivateIdentity强制实施

此技术可以完成很多事情,但是其中之一证明,向TPM发出请求后生成的密钥实际上是来自受信任的TPM,并且未被欺骗。对于TPM 1.2,因为这就是问题所在,所以身份激活是一个8步的过程,其过程如下(以下内容摘自TCG的AIK Certificate Enrollment):

  
      
  • 步骤1:平台要求TPM创建AIK密钥对。

         
        
    • (a)平台(或平台上的应用软件)向TSS发出CollateIdentityRequest命令。反过来TSS   向TPM发出MakeIdentity命令。这导致TPM   生成新的AIK公钥对。
    •   
    • (b)TPM在MakeIdentity函数中创建包含以下各项的IDENTITY_CONTENTS结构:(i)   结构版本,(ii)TPM命令顺序,(iii)PrivCADigest   标签和(iv)AIK_pub_key
    •   
    • (c)TPM使用IDENTITY_CONTENTS签名AIK_priv_key结构,并引用生成的签名部分   作为identityBinding
    •   
    • (d)TPM通过MakeIdentity命令输出两(2)个项目:AIK_pub_keyidentityBinding
    •   
  •   
  • 步骤2:TSS生成有关AIK的证明结构

         
        
    • (a)在上一步之后,TSS创建IDENTITY_PROOF结构。该结构包括以下内容   项目:(i)步骤1(d)中的identityBinding结构。 (注意:   identityBinding结构是仅在   IDENTITY_CONTENTS结构)。注意:必须注意   identityBinding结构不是AIK是的加密证明   TPM驻留密钥,并且AIK已通过EK认证。   它仅表明存在一些密钥对。 (ii)TPM规范   版本(iii)SubjectPublicKeyInfo(即AIK_pub_key)(iv)   IdentityLabel(v)EK证书(vi)平台证书
    •   
    • (b)然后,TSS生成对称密钥K1(来自TPM的本地随机数),并使用以下命令对IDENTITY_PROOF结构进行加密   此对称密钥K1
    •   
    • (c)然后,TSS使用ACA的公钥对密钥K1进行加密。使用证明CA的公钥进行的加密是   旨在将K1的披露仅限于ACA。结果   此步骤有两个项目:加密的IDENTITY_PROOF结构和   加密的对称密钥K1。加密的IDENTITY_PROOF和   加密的K1捆绑成一个IDENTITY_REQ结构   包括所使用的对称和非对称算法的标识符   加密结构以及加密结构的大小。
    •   
  •   
  • 第3步:平台将AIK证书请求发送到ACA。平台(或平台上的应用软件)采用   上一步产生的IDENTITY_REQ进行加密,然后   将其发送到ACA。
  •   
  • 步骤4:ACA验证证书请求。收到证书请求后,ACA必须执行许多验证。      
        
    • (a)要访问AIK证书请求结构,ACA必须首先使用其ACA私钥解密密钥K1
    •   
    • (b)然后,ACA使用K1来解密IDENTITY_PROOF结构。
    •   
    • (c)然后,ACA必须重新创建IDENTITY_CONTENTS结构并验证签名(如接收到的   identityBinding)是正确的。 ACA可以执行验证   因为它现在具有上面第2步中列出的项目,并且可以组装   与提供给TPM的PrivCADigestLabel相同。作为...的一部分   验证后,ACA有望验证收到的信息   证书(即EK和平台证书)。预计   ACA将使用标准的X.509证书验证技术,   例如CRL检查[14]和/或查询适当的OCSP   EK证书颁发者(例如TPM)的响应者[15]   制造商网站)。
    •   
  •   
  • 第5步:ACA颁发新的AIK证书。然后,ACA使用(作为公钥)接收到的AIK公共证书创建一个新的AIK证书   键入上一步。 ACA发布(签名)新的AIK   证书使用自己的AIK签名密钥。
  •   
  • 第6步:ACA加密新的AIK证书。在此阶段,ACA必须准备新签发的AIK证书,格式为   由TPM识别。作为TPM_ActivateIdentity命令的一部分   ([5]的15.2节),TPM期望在TPM_EK_BLOB或   (旧规范版本)ASYM_CA_CONTENTS结构。 ACA   执行以下任务:      
        
    • (a)ACA生成随机对称加密密钥K2。对于每个AIK证书请求,此随机K2是唯一的。
    •   
    • (b)ACA使用密钥K2对新的AIK证书进行加密。
    •   
    • (c)然后,ACA创建TPM_EK_BLOBASYM_CA_CONTENTS(取决于TPM版本)结构,该结构   包含以下内容:(i)AIK公钥的哈希(即   在原始请求中找到的AIK公钥)。 (ii)对称   键K2。 (iii)可选的PCR信息-仅适用于TPM_EK_BLOB。的   TPM检查以确保TPM PCR的位置和位置   ACA预期的正确状态可以解锁K2
    •   
    • (d)ACA使用EK公钥对TPM_EK_BLOBASYM_CA_CONTENTS结构进行加密(如EK证书中的   原始请求)。最后一步的目的是确保   只有相同的请求TPM将是可以解密的唯一实体   新发行的AIK证书,因为只有TPM拥有EK   私钥(这是TPM驻留的密钥)。
    •   
  •   
  • 第7步:ACA将新的AIK证书传送到平台上的TPM。然后,ACA传递加密结果(加密的AIK   证书+请求者的blob或ASYM结构)   平台/ TPM。
  •   
  • 第8步:TPM解密新的AIK证书。从ACA接收到(加密的)AIK证书后,平台   必须将结构(blob或ASYM结构)输入(   TPM并使用TSS Tspi_TPM_ActivateIdentity命令激活它。   此命令从ACA解密(加密的)对称密钥K2   之后使用EK-private-key(仅驻留在TPM中)   确保具有匹配发布密钥的AIK驻留在TPM中。然后   使用对称密钥K2来解密AIK证书。
  •   

这里的关键部分是倒数第二句话:

  

此命令从ACA解密(加密的)对称密钥K2   之后使用EK-private-key(仅驻留在TPM中)   确保具有匹配发布密钥的AIK驻留在TPM中

由规范强制执行,除非在TPM中找到要求激活的私钥,否则EK将不会解密TPM_EK_BLOB对象。并且由于该对象是在不使用TPM秘密的情况下由TSS加密的,并且您已经在制造商的CA证书链中验证了EK公钥,因此可以确保请求身份激活的密钥起源于由以下公司制造的TPM中受信任的实体。