tpm_emulator 搭建 TPM 仿真环境

本文详细介绍了在 CentOS 7 虚拟机上搭建 TPM 仿真环境的步骤,包括安装 cmake、m4、GMP、TPM_Emulator、TSS 协议栈(Trousers)和 tpm-tools。在安装过程中,遇到了内核模块缺失、依赖项问题等挑战,均通过下载相应版本的软件和内核源码,以及执行相关命令解决。最后,使用 tpm-tools 工具验证了 TPM 环境的搭建成功。
摘要由CSDN通过智能技术生成

1. 平台环境

1.1. 系统平台

宿主机系统:Windows 10 Pro
虚拟机工具:VMware® Workstation 15 Pro
虚拟机系统:CentOS Linux release 7.6.1810 (Core) 64位
本文在 centos 虚拟机上搭建 TPM 仿真环境。

1.2. TPM 仿真环境结构

下面是TPM仿真环境软件包依赖关系图,搭建环境应该是由下至上按部就班的安装。
在这里插入图片描述

2. cmake

2.1. cmake 简介

CMake 是一个跨平台的自动化建构系统,它使用一个名为 CMakeLists.txt 的文件来描述构建过程,可以产生标准的构建文件,如 Unix 的 Makefile 或Windows Visual C++ 的 projects/workspaces 。文件 CMakeLists.txt 需要手工编写,也可以通过编写脚本进行半自动的生成。CMake 提供了比 autoconfig 更简洁的语法。在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下:
(1)编写 CmakeLists.txt。
(2)执行命令“cmake PATH”或者“ccmake PATH”生成 Makefile ( PATH 是 CMakeLists.txt 所在的目录 )。
(3)使用 make 命令进行编译。

2.2. 安装 cmake
[root@linuxprobe:~]# yum -y install cmake

3. m4

3.1. m4 简介

m4 是一种宏处理器,它扫描用户输入的文本并将其输出,期间如果遇到宏就将其展开后输出。宏有两种,一种是内建的,另一种是用户自定义的,它们能接受任意数量的参数。除了做展开宏的工作之外,m4 内建的宏能够加载文件,执行 Shell 命令,做整数运算,操纵文本,形成递归等等。m4 可用作编译器的前端,或者单纯作为宏处理器来用。

3.2. 安装 m4
[root@linuxprobe:~]# yum -y install m4

4. GNU MP Library

4.1. GMP 简介

gmp是一个可以进行任意精度算术的自由库,可以操作有符号整数、有理数和浮点数。除了运行gmp的机器中可用内存所暗示的精度外,没有实际限制。gmp有一套丰富的功能,这些功能有一个常规的接口(本文不研究这个接口)。
gmp的主要目标应用是密码学应用与研究、互联网安全应用、代数系统、计算代数研究等。
gmp基于m4,所以在安装gmp之前要先安装m4。

4.2. 安装 GMP

下载地址:http://gmplib.org

我下载的版本:gmp-6.1.2.tar.bz2

执行下列命令进行编译和安装:

[root@linuxprobe:~]# tar -jxvf gmp-6.1.2.tar.bz2
[root@linuxprobe:~]# cd gmp-6.1.2
[root@linuxprobe:~/gmp-6.1.2]# ./configure
[root@linuxprobe:~/gmp-6.1.2]# make
[root@linuxprobe:~/gmp-6.1.2]# make check
[root@linuxprobe:~/gmp-6.1.2]# make install

Tips:
还有 gmp-6.1.2.tar.lz 版本的压缩包,它是使用 lzip 工具生成的,需要使用 lunzip 工具进行解压。
lzip下载地址:http://www.nongnu.org/lzip/lzip.html
lunzip下载地址:http://www.nongnu.org/lzip/lunzip.html

5. TPM_Emulator

下载地址:https://github.com/PeterHuewe/tpm-emulator/releases

我下载的版本:tpm-emulator-0.7.5.tar.gz

该程序主要包含三个部分:
(1)tpmd:实现 TPM 仿真器的用户空间应用程序,可以通过 Unix 域套接字(Unix)或命名管道(Windows)进行访问。
(2)tpmd_dev:一个内核模块,它提供设备 /dev/tpm 以实现向后兼容,并将收到的命令转发给 tpmd(仅限Unix和Mac OS X)。

向后兼容(Backward Compatibility),又称作向下兼容(Downward Compatibility)。在计算机中指在一个程序或者类库更新到较新的版本后,用旧的版本程序创建的文档或系统仍能被正常操作或使用,或在旧版本的类库的基础上开发的程序仍能正常编译运行的情况。

