可信计算中的身份鉴别和证明-EK、AIK和DAA

可信计算

可信计算的概念由来已久,此处罗列几个时间点!

信息安全标准的演变:

  1. 1985年美国国家安全局提出TCSEC标准,又被称为橘皮书,里面第一次提到了TCB(可信基)的概念。
  2. 1987年,NSA又提出了用于可信网络连接方面的TNI标准,被称为红皮书,至此彩虹系列的安全标准应运而生。
  3. 1991年欧洲四国(英、法、德、荷兰)联合提出ITSEC标准。
  4. 1993年,美国提出本国的FC标准。同年加拿大提出自己的CTCPEC标准。
  5. 1996年,欧洲四国和美、加进行六国会议,共同提出CC标准1.0版。
  6. 1998年,CC标准2.0版提出。
  7. 1999年,成立了可信计算平台联盟TCPA。
  8. 2003年,由AMD、惠普、IBM、Intel和微软等企业共同成立了可信计算组织TCG,取代了TCPA。

    可信计算的核心是TPM芯片,既通过物理防护和密码算法,借助杂凑值度量的手段完成可信验证和信任传递。

    可信计算围绕TPM芯片,有三个信任根,既RTR、RTS和RTM。

    信任根可以简单理解为借助TPM芯片完成若干功能的代码片段。其中,RTR是可信报告根、RTS是可信存储根、RTM是可信度量根。

EK证书

    EK证书又叫背书证书,一般是由TPM生产商创造或者植入TPM的,有时也可以由平台的生产商发布。

    一个TPM一生只能有一个EK证书,EK证书是TPM芯片的唯一标识。

平台证书

    平台证书可以证明一个平台中有一个唯一的TPM芯片,且该芯片永久的与一个信任根息息相关。该证书一般由平台生产商发布和制定,包含了一些与EK相关的信息、厂商的平台模块信息以及平台的安全配置信息。

    一般在平台证书中包含了EK证书。

AIK证书

    AIK证书由PrivateCA签发,PrivateCA又叫PCA,也可以叫做ACA(AttestationCA)。AIK证书主要是证明TPM中已经生成了相关的AIK密钥,且已经与对应的EK进行了绑定,以及在AIK注册签发过程中的步骤是否规范。

    其中AIK只能用于签名,不可用去加解密,而且只能用于TPM内部信息的签名使用,这是为了防止攻击者进行AIK破解。

AIK注册过程

1、平台要求TPM生成AIK密钥对

  • 平台或者平台的应用程序向TSS(可信软件栈)发送CollateIdentityRequest命令,TSS向TPM发送MakeIdentity命令,随后TPM生成新的AIK公私钥对。
  • 随着MakeIdentity函数,TPM生成IDENTITY_CONTENTS结构,包括{结构版本,TPM命令序列,PCA的签名标记,AIK的公钥信息}
  • TPM用AIK私钥签名IDENTITY_CONTENTS结构信息,作为注册过程中的identityBinding信息(身份绑定信息)。
  • TPM在MakeIdentity接口中输出两个参数,一个是AIK公钥信息,另一个是identityBinding信息。

2、TSS生成包括AIK的证据数据

  • TSS通过以下的步骤生成了AIK注册请求中需要的证据结构IDENTITY_PROOF。(1)第一个就是identityBinding信息,identityBinding不用加密,他只是用来证明AIK私钥已经存储在TPM中,而且已经被EK证明了,无其他实际意义。(2)TPM的版本说明(3)AIK的公钥(4)IdentityLabel(5)EK证书(6)平台证书。
  • TSS通过TPM接口生成一个对称密钥K1,使用K1加密IDENTITY_PROOF结构数据。
  • TSS使用PCA(或者ACA)的公钥加密K1,这个K1只是向PCA或者ACA解密公开,发送至PCA的其实是密文k1。

3、平台向ACA或者PCA发送AIK证书签发请求。
    平台或者平台应用程序携带着IDENTITY_REQ结果,加密请求数据并发送给ACA。

