slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
TSS 示例程序 PowerPoint Presentation
Download Presentation
TSS 示例程序

Loading in 2 Seconds...

play fullscreen
1 / 44

TSS 示例程序 - PowerPoint PPT Presentation


  • 226 Views
  • Uploaded on

TSS 示例程序. 提纲. TPM 模拟环境搭建 TSS 编程实例 有关 PCR 的操作( READ 、 EXTEND ) HASH 操作 文件加解密操作 远程证明. TPM 模拟环境的搭建. 准备工作: 1. Linux 操作系统,内核版本在 2.6.30 以上 2. Tpm_emulator 软件 3. TSS 软件栈 以上软件安装完毕后,执行以下 3 个操作. TPM 模拟环境的搭建. ( 1 )启动 Tpm_emulator :打开一个新的终端,在终端中输入命令: # modprobe tpmd_dev

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'TSS 示例程序' - kelly-mccarty


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide2

提纲

  • TPM模拟环境搭建
  • TSS编程实例
    • 有关PCR的操作(READ、EXTEND)
    • HASH操作
    • 文件加解密操作
    • 远程证明
slide3

TPM模拟环境的搭建

  • 准备工作:
    • 1. Linux操作系统,内核版本在2.6.30以上
    • 2. Tpm_emulator软件
    • 3. TSS软件栈
  • 以上软件安装完毕后,执行以下3个操作
slide4

TPM模拟环境的搭建

  • (1)启动Tpm_emulator:打开一个新的终端,在终端中输入命令:
      • #modprobetpmd_dev
      • #rm /var/run/tpm/tpmd_socket:0
      • #tpmd–fd
slide6

(2)启动TSS软件栈

打开一个新的终端,在终端中输入命令:

#tcsd //TSS启动

#tpmmanager

则出现如图所示界面:

slide8

提纲

  • TPM模拟环境搭建
  • TSS编程实例
    • 有关PCR的操作(READ、EXTEND)
    • HASH操作
    • 文件加解密操作
    • 远程证明
1 pcr read
(1)有关PCR操作(READ)
  • (1)创建上下文并连接到本地TCS;Tspi_Context_Create(&hContext); Tspi_Context_Connect(hContext, 0);
  • (2)获取TPM对象;
  • Tspi_Context_GetTpmObject(hContext,&hTPM);
  • (3)读取TPM对象的PCR值;
  • Tspi_TPM_PcrRead(hTPM,i,&pulPcrValueLength,&prgbPcrValue)
  • (4)Tspi_Context_FreeMemory(hContext,prgbPcrValue);

创建上下文并

连接到本地

TCS

  • 示例程序-1
    • 程序功能:
      • 读取TPM中的PCR值
    • 源码参见:
      • pcr_read.c
    • 程序流程见右图:

获取TPM对象

读取TPM对象

的PCR值

输出PCR值

1 pcr extend
(1)有关PCR操作(EXTEND)

创建上下文并

连接到本地

TCS

  • (1)创建上下文并连接到本地TCS;
  • Tspi_Context_Create(&hContext); Tspi_Context_Connect(hContext, 0);
  • (2)获取TPM对象;
  • Tspi_Context_GetTpmObject(hContext,&hTPM);
  • (3)扩展TPM对象的PCR值,通过TCS扩展到真正TPM的PCR值;
  • Tspi_TPM_PcrExtend(hTPM, i, ulPcrDataLength, pbPcrData, pPcrEvent,&pulPcrValueLength,&prgbPcrValue)
  • (4) 输出扩展PCR值
  • 示例程序-2(扩展)
    • 程序功能:
      • 对PCR寄存器进行扩展操作
    • 源码参见:
      • pcr_extend.c
    • 程序流程见右图:

获取TPM对象

扩展TPM对象

的PCR值

输出扩展

的PCR值

2 hash
(2)HASH操作

创建上下文并

连接到本地

TCS

创建HASH对象

  • 示例程序-3
    • 程序功能:
      • 对消息进行SHA-1操作
    • 源码参见:
      • tpm_hash.c
    • 程序流程见右图:

将消息数据

进行HASH

操作

读取HASH

对象的散列值

输出HASH

操作后的值

