TSS示例程序

Report
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

#rm /var/run/tpm/tpmd_socket:0

#tpmd –fd
TPM_Emulator启动成功
(2)启动TSS软件栈
打开一个新的终端,在终端中输入命令:
#tcsd
//TSS启动
#tpmmanager
则出现如图所示界面:
(3)设置TPM属主及SRK密码
提纲
TPM模拟环境搭建
TSS编程实例
 有关PCR的操作(READ、EXTEND)
 HASH操作
 文件加解密操作
 远程证明
(1)有关PCR操作(READ)

示例程序-1

程序功能:


源码参见:


读取TPM中的PCR值
pcr_read.c
程序流程见右图:
创建上下文并 (1)创建上下文并连接到本地
连接到本地 TCS;
TCS
Tspi_Context_Create(&hCont
ext);
Tspi_Context_Connect(hCont
获取TPM对象 ext, 0);
(2)获取TPM对象;
Tspi_Context_GetTpmObject
(hContext,&hTPM);
读取TPM对象 (3)读取TPM对象的PCR值;
的PCR值
Tspi_TPM_PcrRead(hTPM,i,&
pulPcrValueLength,&prgbPcr
Value)
(4)Tspi_Context_FreeMemor
输出PCR值
y(hContext,prgbPcrValue);
(1)有关PCR操作(EXTEND)

示例程序-2(扩
展)

对PCR寄存器
进行扩展操作
源码参见:


(1)创建上下文并连接到本地TCS;
Tspi_Context_Create(&hContext);
Tspi_Context_Connect(hContext,
0);
获取TPM对象
(2)获取TPM对象;
Tspi_Context_GetTpmObject(hCont
ext,&hTPM);
扩展TPM对象
的PCR值
(3)扩展TPM对象的PCR值,通过TCS
扩展到真正TPM的PCR值;
Tspi_TPM_PcrExtend(hTPM, i,
ulPcrDataLength, pbPcrData,
pPcrEvent,&pulPcrValueLength,&pr
gbPcrValue)
(4) 输出扩展PCR值
程序功能:


创建上下文并
连接到本地
TCS
pcr_extend.c
程序流程见右
图:
输出扩展
的PCR值
(2)HASH操作

示例程序-3

对消息进行SHA-1操作
源码参见:


创建HASH对象
程序功能:


创建上下文并
连接到本地
TCS
tpm_hash.c
程序流程见右图:
将消息数据
进行HASH
操作
读取HASH
对象的散列值
输出HASH
操作后的值
(3)文件加解密操作
 “存储的安全性”是指计算机中的重要文件必
须以密文的形式存放在磁盘上,以防止私密
信息泄露和客体重用。
 密钥的存储保护主要有两种方式
 基于加密文件系统的软件保护
 系统的加/解密密钥都存放在系统指定的文件中,必须是系统
管理员才有权限访问该文件,并进行密钥的相关操作
 密钥本身容易遭受恶意病毒感染或者木马破坏甚至盗取密钥
 基于USB Key或身份卡的硬件保护模式
 一旦该硬件被盗或者损坏,则密钥就不再安全
(3)文件加解密操作

示例程序-4

程序功能:


源码参见:


对文件加密
tpm_sealdata.c
程序流程如下图:
创建上下文并
连接到本地
TCS
创建加密数据对象
创建RSA密钥对象
创建对称密钥对象
将该RSA公私钥对用SRK
公钥进行加密,并将密文
存放至加密数据对象中
读取待加密文件
加密数据对象生成密文文件
,其中包括:文件密文、
RSA密文和对称密钥密文
将待加密文件用对称密钥加密
生成密文,采用AES-CBC方式
。将密文存放至加密数据对象中
输出密文文件
将对称密钥用生成的RSA
公钥进行加密生成的密文
存放至加密数据对象中( 绑定)
生成的密文结构
用SRK加密RSA对
象生成的密文
用RSA公钥加密
的对称密钥密文
用对称密钥加密
的密文
文件加解密操作

示例程序-5

程序功能:


源码参见:


解密密文文件
tpm_unsealdata.c
程序流程如图:
创建上下文并
连接到本地
TCS
创建RSA密钥对象
创建对称密钥对象
采用AES解密算法,将密文
用对称密钥解密,得到明文
读取密文文件
输出解密后的明文
用SRK私钥解密RSA
公私钥对,得到RSA
公私钥对
用RSA私钥解密对称密钥
得到对称密钥
(4)远程证明
 远程证明
可信平台使用AIK对当前存储了平台配置信
息的PCR值进行签名,报告给远程挑战者
以证明其平台状态的可信性
TPM使用EK生成AIK,并通过私有CA签发
的AIK证书来完成身份认证
 为什么不能用EK直接作为签名密钥?
(4)远程证明—应用场景
 旅馆式办公
