可信计算(阅读trusted-computing-projectv0.3工程文件)

一、实验目的:

理解TPM中的远程证明,密钥迁移,密钥结构,数据密封等功能的原理。
学会利用TSS提供的各种接口,编写自己的应用程序。
在这里插入图片描述

二、文件源码理解

1、Key Hierarchy

在这里插入图片描述
create_register_key.c

  功能:创建一个密钥层次结构,并注册到系统永久存储区
  SRK(存储根密钥)
  流程:
  	1. load SRK
	2. create load and register UserK1(Storage key, unmigratable).
	3. create load and register UserK2(Signing key, unmigratable).
	4. create load and register UserK3(Storage key, migratable).
	5. create load and register UserK4(bind key, migratable).
	6. Unload the four Keys

load_key.c

  功能:从系统永久存储区Load密钥到TPM中。
  流程:
  	1. load SRK 并验证其使用权限。
	2. load SRK 的子密钥K1,并验证其使用权限。
	3. load K1的子密钥K2,并验证其使用权限。
	4. 重新验证SRK的使用权限(每次使用之前都需验证)5. load SRK 的子密钥K3,并验证其使用权限。
	6. load K3的子密钥K4,并验证其使用权限。

如图所示:
在这里插入图片描述

2、SealUnseal

Seal、Unseal和extend

1、进入SealUnseal目录
2、运行./seal -v 1.2 (成功)
3、运行./unseal -v 1.2 (成功)
4、运行./extend -v 1.2 (成功)
5、运行./unseal -v 1.2 (失败)
6、运行./seal_file test.c test.en(查看文件test.en的内容)
# unseal_file.c 由同学们自己完成。
7、运行./unseal_file test.en test.de(查看文件test.de的内容)
8、运行./extend -v 1.2
9、运行./unseal_file test.en test.de(失败)

在这里插入图片描述
seal.c

数据密封,数据密封就是对数据进行加密,这种加密是与平台的状态绑定在一起的。
操作过程:
(1)调用Tspi_Context_CreateObject分别创建一个加密数据句柄hEncData和pcr句柄hPcrs。
(2)调用Tspi_TPM_GetCapability获取TPM版本信息,当capArea=TSS_TPMCAP_PROPERTY而rgbSubCap=TSS_TPMCAP_PROP_PCR时,prgbRespData,即此函数最后一个参数,返回的就是TPM支持的最大PCR寄存器个数。
(3)调用Tspi_TPM_PcrRead读出TPM中各个pcr值并写到上面得到的hPcrs句柄中。
(4)调用Tspi_Data_Seal加密数据,用的密钥是SRK,加密后的数据在hEncData指向的位置。
(5)调用Tspi_GetAttribData导出DtaBlob,并将其写入文件“SealedData"。
(6)释放内存并关闭上下文

unseal.c:数据解封操作过程

(1)调用connect_load_all加载上下文,SRK,TPM;
(2)调用Tspi_Context_CreateObject创建加密数据句柄hEncData
(3)调用set_secret设置口令
(4)读取文件中的DataBlob到缓冲区dataBuf
(5)调用Tspi_SetAttribData导出hEncData
(6)调用Tspi_Data_Unseal解封
(7)释放内存关闭上下文

seal_file.c

(1)创建并连接上下文
(2)Tspi_Context_GetTpmObject获取TPM句柄hTPM
(2)Tspi_Context_LoadKeyByUUID加载SRK
(4)Tspi_Context_CreateObject创建PCR句柄hPcrs和加密数据句柄hEncData
(5)set_secret设置口令
(6)Tspi_Context_LoadKeyByUUID加载K1
(7)set_popup_secret验证K1的pin
(8)Tspi_TPM_GetRandom获取随机数random
(9)Tspi_TPM_PcrRead读取pcr值
(10)Tspi_PcrComposite_SetPcrValue设置Pcr值
(11)Tspi_Data_Seal用随机数random和K1加密hEncData
(12)Tspi_GetAttribData导出DataBlob
(13)读明文到缓冲区
(14)用random初始化AES,获得CTX对象,用它加密明文
(15)将DataBlob属性内容,密文长度,密文依次写入密文文件
(16)释放内存关闭上下文

unseal_file.c

前7步和seal_file操作一样
(8)Tspi_TPM_PcrRead读取pcr值
(9)读密文到缓冲区
(10)依次取出DataBlob属性长度,DataBlob属性内容,密文长度,密文内容。
(11)Tspi_SetAttribData导出DataBlob
(12)Tspi_Data_Unseal从DataBlob解密出初始化AES用的random
(13)用random初始化AES,EVP_DecryptInit_ex获得解密用的CTX对象
(14)解密并把明文写进文件
(15)释放内存并关闭上下文
第一轮中,seal和unseal之间没有对PCR的extend操作,加解密都成功,进行了extend后,PCR值被修改,解密失败。
第二轮中,使用的是AES加密文件,然后用K1加密AES的密钥,过程与第一轮基本一样,都是extend操作后解密失败。

3、密钥迁移KeyMigration

1、进入Key Migration目录
2、在机器1中运行./platform_dst -g ,会产生名为srk.pub的文件
3、把文件srk.pub拷贝到机器2中
4、在机器2中运行./platform_src ,会产生名为mig.blob的文件(k1)
5、把文件srk.pub拷贝到机器1中
6、在机器1中运行./platform_dst -m

在这里插入图片描述

Platform1(platform_dst.c):生成的srk.pub文件里只写入了SRK的公钥长度和公钥的内容。
Platform2(platform_src.c):生成迁移的票据和DataBlob,票据使用Tspi_TPM_AuthorizeMigrationticket根据srk的公钥生成,抗重放的随机字符串和DataBlob则用Tspi_Key_CreateMigrationBlob以票据和要迁移的私钥为参数生成。
Platform1(platform_dst.c):Tspi_Key_ConvertMigrationBlob把MigBlob转换成KeyBlob,再由Tspi-Key_LoadKey加载迁移密钥的私钥。回到机器一中运行./platform_dst -m,TPM会自动利用srk的私钥对其进行一个解密。这样就把一个密钥从机器2迁移到了机器1中。

4、RemoteAttestation(远程证明 )

在这里插入图片描述

机器1:
1、进入Remote Attestation\init目录
2、运行./Create_AIK,得到一个AIK作为EK的代表来证明我们自己的身份
3、返回上级目录
4、运行./RAServer,等待对方连接。
机器2:
1、进入Remote Attestation目录
2、运行 (./RAClient 机器2的ip 机器1的ip )(如 ./RAClient 192.168.217.133 192.168.217.132)连接到机器1上。
在这之前需要通过挑战应答协议完成一系列的认证工作,认证通过之后两台机器就进行了连接。
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值