44
TSS 示示示示

TSS 示例程序

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

Page 1: TSS 示例程序

TSS 示例程序

Page 2: TSS 示例程序

TPM模拟环境搭建TSS编程实例

有关 PCR的操作( READ、 EXTEND)HASH操作 文件加解密操作 远程证明

提纲

Page 3: TSS 示例程序

TPM 模拟环境的搭建

准备工作: 1. Linux 操作系统,内核版本在 2.6.30 以上 2. Tpm_emulator 软件 3. TSS 软件栈

以上软件安装完毕后,执行以下 3 个操作

Page 4: TSS 示例程序

TPM 模拟环境的搭建

( 1 )启动 Tpm_emulator :打开一个新的终端,在终端中输入命令:

#modprobe tpmd_dev #rm /var/run/tpm/tpmd_socket:0 #tpmd –fd

Page 5: TSS 示例程序

TPM_Emulator 启动成功

Page 6: TSS 示例程序

( 2 )启动 TSS 软件栈

打开一个新的终端,在终端中输入命令: #tcsd //TSS 启动 #tpmmanager则出现如图所示界面:

Page 7: TSS 示例程序

( 3 )设置 TPM 属主及 SRK 密码

Page 8: TSS 示例程序

TPM模拟环境搭建TSS编程实例

有关 PCR的操作( READ、 EXTEND)HASH操作 文件加解密操作 远程证明

提纲

Page 9: TSS 示例程序

( 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);

Page 10: TSS 示例程序