用户不需要和特定的机器绑定,而是和服务
器上的身份进行绑定
要求终端机器要是安全的,以防用户的信息
在终端机器上泄露
可以通过TPM来发送当前机器的状态给服
务器,服务器根据用户当前终端的状态来判
断是否允许用户从终端下载其系统镜像
1.Idaik
aik密钥
的标签;
2.Paraik aik密钥参
数;
3.Pkpca
pca的公钥;
4.K
会话密
钥;
5.cred
背书、平
台、一致性证书;
6.Signaik 用aik私钥签
名;
(1)申请AIK证
书
5.encpkpca(K),encK
OWNER
PCA
1.Tspi_TPM_CollateIdentityRequest(
idaik,paraik,pkpca)
4.encpkpca(K),encK
(resp)
1.收集cred:背书证书、平
台证书、一致性证书
2.resp=(pkaik,idaik ,Saik,
cred)
(resp)
TSS
解析TPM命令
2.TPM_CollateIdentityRequest(
paraik,hash(pkpca,idaik))
3.AIK,Saik
TPM
1.验证paraik合法性
2.根据paraik生产AIK密钥对
3.生产签名值Saik =
signaik(hash(pkpca,idaik))
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
6.resppca,encK
OWNER
(hash(pkpca , idaik))
7.Tspi_TPM_ActiveIdentity(
AIK,resppca,encK(certaik))
10.cert
aik
用K解密
encK(certaik)
TSS
解析TPM命令
8. TPM_ActiveIdentity(
AIK,resppca)
9.K
(2)申请AIK证书
(certaik)
TPM
1.用EK私钥解密resppca
2.验证hash(pkaik)
3.若2成立返回K
PCA
1.random Server挑战的随机
值;2.index Server需要pcr
的索引;
3.pcrindex index对应的pcr值;
4. AIK aik密钥对象;
5.certaik aik证书;
6.Signaik 用aik私钥签名;
(3)验证pcr签名
1.向PCA请求验证certaik合法性
2.若1成立,验证签名值Saik正确
性
3.根据pcr值判断终端的状态,
来确定是否提供服务
16.pcrindex,random,certaik,
OWNER
Saik
Server
11.random , index
12.Tspi_TPM_Quote (
AIK,pcrindex,random)
15.certaik,random,Sa
ik
TSS
解析TPM命令
13. TPM_Quote(
AIK,pcrindex,random)
14.random,Sai
k
TPM
Saik =
signaik(pcrindex,random)
验
证
结
果
17.ce
rtaik验
证请求
PCA
(4)远程证明流程
 可信平台所有者生成AIK密钥和证书签发请求
 可信平台所有者向隐私CA发送证书签发请求
 私有CA签发AIK证书
 私有CA将签名的AIK证书返回给可信平台所有者
 可信平台所有者激活AIK证书
 可信平台所有者保存AIK及其证书
 可信平台向挑战者发送验证平台状态数据
 挑战者验证平台状态请求
 可信平台接收挑战者反馈数据,并进行相应的操作
8.1 远程证明
 远程证明
可信平台使用AIK对当前存储了平台配置信
息的PCR值进行签名,报告给远程挑战者
以证明其平台状态的可信性
TPM使用EK生成AIK,并通过隐私CA签发
的AIK证书来完成身份认证
身份平台创建AIK证书处理流程
开始
获取私有CA密钥长度
创建TSS上下文
创建TSS密钥对象
激活AIK证书
连接TSS上下文
获取CA密钥的模数
保存AIK证书
获取TPM对象
设置TSS密钥的公钥
发送验证平台状态请
求
加载根密钥
设置密钥的算法类型
等待接收验证结果
等待
获取AIK证书
等
待
获取SRK策略对象
设置密钥的素数个数
设置SRK口令
设置密钥的加密机制
否
验证通过
是
处理操作
创建AIK对象
产生证书签发请求包
释放TSS上下文资源
获取私有CA密钥
发送证书签发请求包
关闭TSS上下文
生成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对象
生成AIK密钥和身份证书
 调用OpenSSL库来获取隐私CA的密钥
 将该OpenSSL的CA密钥转换成TSS密钥对象
 get_tss_key_size函数来获取RSA密钥的比特
长度
 Tspi_Context_CreateObject函数来创建一个
TSS密钥对象
 获取OpenSSL的CA密钥的公用模数
 Tspi_SetAttribData函数来初始化隐私CA密钥
对象
 设置公钥数据,密钥算法,密钥的素数个数和
密钥的加密机制
生成AIK密钥和身份证书
 Tspi_TPM_CollateIdentityReq
uest函数来创建一个新的AIK密
钥及证书签名请求包
含有AIK的公钥,还有可信平台的
签注证书、平台证书和验证证书
生成随机数作为会话密钥,对证书
请求数据采用3DES(本例中采用
该加密算法)进行加密
会话密钥则采用CA的公钥加密以
保证其机密性
发送证书签发请求
 根据之前产生的证书,可信平台向私有
CA发送证书签发请求,请求私有CA签
发AIK证书
私有CA签发AIK证书
开始
用3DES方法解密
取出会话密钥
等待接收请求包
取出证书请求
等待
3DES
判断加密类型
接收到请求包
将请求包转化为
TCPA_IDENTITY_REQ
数据结构
解密经过非对称加密
的数据块
未
知
类
型
DES
验证身份证书
AES
签发AIK证书
用AES方法解密
发送AIK证书
用DES方法解密
结束
私有CA签发AIK证书
 UnloadBlob_IDENTITY_REQ函数将收到的证书