slide12
(3)文件加解密操作
  • “存储的安全性”是指计算机中的重要文件必须以密文的形式存放在磁盘上,以防止私密信息泄露和客体重用。
  • 密钥的存储保护主要有两种方式
    • 基于加密文件系统的软件保护
      • 系统的加/解密密钥都存放在系统指定的文件中,必须是系统管理员才有权限访问该文件,并进行密钥的相关操作
      • 密钥本身容易遭受恶意病毒感染或者木马破坏甚至盗取密钥
    • 基于USB Key或身份卡的硬件保护模式
      • 一旦该硬件被盗或者损坏,则密钥就不再安全
slide13
(3)文件加解密操作
  • 示例程序-4
    • 程序功能:
      • 对文件加密
    • 源码参见:
      • tpm_sealdata.c
    • 程序流程如下图:
slide14

创建上下文并

连接到本地

TCS

创建加密数据对象

创建RSA密钥对象

创建对称密钥对象

将该RSA公私钥对用SRK

公钥进行加密,并将密文

存放至加密数据对象中

读取待加密文件

加密数据对象生成密文文件

,其中包括:文件密文、

RSA密文和对称密钥密文

将待加密文件用对称密钥加密

生成密文,采用AES-CBC方式

。将密文存放至加密数据对象中

输出密文文件

将对称密钥用生成的RSA

公钥进行加密生成的密文

存放至加密数据对象中( 绑定)

slide15
生成的密文结构
  • 用SRK加密RSA对象生成的密文
  • 用RSA公钥加密的对称密钥密文
  • 用对称密钥加密的密文
slide16
文件加解密操作
  • 示例程序-5
    • 程序功能:
      • 解密密文文件
    • 源码参见:
      • tpm_unsealdata.c
    • 程序流程如图:
slide17

创建上下文并

连接到本地

TCS

创建RSA密钥对象

创建对称密钥对象

采用AES解密算法,将密文

用对称密钥解密,得到明文

读取密文文件

输出解密后的明文

用SRK私钥解密RSA

公私钥对,得到RSA

公私钥对

用RSA私钥解密对称密钥

得到对称密钥

slide18
(4)远程证明
  • 远程证明
    • 可信平台使用AIK对当前存储了平台配置信息的PCR值进行签名,报告给远程挑战者以证明其平台状态的可信性
    • TPM使用EK生成AIK,并通过私有CA签发的AIK证书来完成身份认证
  • 为什么不能用EK直接作为签名密钥?
slide19
(4)远程证明—应用场景
  • 旅馆式办公
    • 用户不需要和特定的机器绑定,而是和服务器上的身份进行绑定
    • 要求终端机器要是安全的,以防用户的信息在终端机器上泄露
    • 可以通过TPM来发送当前机器的状态给服务器,服务器根据用户当前终端的状态来判断是否允许用户从终端下载其系统镜像
slide20

(1)申请AIK证书

1.Idaikaik密钥的标签;

2.Paraikaik密钥参数;

3.Pkpca pca的公钥;

4.K 会话密钥;

5.cred 背书、平台、一致性证书;

6.Signaik用aik私钥签名;

5.encpkpca(K),encK(resp)

OWNER

PCA

1.Tspi_TPM_CollateIdentityRequest(

idaik,paraik,pkpca)

4.encpkpca(K),encK(resp)

TSS

解析TPM命令

1.收集cred:背书证书、平台证书、一致性证书 2.resp=(pkaik,idaik,Saik,cred)

2.TPM_CollateIdentityRequest(

paraik,hash(pkpca,idaik))

3.AIK,Saik

1.验证paraik合法性

2.根据paraik生产AIK密钥对

3.生产签名值Saik= signaik(hash(pkpca,idaik))

TPM

slide21

1.pca私钥解密验证cred和Saik

2.签发AIK证书

3.生成对称密钥K

4.resppca=encpkEK(K,hash(pkaik))

1.K 会话密钥;

2.PkEK EK的公钥;

3.PKaik aik公钥;

4.cred 背包、平台、一致性证书;

5.certaikaik证书;

6.Saik = signaik

(hash(pkpca, idaik))

6.resppca,encK (certaik)

OWNER

PCA

7.Tspi_TPM_ActiveIdentity(

AIK,resppca,encK(certaik))

10.certaik

用K解密encK(certaik)

TSS

解析TPM命令

8. TPM_ActiveIdentity(

AIK,resppca)

9.K

1.用EK私钥解密resppca

2.验证hash(pkaik)

3.若2成立返回K

TPM

(2)申请AIK证书

slide22

