Upload
kelly-mccarty
View
115
Download
0
Embed Size (px)
DESCRIPTION
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 - PowerPoint PPT Presentation
Citation preview
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 程序流程见右图:
创建上下文并连接到本地
TCS
获取 TPM 对象
读取 TPM 对象的 PCR 值
输出 PCR 值
(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);
( 1 )有关 PCR 操作( EXTEND )
示例程序 -2( 扩展 ) 程序功能 :
对 PCR 寄存器进行扩展操作
源码参见: pcr_extend.c
程序流程见右图:
创建上下文并连接到本地
TCS
获取 TPM 对象
扩展 TPM 对象的 PCR 值
输出扩展的 PCR 值
(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 ) HASH 操作 示例程序 -3
程序功能: 对消息进行 SHA-1 操作
源码参见 : tpm_hash.c
程序流程见右图:
创建上下文并连接到本地
TCS
创建 HASH 对象
将消息数据进行 HASH
操作
读取 HASH对象的散列值
输出 HASH操作后的值
( 3 )文件加解密操作“ 存储的安全性”是指计算机中的重要文件
必须以密文的形式存放在磁盘上,以防止私密信息泄露和客体重用。
密钥的存储保护主要有两种方式基于加密文件系统的软件保护
系统的加 / 解密密钥都存放在系统指定的文件中,必须是系统管理员才有权限访问该文件,并进行密钥的相关操作
密钥本身容易遭受恶意病毒感染或者木马破坏甚至盗取密钥
基于 USB Key 或身份卡的硬件保护模式一旦该硬件被盗或者损坏,则密钥就不再安全
( 3 )文件加解密操作 示例程序 -4
程序功能: 对文件加密
源码参见 : tpm_sealdata.c
程序流程如下图:
创建上下文并连接到本地
TCS
创建加密数据对象创建 RSA 密钥对象创建对称密钥对象
读取待加密文件
将待加密文件用对称密钥加密生成密文,采用 AES-CBC 方式。将密文存放至加密数据对象中
将对称密钥用生成的 RSA公钥进行加密生成的密文
存放至加密数据对象中 ( 绑定 )
将该 RSA 公私钥对用 SRK公钥进行加密,并将密文
存放至加密数据对象中
加密数据对象生成密文文件,其中包括:文件密文、RSA 密文和对称密钥密文
输出密文文件
生成的密文结构
用 SRK 加密RSA 对象生成的密文
用 RSA 公钥加密的对称密钥密文
用对称密钥加密的密文
文件加解密操作 示例程序 -5
程序功能: 解密密文文件
源码参见: tpm_unsealdata.c
程序流程如图:
创建上下文并连接到本地
TCS
创建 RSA 密钥对象创建对称密钥对象
读取密文文件
用 SRK 私钥解密 RSA公私钥对,得到 RSA
公私钥对
用 RSA 私钥解密对称密钥得到对称密钥
采用 AES 解密算法,将密文用对称密钥解密,得到明文
输出解密后的明文
( 4 )远程证明
远程证明可信平台使用 AIK 对当前存储了平台配置
信息的 PCR 值进行签名,报告给远程挑战者以证明其平台状态的可信性
TPM 使用 EK 生成 AIK ,并通过私有 CA签发的 AIK 证书来完成身份认证
为什么不能用 EK 直接作为签名密钥?
( 4 )远程证明—应用场景
旅馆式办公用户不需要和特定的机器绑定,而是和服务
器上的身份进行绑定要求终端机器要是安全的,以防用户的信息
在终端机器上泄露可以通过 TPM 来发送当前机器的状态给服
务器,服务器根据用户当前终端的状态来判断是否允许用户从终端下载其系统镜像
(1) 申请 AIK 证书
TSS
TPM
OWNER PCA
1.Tspi_TPM_CollateIdentityRequest( idaik,paraik,pkpca)
解析 TPM 命令
2.TPM_CollateIdentityRequest( paraik,hash(pkpca,idaik))
1. 验证 paraik 合法性2. 根据 paraik 生产 AIK 密钥对3. 生产签名值 Saik = signaik(hash(pkpca,idaik))
3.AIK,Saik
1. 收集 cred: 背书证书、平台证书、一致性证书 2.resp=(pkaik,idaik ,Saik,cred)
4.encpkpca(K),encK
(resp)
5.encpkpca(K),encK
(resp)
1.Idaik aik 密钥的标签;2.Paraik aik 密钥参数;3.Pkpca pca 的公钥;4.K 会话密钥;5.cred 背书、平台、一致性证书;6.Signaik 用 aik 私钥签名;
TSS
TPM
OWNER PCA
7.Tspi_TPM_ActiveIdentity( AIK,resppca,encK(certaik))
解析 TPM 命令
8. TPM_ActiveIdentity( AIK,resppca)
1. 用 EK 私钥解密 resppca
2. 验证 hash(pkaik)3. 若 2 成立返回 K
9.K
用 K 解密encK(certaik)
10.cert
aik
6.resppca,encK
(certaik)
1.pca 私钥解密验证 cred 和 Saik
2. 签发 AIK 证书3. 生成对称密钥 K4.resppca=encpkEK(K,hash(pkaik))
1.K 会话密钥;2.PkEK EK 的公钥;3.PKaik aik 公钥;4.cred 背包、平台、一致性证书;5.certaik aik 证书;6.Saik = signaik
(hash(pkpca , idaik))
( 2) 申请AIK 证书
(3) 验证 pcr 签名
TSS
TPM
OWNER Server
12.Tspi_TPM_Quote ( AIK,pcrindex,random)
解析 TPM 命令
13. TPM_Quote( AIK,pcrindex,random)
Saik = signaik(pcrindex,random)
14.random,Saik
15.certaik,random,Saik
16.pcrindex,random,certaik,Saik
1. 向 PCA 请求验证 certaik 合法性2. 若 1 成立 , 验证签名值 Saik 正确性3. 根据 pcr 值判断终端的状态,来确定是否提供服务
11.random , index
1.random Server 挑战的随机值; 2.index Server 需要pcr 的索引 ;3.pcrindex index 对应的 pcr 值 ;4. AIK aik 密钥对象 ;5.certaik aik 证书;6.Signaik 用 aik 私钥签名;
PCA
17.certaik 验
证请求
验
证
结
果
( 4 )远程证明流程
可信平台所有者生成 AIK 密钥和证书签发请求可信平台所有者向隐私 CA 发送证书签发请求私有 CA 签发 AIK 证书私有 CA 将签名的 AIK 证书返回给可信平台所有者可信平台所有者激活 AIK 证书可信平台所有者保存 AIK 及其证书可信平台向挑战者发送验证平台状态数据挑战者验证平台状态请求可信平台接收挑战者反馈数据,并进行相应的操作
8.1 远程证明
远程证明可信平台使用 AIK 对当前存储了平台配置
信息的 PCR 值进行签名,报告给远程挑战者以证明其平台状态的可信性
TPM 使用 EK 生成 AIK ,并通过隐私 CA签发的 AIK 证书来完成身份认证
身份平台创建 AIK 证书处理流程开始
创建TSS上下文
连接TSS上下文
获取TPM对象
设置SRK口令
创建AI K对象 产生证书签发请求包
发送证书签发请求包
获取AI K证书
激活AI K证书
保存AI K证书
释放TSS上下文资源
关闭TSS上下文
获取SRK策略对象
获取私有CA密钥
获取私有CA密钥长度
创建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_CollateIdentityRequest函数来创建一个新的 AIK 密钥及证书签名请求包含有 AIK 的公钥,还有可信平台的
签注证书、平台证书和验证证书生成随机数作为会话密钥,对证书
请求数据采用 3DES (本例中采用该加密算法)进行加密
会话密钥则采用 CA 的公钥加密以保证其机密性
发送证书签发请求
根据之前产生的证书,可信平台向私有CA 发送证书签发请求,请求私有 CA 签发 AIK 证书
私有 CA 签发 AIK 证书
开始
等待接收请求包
接收到请求包
将请求包转化为TCPA_IDENTITY_REQ
数据结构
解密经过非对称加密的数据块
取出会话密钥
用AES方法解密
判断加密类型
用3DES方法解密
用DES方法解密
取出证书请求
验证身份证书
签发AI K证书
发送AI K证书
结束
AESDES
3DES
未知类型
等待
私有 CA 签发 AIK 证书
UnloadBlob_IDENTITY_REQ函数将收到的证书签发请求包转换成 TCPA_IDENTITY_REQ 数据块
用私有 CA 的私钥对证书请求进行解密UnloadBlob_SYMMETRIC
_KEY函数从解密后的证书请求中取出会话密钥
根据会话密钥的算法类型,对证书请求进行解密
UnloadBlob_IDENTITY_P
ROOF函数取出证书请求
私有 CA 签发 AIK 证书
TPM产生身份验证证书的过程是将身份标签信息和私有 CA 的公钥进行连接,然后采用 SHA-1 进行散列,再用 AIK 的私钥进行签名。即Sign_AIK(SHA1(aikLabel
|| TCPA_PUBKEY(CAPubKey)))开始
创建散列对象
获取私有CA密钥信息
连接身份标签信息,CA密钥算法和私有CA
公钥
散列连接内容
获取散列值存入i denti tyDi gest
获取TPM版本信息
连接TPM版本信息,TPM验证标签,
i denti tyDi gest和AI K公钥
散列连接内容
签发AI K证书
验证身份证书签名
结束
正确
错误
私有 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的公钥
设置会话密钥参数
获取AI K公钥信息
连接AI K密钥的算法参数和公钥信息
散列连接内容
获取散列值存入asymCAContents的i dDi gest结构中
填充TCPA_SYM_CA_ATTESTATI ON结构
填充X509证书
连接证书大小,证书加密信息和证书
加密连接内容
设置签发证书数据项
连接会话密钥信息和asymCAContents的i dDi gest结构
获取EK的模数
加密连接内容
设置签发证书数据项
结束
私有 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函数来加载身份密钥
进入 TPMTspi_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 上下文