签发请求包转换成TCPA_IDENTITY_REQ数据块
 用私有CA的私钥对证书请求进行解密
 UnloadBlob_SYMMETRIC_
KEY函数从解密后的证书请
求中取出会话密钥
 根据会话密钥的算法类型,
对证书请求进行解密
 UnloadBlob_IDENTITY_PR
OOF函数取出证书请求
私有CA签发AIK证书
 TPM产生身份验证证书的过程是将身份标签信息和私
有CA的公钥进行连接,然后采用SHA-1进行散列,再
用AIK的私钥进行签名。即Sign_AIK(SHA1(aikLabel
|| TCPA_PUBKEY(CAPubKey)))
开始
散列连接内容
创建散列对象
获取散列值存入
identityDigest
获取私有CA密钥信息
获取TPM版本信息
散列连接内容
验证身份证书签名
错
误
正确
签发AIK证书
连接身份标签信息,
CA密钥算法和私有CA
公钥
连接TPM版本信息,
TPM验证标签,
identityDigest和
AIK公钥
私有CA验证身份证书的流程
结束
私有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签发AIK证书
 Tspi_TPM_GetCapability函数来获取TPM的
版本号
 LoadBlob函数加载TPM版本信息
 LoadBlob_UINT32函数加载TPM验证标签
 LoadBlob函数加载散列值
 LoadBlob_PUBKEY函数加载AIK公钥
 Tspi_Hash_UpdateHashValue函数对变量
credBlob进行散列
 Tspi_Hash_VerifySignature函数来验证身份
证书签名
私有CA签发AIK证书
 验证身份证书签名通过后,创建经过私有CA签
名的证书
开始
获取EK的公钥
设置会话密钥参数
设置签发证书数据项
获取散列值存入
asymCAContents的
idDigest结构中
连接会话密钥信息和
asymCAContents的
idDigest结构
填充TCPA_SYM_CA_AT
TESTATION结构
获取EK的模数
填充X509证书
获取AIK公钥信息
加密连接内容
连接AIK密钥的算法
参数和公钥信息
连接证书大小,证书
加密信息和证书
设置签发证书数据项
加密连接内容
散列连接内容
结束
私有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签发AIK证书
 Tspi_Hash_GetHashValue函数存入散列值
 填充TCPA_SYM_CA_ATTESTATION结构
 LoadBlob_UINT32函数加载证书大小信息
 LoadBlob_KEY_PARMS函数加载证书加密
算法信息
 LoadBlob函数加载证书内容
 OpenSSL库函数设置AES加密密钥,然后
使用该密钥加密credBlob存储空间
私有CA签发AIK证书
 设置签发证书中对称密钥加密的数据块信息
 LoadBlob_SYMMETRIC_KEY函数加载密钥信
息
 LoadBlob函数加载散列值
 Tspi_GetAttribData函数来获取背书密钥的模
数
 Trspi_RSA_Encrypt函数来用背书密钥的公钥
加密credBlob
 设置签发证书中非对称密钥加密的数据块信息
接受并激活AIK证书
 私有CA将签名的AIK证书返回给可信平
台所有者
 可信平台所有者激活AIK证书
Tspi_Key_LoadKey函数来加载身份密钥
进入TPM
Tspi_TPM_ActivateIdentity函数来激活
AIK证书
保存AIK及其证书
 Tspi_Context_RegisterKey函数将AIK
密钥注册到永久存储区
 可以将AIK证书保存在本地磁盘
向挑战者发送验证平台状态数据
 Tspi_Context_CreateObject函数来创建一个
PCR类型对象
 Tspi_PcrComposite_SelectPcrIndex函数来
将PCR 15的值放入新创建的PCR
 Tspi_TPM_GetRandom函数产生一个随机数
 Tspi_TPM_Quote函数来生成平台状态信息
 将该状态信息和AIK证书发送给挑战者
挑战者验证平台状态请求
开始
创建散列对象
创建TSS上下文
等待接收验证数据
等待
连接TSS上下文
接收到验证数据
装载根密钥
对验证数据进行散列
获取SRK策略对象
设置SRK口令
否
验证散列值是否与验证
数据中的散列值一致
是
响应后续请求
挑战者处理验证数据流程图
挑战者验证平台状态请求
 创建TSS上下文并连接该TSS上下文,装载根密钥并设置
其口令
 Tspi_Context_CreateObject函数来创建类型为SHA-1的
散列对象
 Tspi_Hash_UpdateHashValue函数对组成员发送过来的
vData结构体中的rgbData进行散列
 Tspi_Hash_VerifySignature函数来验证对rgbData进行散
列的散列值是否与vData结构体中的rgbValidationData数
据相同
 挑战者发送验证结果数据给可信平台并做相应的操作
 等待其他的被挑战者来进行挑战
可信平台接收挑战者反馈数据
 在旅馆式办公中,被挑战者通过验证后
可以下载挑战者上的用户自己的系统镜
像
 释放相关空间并关闭TSS上下文

similar documents