4、ACA验证签发请求。

  • ACA首先使用自身的私钥解密K1密文,得到对称密钥k1信息。
  • ACA然后使用K1解密IDENTITY_PROOF结构。
  • ACA重新创建IDENTITY_CONTENTS结构,并验证identityBinding结构的正确性。同时也可以验证整个IDENTITY_PROOF结构。

5、ACA生成一个新的AIK证书。
    ACA可以使用收到的AIK公钥生成新的AIK证书。使用自己的AIK签名密钥来签发AIK证书。

6、ACA加密AIK证书
    ACA依靠TPM来加密AIK证书。使用接口TPM_ActivateIdentity命令,TPM输入一个TPM_EK_BLOB或者ASYM_CA_CONTENTS结构。

  • ACA生成对称密钥k2,一个AIK对应唯一的k2。
  • ACA使用k2加密AIK证书。
  • ACA创建一个TPM_EK_BLOB结构,包括一下内容:(1)AIK公钥的哈希值 (2)k2(3)附带PCR信息,供TPM来检查确保TPM的pcr寄存器的装饰是否正确。
  • ACA使用EK公钥加密TPM_EK_BLOB结构的数据。确保只有对应的TPM才能收到ACA签发的AIK证书。

7、ACA将加密的TPM_EK_BLOB结构数据和加密后的AIK证书发送至TPM平台。

8、平台收到之后使用TPM解密AIK证书
    向TPM发送Tspi_TPM_ActivateIdentity命令来解密TPM_EK_BLOB结构。取出k2,然后解密AIK证书。

AIK挑战和证明

1、一个挑战者的请求,包括若干的PCR寄存器值以及其他相关信息,比如TPM版本信息等,还包括挑战者需要平台返回的临时随机信息。由挑战者发送至被待证明的平台。

    该请求可以用Req(PCR列表S_pcr,是否需要TPM版本信息的开关标识,临时信息N_value)。

2、平台或者应用程序收到相关请求,由TSS调用TPM_Quote或者TPM_Quote2命令,TPM得到命令后,使用AIK私钥对S_pcr指向的寄存器列表值,TPM版本信息以及N_value信息进行签名,返回SG_tpm值、S_pcr指向的寄存器的值列表,以及TPM的版本信息。

3、TSS受到TPM的接口返回,收集相关信息,将TPM版本信息、SG_tpm值、详细度量记录日志和证书(包括平台证书、一致性证书以及AIK证书)一起发送给挑战者。

4、挑战者从PCA处验证证书信息,然后使用AIK证书将TPM版本信息,和从度量日志中重新计算出来的各个PCR寄存器的值,进行二次签名,并于SG_tpm签名做比对,从而得出此次证明挑战是否完成。

DAA直接匿名证明

    在TPM1.2版本中,取消了上面的注册以及证明的流程,使用DAA直接匿名证明,也就是零知识证明。

    原因:

    1、从上述注册流程中可知,TPM每生成一个AIK密钥对,都需要PCA或者ACA给签发一个AIK证书,当AIK密钥对需求量较大时,势必会对PCA平台的稳定性和可用性造成影响。

    2、PCA平台存在上帝视角,当挑战者发起挑战时,需要跟PCA发起请求来验证TPM平台的真伪,PCA中存在这所有的EK证书和AIK证书的对应关系,也就是TPM芯片与AIK证书的关系。存在一定程序的信息泄露风险。

    DAA方法:

    在DAA方法中,存在join和sign/verify等几种协议,此处不做讨论。

    TPM平台使用EK与DAA的issue发行方进行交互,交互之后TPM芯片中就同时存在DAA证书、EK证书以及生成的AIK证书等。

    当挑战者A向TPM平台发起证明挑战,平台方将DAA签名的AIK_A信息发送给A,A即可验证当前信息是否来自有效的TPM平台,但A并不知晓来自哪个TPM平台。

    当挑战者B向TPM平台发起证明挑战,平台方将DAA签名的AIK_B信息发送给B,B即可验证当前信息是否来自有效的TPM平台,但B也并不知晓来自哪个TPM平台。

    在DAA证明中,一方面减少了与DAA发行方的交互,另一方面保障了TPM的隐匿。

上一篇:网络流基本算法


下一篇:malware-traffic-analysis 2014-11-16 流量分析和恶意代码分析