TPM Emulator 安装与使用教程
项目概述
TPM Emulator 是一个软件实现的 Trusted Platform Module (TPM) 和 Mobile Trusted Module (MTM) 模拟器,支持 TPM 1.2 标准。该项目由 Mario Strasser 开发,采用 C 语言编写,使用 CMake 构建系统管理。
项目目录结构
TPM Emulator 项目包含以下主要目录:
-
crypto/ - 加密算法实现
bn_openssl.c- OpenSSL 大数运算支持hmac.c- HMAC 算法实现rsa.c- RSA 加密算法sha1.c- SHA1 哈希算法rc4.c- RC4 流密码算法
-
tpm/ - TPM 核心功能模块
tpm_crypto.c- TPM 加密操作tpm_management.c- TPM 管理功能tpm_nv_storage.c- 非易失性存储tpm_commands.h- TPM 命令定义tpm_structures.h- TPM 数据结构
-
mtm/ - 移动可信模块支持
mtm_cmd_handler.c- MTM 命令处理mtm_structures.h- MTM 数据结构
-
tddl/ - TSS 设备驱动库
tddl.c- TDDL 实现test_tddl.c- 测试程序
-
tpmd/ - TPM 守护进程
unix/tpmd.c- Unix 平台守护进程windows/tpmd.c- Windows 平台服务
-
tpmd_dev/ - 内核模块支持
linux/tpmd_dev.c- Linux 内核模块darwin/tpm_bridge.c- macOS 内核扩展
系统要求
在安装 TPM Emulator 之前,请确保系统满足以下要求:
- CMake 2.6 或更高版本
- GNU MP 库 4.0 或更高版本
- GCC 编译器 和 Make 工具
- 对于 Windows:需要 MinGW 编译器套件
安装步骤
1. 获取源代码
git clone https://gitcode.com/gh_mirrors/tp/tpm-emulator
cd tpm-emulator
2. 创建构建目录
mkdir build
cd build
3. 配置构建选项
# 基本配置
cmake ../
# 如果需要 MTM 支持
cmake ../ -DMTM_EMULATOR=ON
4. 编译项目
make
5. 安装到系统
sudo make install
6. Windows 额外步骤
在 Windows 上还需要注册服务:
control_tpmd.bat install
启动和使用
Linux 系统启动
# 加载内核模块
sudo modprobe tpmd_dev
# 启动 TPM 守护进程
sudo tpmd
macOS 系统启动
# 加载内核扩展
sudo kextload /System/Library/Extensions/tpm_bridge.kext
# 启动 TPM 守护进程
sudo tpmd
Windows 系统启动
# 设置环境变量
set PATH=%PROGRAMFILES%\TPM_Emulator;%PATH%
set PATH=%PROGRAMFILES%\TPM_Emulator\lib;%PATH%
# 启动服务
control_tpmd.bat start
# 检查状态
control_tpmd.bat status
启动参数说明
TPM Emulator 支持以下启动参数:
tpmd [-d] [-f] [-s storage_file] [-u socket_name]
[-o user] [-g group] [-h] [startup_mode]
-d:启用调试模式-f:前台运行-s:指定存储文件路径-u:指定 Unix socket 名称-o:指定运行用户-g:指定运行组-h:显示帮助信息startup_mode:启动模式(clear、save、deactivated)
使用示例
测试 TPM 功能
# 启动调试模式的 TPM 守护进程
sudo tpmd -d
# 运行测试程序
cd tddl
./test_tddl
与 TPM/J 集成
# 设置类路径
export CLASSPATH=tpmj.jar:bcprov-jdk15-131.jar:$CLASSPATH
# 运行 TPM 信息工具
java edu.mit.csail.tpmj.tools.TPMInfo
故障排除
首次启动问题
首次启动时必须使用 clear 模式:
# 如果启动失败,先停用
tpmd deactivated
# 然后使用 clear 模式重新启动
tpmd clear
存储文件问题
如果遇到存储文件相关问题,可以删除旧的存储文件:
sudo rm /var/lib/tpm/tpm_emulator-1_2_0_7
开发接口
直接访问 TPM
对于需要直接访问 TPM 的应用程序:
#include <sys/socket.h>
#include <sys/un.h>
struct sockaddr_un addr;
int fh = socket(PF_UNIX, SOCK_STREAM, 0);
addr.sun_family = AF_UNIX;
strncpy(addr.sun_path, "/var/run/tpm/tpmd_socket:0", sizeof(addr.sun_path)-1);
connect(fh, (struct sockaddr*)&addr, sizeof(struct sockaddr_un));
使用 TDDL 库
推荐使用提供的 TDDL 库进行开发,具体接口参考 TCG TSS 规范。
注意事项
- 不同版本间的存储文件格式可能不兼容
- 首次启动必须使用
clear模式 - Windows 版本需要特定的 DLL 命名(ifxtpm.dll)
- 确保有足够的权限访问
/dev/tpm设备
技术支持
如有问题或建议,请联系:
- Peter Huewe peterhuewe@gmx.de
- Mario Strasser mast@gmx.net
请在邮件主题中包含 "TPM emulator" 关键词。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