1.random Server挑战的随机值;2.index Server需要pcr的索引;

3.pcrindex index对应的pcr值;

4. AIK aik密钥对象;

5.certaik aik证书;

6.Signaik用aik私钥签名;

1.向PCA请求验证certaik合法性

2.若1成立,验证签名值Saik正确性

3.根据pcr值判断终端的状态,来确定是否提供服务

(3)验证pcr签名

16.pcrindex,random,certaik,Saik

OWNER

Server

11.random , index

12.Tspi_TPM_Quote (

AIK,pcrindex,random)

17.certaik验证请求

15.certaik,random,Saik

验证结果

TSS

解析TPM命令

PCA

13. TPM_Quote(

AIK,pcrindex,random)

14.random,Saik

TPM

Saik = signaik(pcrindex,random)

slide23
(4)远程证明流程
  • 可信平台所有者生成AIK密钥和证书签发请求
  • 可信平台所有者向隐私CA发送证书签发请求
  • 私有CA签发AIK证书
  • 私有CA将签名的AIK证书返回给可信平台所有者
  • 可信平台所有者激活AIK证书
  • 可信平台所有者保存AIK及其证书
  • 可信平台向挑战者发送验证平台状态数据
  • 挑战者验证平台状态请求
  • 可信平台接收挑战者反馈数据,并进行相应的操作
slide24
8.1 远程证明
  • 远程证明
    • 可信平台使用AIK对当前存储了平台配置信息的PCR值进行签名,报告给远程挑战者以证明其平台状态的可信性
    • TPM使用EK生成AIK,并通过隐私CA签发的AIK证书来完成身份认证
slide26
生成AIK密钥和证书签发请求

Tspi_Context_Create创建一个新的TSS上下文对象

Tspi_Context_Connect函数来连接到刚创建的TSS上下文

Tspi_Context_GetTpmObject函数来获取TPM对象

Tspi_Context_LoadKeyByUUID函数来加载根密钥以获得授权

Tspi_GetPolicyObject函数来获取SRK的策略对象

Tspi_Policy_SetSecret函数来设置SRK的口令

Tspi_Context_CreateObject函数创建AIK对象

slide27
生成AIK密钥和身份证书
  • 调用OpenSSL库来获取隐私CA的密钥
  • 将该OpenSSL的CA密钥转换成TSS密钥对象
    • get_tss_key_size函数来获取RSA密钥的比特长度
    • Tspi_Context_CreateObject函数来创建一个TSS密钥对象
  • 获取OpenSSL的CA密钥的公用模数
  • Tspi_SetAttribData函数来初始化隐私CA密钥对象
    • 设置公钥数据,密钥算法,密钥的素数个数和密钥的加密机制
slide28
生成AIK密钥和身份证书
  • Tspi_TPM_CollateIdentityRequest函数来创建一个新的AIK密钥及证书签名请求包
    • 含有AIK的公钥,还有可信平台的签注证书、平台证书和验证证书
    • 生成随机数作为会话密钥,对证书请求数据采用3DES(本例中采用该加密算法)进行加密
    • 会话密钥则采用CA的公钥加密以保证其机密性
slide29
发送证书签发请求
  • 根据之前产生的证书,可信平台向私有CA发送证书签发请求,请求私有CA签发AIK证书
ca aik1
私有CA签发AIK证书
  • UnloadBlob_IDENTITY_REQ函数将收到的证书签发请求包转换成TCPA_IDENTITY_REQ数据块
  • 用私有CA的私钥对证书请求进行解密
  • UnloadBlob_SYMMETRIC_KEY函数从解密后的证书请求中取出会话密钥
  • 根据会话密钥的算法类型,对证书请求进行解密
  • UnloadBlob_IDENTITY_PROOF函数取出证书请求
ca aik2
私有CA签发AIK证书
  • TPM产生身份验证证书的过程是将身份标签信息和私有CA的公钥进行连接,然后采用SHA-1进行散列,再用AIK的私钥进行签名。即Sign_AIK(SHA1(aikLabel || TCPA_PUBKEY(CAPubKey)))

私有CA验证身份证书的流程