( 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 值

Page 11: TSS 示例程序

( 2 ) HASH 操作 示例程序 -3

程序功能: 对消息进行 SHA-1 操作

源码参见 : tpm_hash.c

程序流程见右图:

创建上下文并连接到本地

TCS

创建 HASH 对象

将消息数据进行 HASH

操作

读取 HASH对象的散列值

输出 HASH操作后的值

Page 12: TSS 示例程序

( 3 )文件加解密操作“ 存储的安全性”是指计算机中的重要文件

必须以密文的形式存放在磁盘上,以防止私密信息泄露和客体重用。

密钥的存储保护主要有两种方式基于加密文件系统的软件保护

系统的加 / 解密密钥都存放在系统指定的文件中,必须是系统管理员才有权限访问该文件,并进行密钥的相关操作

密钥本身容易遭受恶意病毒感染或者木马破坏甚至盗取密钥

基于 USB Key 或身份卡的硬件保护模式一旦该硬件被盗或者损坏,则密钥就不再安全

Page 13: TSS 示例程序

( 3 )文件加解密操作 示例程序 -4

程序功能: 对文件加密

源码参见 : tpm_sealdata.c

程序流程如下图:

Page 14: TSS 示例程序

创建上下文并连接到本地

TCS

创建加密数据对象创建 RSA 密钥对象创建对称密钥对象

读取待加密文件

将待加密文件用对称密钥加密生成密文,采用 AES-CBC 方式。将密文存放至加密数据对象中

将对称密钥用生成的 RSA公钥进行加密生成的密文

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

将该 RSA 公私钥对用 SRK公钥进行加密,并将密文

存放至加密数据对象中

加密数据对象生成密文文件,其中包括:文件密文、RSA 密文和对称密钥密文

输出密文文件

Page 15: TSS 示例程序

生成的密文结构

用 SRK 加密RSA 对象生成的密文

用 RSA 公钥加密的对称密钥密文

用对称密钥加密的密文

Page 16: TSS 示例程序

文件加解密操作 示例程序 -5

程序功能: 解密密文文件

源码参见: tpm_unsealdata.c

程序流程如图:

Page 17: TSS 示例程序

创建上下文并连接到本地

TCS

创建 RSA 密钥对象创建对称密钥对象

读取密文文件

用 SRK 私钥解密 RSA公私钥对,得到 RSA

公私钥对

用 RSA 私钥解密对称密钥得到对称密钥

采用 AES 解密算法,将密文用对称密钥解密,得到明文

输出解密后的明文

Page 18: TSS 示例程序

( 4 )远程证明

远程证明可信平台使用 AIK 对当前存储了平台配置

信息的 PCR 值进行签名,报告给远程挑战者以证明其平台状态的可信性

TPM 使用 EK 生成 AIK ,并通过私有 CA签发的 AIK 证书来完成身份认证

为什么不能用 EK 直接作为签名密钥?

Page 19: TSS 示例程序

( 4 )远程证明—应用场景

旅馆式办公用户不需要和特定的机器绑定,而是和服务

器上的身份进行绑定要求终端机器要是安全的,以防用户的信息

在终端机器上泄露可以通过 TPM 来发送当前机器的状态给服

务器,服务器根据用户当前终端的状态来判断是否允许用户从终端下载其系统镜像

Page 20: TSS 示例程序

(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 私钥签名;

Page 21: TSS 示例程序

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 证书

Page 22: TSS 示例程序

(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 验

证请求

Page 23: TSS 示例程序

( 4 )远程证明流程

可信平台所有者生成 AIK 密钥和证书签发请求可信平台所有者向隐私 CA 发送证书签发请求私有 CA 签发 AIK 证书私有 CA 将签名的 AIK 证书返回给可信平台所有者可信平台所有者激活 AIK 证书可信平台所有者保存 AIK 及其证书可信平台向挑战者发送验证平台状态数据挑战者验证平台状态请求可信平台接收挑战者反馈数据,并进行相应的操作

Page 24: TSS 示例程序

8.1 远程证明

远程证明可信平台使用 AIK 对当前存储了平台配置

信息的 PCR 值进行签名,报告给远程挑战者以证明其平台状态的可信性

TPM 使用 EK 生成 AIK ,并通过隐私 CA签发的 AIK 证书来完成身份认证

Page 25: TSS 示例程序

身份平台创建 AIK 证书处理流程开始

创建TSS上下文

连接TSS上下文

获取TPM对象

设置SRK口令

创建AI K对象 产生证书签发请求包

发送证书签发请求包

获取AI K证书

激活AI K证书

保存AI K证书

释放TSS上下文资源

关闭TSS上下文

获取SRK策略对象

获取私有CA密钥

获取私有CA密钥长度

创建TSS密钥对象

获取CA密钥的模数

设置TSS密钥的公钥

设置密钥的算法类型

设置密钥的素数个数

设置密钥的加密机制

结束

等待

发送验证平台状态请求

等待接收验证结果

验证通过

处理操作

加载根密钥

等待

Page 26: 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 对象

Page 27: TSS 示例程序

生成 AIK 密钥和身份证书

调用 OpenSSL库来获取隐私 CA 的密钥将该 OpenSSL 的 CA 密钥转换成 TSS 密钥对象

get_tss_key_size函数来获取 RSA 密钥的比特长度

Tspi_Context_CreateObject函数来创建一个 TSS

密钥对象

获取 OpenSSL 的 CA 密钥的公用模数Tspi_SetAttribData函数来初始化隐私 CA 密钥

对象 设置公钥数据,密钥算法,密钥的素数个数和密钥

的加密机制

Page 28: TSS 示例程序

生成 AIK 密钥和身份证书

Tspi_TPM_CollateIdentityRequest函数来创建一个新的 AIK 密钥及证书签名请求包含有 AIK 的公钥,还有可信平台的

签注证书、平台证书和验证证书生成随机数作为会话密钥,对证书

请求数据采用 3DES (本例中采用该加密算法)进行加密

会话密钥则采用 CA 的公钥加密以保证其机密性

Page 29: TSS 示例程序

发送证书签发请求

根据之前产生的证书,可信平台向私有CA 发送证书签发请求,请求私有 CA 签发 AIK 证书

Page 30: TSS 示例程序

私有 CA 签发 AIK 证书

开始

等待接收请求包

接收到请求包

将请求包转化为TCPA_IDENTITY_REQ

数据结构

解密经过非对称加密的数据块

取出会话密钥

用AES方法解密

判断加密类型

用3DES方法解密

用DES方法解密

取出证书请求

验证身份证书

签发AI K证书

发送AI K证书

结束

AESDES

3DES

未知类型

等待

Page 31: TSS 示例程序

私有 CA 签发 AIK 证书

UnloadBlob_IDENTITY_REQ函数将收到的证书签发请求包转换成 TCPA_IDENTITY_REQ 数据块

用私有 CA 的私钥对证书请求进行解密UnloadBlob_SYMMETRIC

_KEY函数从解密后的证书请求中取出会话密钥

根据会话密钥的算法类型,对证书请求进行解密

UnloadBlob_IDENTITY_P

ROOF函数取出证书请求

Page 32: TSS 示例程序

私有 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 验证身份证书的流程

Page 33: TSS 示例程序

私有 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函数获取散列后的散列值并存储

Page 34: TSS 示例程序

私有 CA 签发 AIK 证书

Tspi_TPM_GetCapability函数来获取 TPM 的版本号

LoadBlob函数加载 TPM 版本信息LoadBlob_UINT32函数加载 TPM验证标签LoadBlob函数加载散列值LoadBlob_PUBKEY函数加载 AIK 公钥Tspi_Hash_UpdateHashValue函数对变量

credBlob 进行散列Tspi_Hash_VerifySignature函数来验证身份证书

签名

Page 35: TSS 示例程序

私有 CA 签发 AIK 证书

验证身份证书签名通过后,创建经过私有 CA 签名的证书

开始

获取EK的公钥

设置会话密钥参数

获取AI K公钥信息

连接AI K密钥的算法参数和公钥信息

散列连接内容

获取散列值存入asymCAContents的i dDi gest结构中

填充TCPA_SYM_CA_ATTESTATI ON结构

填充X509证书

连接证书大小,证书加密信息和证书

加密连接内容

设置签发证书数据项

连接会话密钥信息和asymCAContents的i dDi gest结构

获取EK的模数

加密连接内容

设置签发证书数据项

结束

Page 36: TSS 示例程序

私有 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方式进行散列

Page 37: TSS 示例程序

私有 CA 签发 AIK 证书

Tspi_Hash_GetHashValue函数存入散列值填充 TCPA_SYM_CA_ATTESTATION结构LoadBlob_UINT32函数加载证书大小信息LoadBlob_KEY_PARMS函数加载证书加密

算法信息LoadBlob函数加载证书内容OpenSSL库函数设置 AES 加密密钥,然后

使用该密钥加密 credBlob 存储空间

Page 38: TSS 示例程序

私有 CA 签发 AIK 证书

设置签发证书中对称密钥加密的数据块信息LoadBlob_SYMMETRIC_KEY函数加载密钥

信息LoadBlob函数加载散列值Tspi_GetAttribData函数来获取背书密钥的模

数Trspi_RSA_Encrypt函数来用背书密钥的公

钥加密 credBlob

设置签发证书中非对称密钥加密的数据块信息

Page 39: TSS 示例程序

接受并激活 AIK 证书

私有 CA 将签名的 AIK 证书返回给可信平台所有者

可信平台所有者激活 AIK 证书Tspi_Key_LoadKey函数来加载身份密钥

进入 TPMTspi_TPM_ActivateIdentity函数来激活

AIK 证书

Page 40: TSS 示例程序

保存 AIK 及其证书

Tspi_Context_RegisterKey函数将AIK 密钥注册到永久存储区

可以将 AIK 证书保存在本地磁盘

Page 41: TSS 示例程序

向挑战者发送验证平台状态数据

Tspi_Context_CreateObject函数来创建一个 PCR类型对象

Tspi_PcrComposite_SelectPcrIndex函数来将 PCR 15 的值放入新创建的 PCR

Tspi_TPM_GetRandom函数产生一个随机数Tspi_TPM_Quote函数来生成平台状态信息将该状态信息和 AIK 证书发送给挑战者

Page 42: TSS 示例程序

挑战者验证平台状态请求开始

创建TSS上下文

连接TSS上下文

装载根密钥

获取SRK策略对象

设置SRK口令

创建散列对象

对验证数据进行散列

响应后续请求

验证散列值是否与验证数据中的散列值一致

等待接收验证数据

接收到验证数据

等待

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

Page 43: TSS 示例程序

挑战者验证平台状态请求

创建 TSS 上下文并连接该 TSS 上下文,装载根密钥并设置其口令

Tspi_Context_CreateObject函数来创建类型为SHA-1 的散列对象

Tspi_Hash_UpdateHashValue函数对组成员发送过来的 vData

结构体中的 rgbData 进行散列Tspi_Hash_VerifySignature函数来验证对 rgbData 进行散列

的散列值是否与vData结构体中的 rgbValidationData 数据相同挑战者发送验证结果数据给可信平台并做相应的操作等待其他的被挑战者来进行挑战

Page 44: TSS 示例程序

可信平台接收挑战者反馈数据

在旅馆式办公中,被挑战者通过验证后可以下载挑战者上的用户自己的系统镜像

释放相关空间并关闭 TSS 上下文