Download presentation
Presentation is loading. Please wait.
1
TSS示例程序
2
提纲 TPM模拟环境搭建 TSS编程实例 有关PCR的操作(READ、EXTEND) HASH操作 文件加解密操作 远程证明
3
TPM模拟环境的搭建 准备工作: 以上软件安装完毕后,执行以下3个操作 1. Linux操作系统,内核版本在2.6.30以上
2. Tpm_emulator软件 3. TSS软件栈 以上软件安装完毕后,执行以下3个操作
4
TPM模拟环境的搭建 (1)启动Tpm_emulator:打开一个新的终端,在终端中输入命令: #modprobe tpmd_dev
#rm /var/run/tpm/tpmd_socket:0 #tpmd –fd
5
TPM_Emulator启动成功
6
(2)启动TSS软件栈 打开一个新的终端,在终端中输入命令: #tcsd //TSS启动 #tpmmanager 则出现如图所示界面:
7
(3)设置TPM属主及SRK密码
8
提纲 TPM模拟环境搭建 TSS编程实例 有关PCR的操作(READ、EXTEND) HASH操作 文件加解密操作 远程证明
9
(1)有关PCR操作(READ) 示例程序-1 程序功能: 源码参见: 程序流程见右图: 读取TPM中的PCR值 pcr_read.c
(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值
10
(1)有关PCR操作(EXTEND) 示例程序-2(扩展) 程序功能: 源码参见: 程序流程见右图: 对PCR寄存器 进行扩展操作
创建上下文并 连接到本地 TCS 示例程序-2(扩展) 程序功能: 对PCR寄存器 进行扩展操作 源码参见: pcr_extend.c 程序流程见右图: (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值 获取TPM对象 扩展TPM对象 的PCR值 输出扩展 的PCR值
11
(2)HASH操作 示例程序-3 程序功能: 源码参见: 程序流程见右图: 对消息进行SHA-1操作 tpm_hash.c 创建上下文并
连接到本地 TCS 创建HASH对象 示例程序-3 程序功能: 对消息进行SHA-1操作 源码参见: tpm_hash.c 程序流程见右图: 将消息数据 进行HASH 操作 读取HASH 对象的散列值 输出HASH 操作后的值
12
(3)文件加解密操作 “存储的安全性”是指计算机中的重要文件必须以密文的形式存放在磁盘上,以防止私密信息泄露和客体重用。
密钥的存储保护主要有两种方式 基于加密文件系统的软件保护 系统的加/解密密钥都存放在系统指定的文件中,必须是系统管理员才有权限访问该文件,并进行密钥的相关操作 密钥本身容易遭受恶意病毒感染或者木马破坏甚至盗取密钥 基于USB Key或身份卡的硬件保护模式 一旦该硬件被盗或者损坏,则密钥就不再安全
13
(3)文件加解密操作 示例程序-4 程序功能: 对文件加密 源码参见: tpm_sealdata.c 程序流程如下图:
14
创建上下文并 连接到本地 TCS 创建加密数据对象 创建RSA密钥对象 创建对称密钥对象 将该RSA公私钥对用SRK 公钥进行加密,并将密文 存放至加密数据对象中 读取待加密文件 加密数据对象生成密文文件 ,其中包括:文件密文、 RSA密文和对称密钥密文 将待加密文件用对称密钥加密 生成密文,采用AES-CBC方式 。将密文存放至加密数据对象中 输出密文文件 将对称密钥用生成的RSA 公钥进行加密生成的密文 存放至加密数据对象中( 绑定)
15
生成的密文结构 用SRK加密RSA对象生成的密文 用RSA公钥加密的对称密钥密文 用对称密钥加密的密文
16
文件加解密操作 示例程序-5 程序功能: 解密密文文件 源码参见: tpm_unsealdata.c 程序流程如图:
17
创建上下文并 连接到本地 TCS 创建RSA密钥对象 创建对称密钥对象 采用AES解密算法,将密文 用对称密钥解密,得到明文 读取密文文件 输出解密后的明文 用SRK私钥解密RSA 公私钥对,得到RSA 公私钥对 用RSA私钥解密对称密钥 得到对称密钥
18
(4)远程证明 远程证明 为什么不能用EK直接作为签名密钥?
可信平台使用AIK对当前存储了平台配置信息的PCR值进行签名,报告给远程挑战者以证明其平台状态的可信性 TPM使用EK生成AIK,并通过私有CA签发的AIK证书来完成身份认证 为什么不能用EK直接作为签名密钥?
19
(4)远程证明—应用场景 旅馆式办公 用户不需要和特定的机器绑定,而是和服务器上的身份进行绑定
要求终端机器要是安全的,以防用户的信息在终端机器上泄露 可以通过TPM来发送当前机器的状态给服务器,服务器根据用户当前终端的状态来判断是否允许用户从终端下载其系统镜像
20
(1)申请AIK证书 OWNER PCA TSS TPM 5.encpkpca(K),encK (resp)
1.Idaik aik密钥的标签; 2.Paraik aik密钥参数; 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
21
(2)申请AIK证书 OWNER PCA TSS TPM 6.resppca,encK (certaik) 10.certaik
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.certaik aik证书; 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证书
22
(3)验证pcr签名 OWNER Server TSS PCA TPM 16.pcrindex,random,certaik,Saik
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)
23
(4)远程证明流程 可信平台所有者生成AIK密钥和证书签发请求 可信平台所有者向隐私CA发送证书签发请求 私有CA签发AIK证书
可信平台向挑战者发送验证平台状态数据 挑战者验证平台状态请求 可信平台接收挑战者反馈数据,并进行相应的操作
24
8.1 远程证明 远程证明 可信平台使用AIK对当前存储了平台配置信息的PCR值进行签名,报告给远程挑战者以证明其平台状态的可信性
TPM使用EK生成AIK,并通过隐私CA签发的AIK证书来完成身份认证
25
身份平台创建AIK证书处理流程
26
生成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对象
27
生成AIK密钥和身份证书 调用OpenSSL库来获取隐私CA的密钥 将该OpenSSL的CA密钥转换成TSS密钥对象
get_tss_key_size函数来获取RSA密钥的比特长度 Tspi_Context_CreateObject函数来创建一个TSS密钥对象 获取OpenSSL的CA密钥的公用模数 Tspi_SetAttribData函数来初始化隐私CA密钥对象 设置公钥数据,密钥算法,密钥的素数个数和密钥的加密机制
28
生成AIK密钥和身份证书 Tspi_TPM_CollateIdentityRequest函数来创建一个新的AIK密钥及证书签名请求包
生成随机数作为会话密钥,对证书请求数据采用3DES(本例中采用该加密算法)进行加密 会话密钥则采用CA的公钥加密以保证其机密性
29
发送证书签发请求 根据之前产生的证书,可信平台向私有CA发送证书签发请求,请求私有CA签发AIK证书
30
私有CA签发AIK证书
31
私有CA签发AIK证书 UnloadBlob_IDENTITY_REQ函数将收到的证书签发请求包转换成TCPA_IDENTITY_REQ数据块 用私有CA的私钥对证书请求进行解密 UnloadBlob_SYMMETRIC_KEY函数从解密后的证书请求中取出会话密钥 根据会话密钥的算法类型,对证书请求进行解密 UnloadBlob_IDENTITY_PROOF函数取出证书请求
32
私有CA签发AIK证书 TPM产生身份验证证书的过程是将身份标签信息和私有CA的公钥进行连接,然后采用SHA-1进行散列,再用AIK的私钥进行签名。即Sign_AIK(SHA1(aikLabel || TCPA_PUBKEY(CAPubKey))) 私有CA验证身份证书的流程
33
私有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函数获取散列后的散列值并存储
34
私有CA签发AIK证书 Tspi_TPM_GetCapability函数来获取TPM的版本号 LoadBlob函数加载TPM版本信息
LoadBlob_UINT32函数加载TPM验证标签 LoadBlob函数加载散列值 LoadBlob_PUBKEY函数加载AIK公钥 Tspi_Hash_UpdateHashValue函数对变量credBlob进行散列 Tspi_Hash_VerifySignature函数来验证身份证书签名
35
私有CA签发AIK证书 验证身份证书签名通过后,创建经过私有CA签名的证书
36
私有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方式进行散列
37
私有CA签发AIK证书 Tspi_Hash_GetHashValue函数存入散列值 填充TCPA_SYM_CA_ATTESTATION结构
LoadBlob_UINT32函数加载证书大小信息 LoadBlob_KEY_PARMS函数加载证书加密算法信息 LoadBlob函数加载证书内容 OpenSSL库函数设置AES加密密钥,然后使用该密钥加密credBlob存储空间
38
私有CA签发AIK证书 设置签发证书中对称密钥加密的数据块信息 LoadBlob_SYMMETRIC_KEY函数加载密钥信息
Tspi_GetAttribData函数来获取背书密钥的模数 Trspi_RSA_Encrypt函数来用背书密钥的公钥加密credBlob 设置签发证书中非对称密钥加密的数据块信息
39
接受并激活AIK证书 私有CA将签名的AIK证书返回给可信平台所有者 可信平台所有者激活AIK证书
Tspi_Key_LoadKey函数来加载身份密钥进入TPM Tspi_TPM_ActivateIdentity函数来激活AIK证书
40
保存AIK及其证书 Tspi_Context_RegisterKey函数将AIK密钥注册到永久存储区 可以将AIK证书保存在本地磁盘
41
向挑战者发送验证平台状态数据 Tspi_Context_CreateObject函数来创建一个PCR类型对象
Tspi_PcrComposite_SelectPcrIndex函数来将PCR 15的值放入新创建的PCR Tspi_TPM_GetRandom函数产生一个随机数 Tspi_TPM_Quote函数来生成平台状态信息 将该状态信息和AIK证书发送给挑战者
42
挑战者验证平台状态请求 挑战者处理验证数据流程图
43
挑战者验证平台状态请求 创建TSS上下文并连接该TSS上下文,装载根密钥并设置其口令
Tspi_Context_CreateObject函数来创建类型为SHA-1的散列对象 Tspi_Hash_UpdateHashValue函数对组成员发送过来的vData结构体中的rgbData进行散列 Tspi_Hash_VerifySignature函数来验证对rgbData进行散列的散列值是否与vData结构体中的rgbValidationData数据相同 挑战者发送验证结果数据给可信平台并做相应的操作 等待其他的被挑战者来进行挑战
44
可信平台接收挑战者反馈数据 在旅馆式办公中,被挑战者通过验证后可以下载挑战者上的用户自己的系统镜像 释放相关空间并关闭TSS上下文
Similar presentations