ca aik3
私有CA签发AIK证书
  • Tspi_Context_CreateObject函数来创建一个类型为SHA-1的散列对象
  • Tspi_GetAttribData函数来取出私有CA的密钥
  • UnloadBlob_TSS_KEY函数将其转化为TCPA_KEY结构的数据
  • LoadBlob函数加载身份标签信息
  • LoadBlob_KEY_PARMS函数加载CA密钥的算法参数
  • LoadBlob_STORE_PUBKEY函数加载CA的公钥
  • Tspi_Hash_UpdateHashValue函数对变量credBlob存储空间进行散列
  • Tspi_Hash_GetHashValue函数获取散列后的散列值并存储
ca aik4
私有CA签发AIK证书
  • Tspi_TPM_GetCapability函数来获取TPM的版本号
  • LoadBlob函数加载TPM版本信息
  • LoadBlob_UINT32函数加载TPM验证标签
  • LoadBlob函数加载散列值
  • LoadBlob_PUBKEY函数加载AIK公钥
  • Tspi_Hash_UpdateHashValue函数对变量credBlob进行散列
  • Tspi_Hash_VerifySignature函数来验证身份证书签名
ca aik5
私有CA签发AIK证书
  • 验证身份证书签名通过后,创建经过私有CA签名的证书
ca aik6
私有CA签发AIK证书
  • Tspi_TPM_GetPubEndorsementKey函数来获取背书密钥的公钥
  • 设置会话密钥参数
  • Tspi_TPM_GetRandom函数生成随机数,将其作为会话密钥
  • Tspi_GetAttribData函数来获取AIK公钥
  • UnloadBlob_TSS_KEY函数将AIK公钥信息转换为TCPA_KEY结构
  • 调用LoadBlob_KEY_PARMS函数加载AIK密钥的算法参数
  • LoadBlob_STORE_PUBKEY函数加载AIK的公钥
  • Tspi_Hash_UpdateHashValue函数对credBlob存储空间采用SHA-1方式进行散列
ca aik7
私有CA签发AIK证书
  • Tspi_Hash_GetHashValue函数存入散列值
  • 填充TCPA_SYM_CA_ATTESTATION结构
  • LoadBlob_UINT32函数加载证书大小信息
  • LoadBlob_KEY_PARMS函数加载证书加密算法信息
  • LoadBlob函数加载证书内容
  • OpenSSL库函数设置AES加密密钥,然后使用该密钥加密credBlob存储空间
ca aik8
私有CA签发AIK证书
  • 设置签发证书中对称密钥加密的数据块信息
  • LoadBlob_SYMMETRIC_KEY函数加载密钥信息
  • LoadBlob函数加载散列值
  • Tspi_GetAttribData函数来获取背书密钥的模数
  • Trspi_RSA_Encrypt函数来用背书密钥的公钥加密credBlob
  • 设置签发证书中非对称密钥加密的数据块信息
slide39
接受并激活AIK证书
  • 私有CA将签名的AIK证书返回给可信平台所有者
  • 可信平台所有者激活AIK证书
    • Tspi_Key_LoadKey函数来加载身份密钥进入TPM
    • Tspi_TPM_ActivateIdentity函数来激活AIK证书
slide40
保存AIK及其证书
  • Tspi_Context_RegisterKey函数将AIK密钥注册到永久存储区
  • 可以将AIK证书保存在本地磁盘
slide41
向挑战者发送验证平台状态数据
  • Tspi_Context_CreateObject函数来创建一个PCR类型对象
  • Tspi_PcrComposite_SelectPcrIndex函数来将PCR 15的值放入新创建的PCR
  • Tspi_TPM_GetRandom函数产生一个随机数
  • Tspi_TPM_Quote函数来生成平台状态信息
  • 将该状态信息和AIK证书发送给挑战者
slide42
挑战者验证平台状态请求

挑战者处理验证数据流程图

slide43
挑战者验证平台状态请求
  • 创建TSS上下文并连接该TSS上下文,装载根密钥并设置其口令
  • Tspi_Context_CreateObject函数来创建类型为SHA-1的散列对象
  • Tspi_Hash_UpdateHashValue函数对组成员发送过来的vData结构体中的rgbData进行散列
  • Tspi_Hash_VerifySignature函数来验证对rgbData进行散列的散列值是否与vData结构体中的rgbValidationData数据相同
  • 挑战者发送验证结果数据给可信平台并做相应的操作
  • 等待其他的被挑战者来进行挑战
slide44
可信平台接收挑战者反馈数据
  • 在旅馆式办公中,被挑战者通过验证后可以下载挑战者上的用户自己的系统镜像
  • 释放相关空间并关闭TSS上下文