(3)tddl:TPM 仿真器的 TSS 符合设备驱动程序库。
在这里插入图片描述

5.1. 编译和安装 TPM_Emulator

TPM 仿真器包的编译和安装基于 CMake 构建环境(2.6或更高版本),并要求在您的系统上正确安装 GNU MP 库(版本4.0或更高版本)。因为前面已经安装过了,所以这里直接执行下列命令进行编译和安装:

[root@linuxprobe:~]# tar –zxvf tpm-emulator-0.7.5.tar.gz
[root@linuxprobe:~]# cd tpm-emulator-0.7.5
[root@linuxprobe:~/tpm-emulator-0.7.5]# mkdir build
[root@linuxprobe:~/tpm-emulator-0.7.5]# cd build
[root@linuxprobe:~/tpm-emulator-0.7.5/build]# cmake ../
[root@linuxprobe:~/tpm-emulator-0.7.5/build]# make
[root@linuxprobe:~/tpm-emulator-0.7.5/build]# make install

我在执行 make 时遇到的错误:

[root@linuxprobe:~/tpm-emulator-0.7.5/build]# make
...省略部分输出...
[ 97%] Generating linux/tpmd_dev.ko
make: *** /lib/modules/3.10.0-957.10.1.el7.x86_64/build: 没有那个文件或目录。 停止。
make[3]: *** [all] 错误 2
make[2]: *** [tpmd_dev/linux/tpmd_dev.ko] 错误 2
make[1]: *** [tpmd_dev/CMakeFiles/tpmd_dev.dir/all] 错误 2
make: *** [all] 错误 2

原因:

提示 /lib/modules/3.10.0-957.10.1.el7.x86_64/build 软链接没有指向正确的 kernel source,后来知道因为那个文件根本就不存在,我们需要下载它。

解决方法:
(1)看一下 build 软链接指向哪个文件:

[root@linuxprobe:~]# cd /lib/modules/3.10.0-957.10.1.el7.x86_64/
[root@linuxprobe:/lib/modules/3.10.0-957.10.1.el7.x86_64]# ll
total 3244
lrwxrwxrwx.  1 root root     43 Mar  21 15:03 build -> /usr/src/kernels/3.10.0-957.10.1.el7.x86_64

在 centos 7.x 下 build -> /usr/src/kernels/3.10.0-957.10.1.el7.x86_64 不停地闪烁,说明 /usr/src/kernels/3.10.0-957.10.1.el7.x86_64 不存在。

(2)进入 /usr/src/kernels/ 目录,看一下有没有相应的内核开发包 3.10.0-957.10.1.el7.x86_64:

[root@linuxprobe:~]# cd /usr/src/kernels/
[root@linuxprobe:/usr/src/kernels]# ll
total 0

没有则下载。

(3)下载 3.10.0-957.10.1.el7.x86_64 内核开发包:

[root@linuxprobe:/usr/src/kernels]# yum -y install kernel-devel-$(uname -r)
[root@linuxprobe:/usr/src/kernels]# ll
total 4
drwxr-xr-x. 22 root root 4096 Apr 16 17:43 3.10.0-957.10.1.el7.x86_64

再次执行 make 就没问题了。


5.2. 初始化 TPM_Emulator

TPM的启动模式(参见TPM规范第1部分)由启动模式参数定义,可以设置为clear,save(默认)或deactivated,对应的中文意思分别是清除,保存和停用。 下面简单介绍tpmd的用法以及参数的含义:

usage: tpmd [-d] [-f] [-s storage file] [-u unix socket name]
            [-o user name] [-g group name] [-h] [startup mode]
参数的含义:
d:启用调试模式
f:强制应用程序在前台运行
s:要使用的存储文件(默认值:/var/lib/tpm/tpm_emulator-1_2_0_7)
u:要使用的unix套接字名称(默认值:/var/run/tpm/tpmd_socket:0)
o:应用程序运行的有效用户
g:应用程序应运行的有效组
h:打印此帮助信息
startup mode:必须是“clear”,“save”(默认)或“deactivated”

如果模拟器以“save”模式启动并且无法加载先前存储的TPM状态,则它将进入“fail-stop”模式并且必须重新加载。 因此,第一次启动TPM仿真器时,参数必须设置为“clear”。 想要恢复处于“fail-stop”模式的TPM仿真器,首先将其停用,然后

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值