20175318 可信计算基础 实验二 硬件接口交互操作

一、实验目的与要求:

  • 熟悉TPM数据包封装格式和命令功能;
  • 掌握Linux操作系统下代码调试与测试方法;
  • 掌握TPM接口调用流程。

二、实验内容、步骤及结论

1. 实验内容
(1)分析实验例程和TPM命令数据封装格式;
(2)将TPM命令按照格式进行封包并编译、运行,接收执行状态或结果;
(3)分析TPM命令包的交互流程与实现原理。

2. 实验步骤
第一步:编译,运行测试代码
(1) 在一个终端窗口中启动Tpm_emulator,即运行以下两行指令:

sudo modprobe tpmd_dev
sudo tpmd -f -d //启动TPM模拟器

(2) 编译,运行测试程序

sudo su
cd tpm_emulator-0.7.5/tddl
cmake ../
cd tddl
make
./test_tddl

运行结果如下所示:

第二步:定义函数,编写代码,参考TGG发布标准“TPM Main Part 3 Commands”,将TPM_ORD_GetRandom、TPM_ORD_SHA1Start、TPM_ORD_SHA1Complete等TPM命令按照格式分别进行封装。
(1)分析实验一老师提供的测试代码tpmrandomsha1.c,其中定义了random_cmd[]、tpm_sha1start[]、tpm_sha1complete[]这三个数组,分别对应于我们想要封装的TPM_ORD_GetRandom、TPM_ORD_SHA1Start和TPM_ORD_SHA1Complete这三个命令;
(2)修改test_tddl.c文件,增加

unsigned char random[]={0, 193, 0, 0, 0, 14, 0, 0, 0, 70,0,0,0,8};
unsigned char tpm_sha1start[]={0,193,0,0,0,10,0,0,0,160};
unsigned char tpm_sha1complete[]=
{0,193,0,0,0,78,0,0,0,162,0,0,0,64,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64};

这三个数组,把注释为test_tddl.c 文件中/* reset tpm */后面的代码复制三次,分别将其中的reset数组标识改为randomtpm_sha1starttpm_sha1complete

这里放上修改好的 test_tddl.c
(3)执行以下命令:

sudo su
cmake ../
cd tddl
make
./test_tddl

(4)运行成功,截图如下:

3. 实验结论
TDDL 是 TSS 用于和 TPM 通信的组件,提供了内核模式到用户模式的转换。我们可以通过tddli接口调用TPM命令的相关函数,调用过程中不涉及任何硬件相关的信息,但是tddl不能构建TPM命令数据流,需要我们自行构建。
tddli接口为我们提供了7个功能函数,例如用于打开TPM设备的Tddli_Open( )函数、用于关闭TPM设备的Tddli_Close( )函数、用于发送TPM命令到TPM设备驱动程序的Tddli_TransmitData( )函数等。

猜你喜欢

转载自www.cnblogs.com/L1079991001/p/12591064.html