TPM踩坑实录
因为要做byzantine容错,需要用到TPM进行签名以及recover。所以来搞一下TPM
下载TSS:https://github.com/tpm2-software/tpm2-tss
按照要求装好,如果用常规的.configure
脚本生成,因为里面有docxygen
文件,会导致后面make install
的时候失败
0.需要安装的软件
TSS:https://github.com/tpm2-software/tpm2-tss
Tpm-tools: https://github.com/tpm2-software/tpm2-tools
1. 安装
TSS
安装TSS的时候,生成makefile的时候忽略doxygen-doc
./configure --disable-doxygen-doc
TPM2-tool
- 安装Tpm-tools的时候,因为没有管理员权限,所以很有可能你的包安装不在/usr目录下,这个时候要设置环境变量,不然tools找不到相关的config文件,参考:https://github.com/tpm2-software/tpm2-tools/issues/1302
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
- 在make的时候,会有warning,编译的时候自动设置的是有
warning
就当成error
对待,此时编译就会失败。要设置环境变量 cflag
export CFLAGS="-Wno-error"
2.环境变量
TSS默认是安装在/usr/local下, 也就是说会在相应的/etc
下生成fapi的配置文件,但是如果你没有按照约定安装,一定要重新设置环境变量,其中包括:
- 静态链接库
- include
- 动态链接库
- 配置文件
以下是配置文件的路径添加,这是在TSS里翻源码才知道的。变量名TSS_FAPICONF
-export TSS2_FAPICONF="/afs/cs.pitt.edu/projects/babay/local/etc/tpm2-tss/fapi-config.json"
可以将其添加进~/.bashrc里
3.TPM的初始化:
TPM首先应该在bios里初始化,这块是机房管理员做的,不同的Bios有不同的初始化方式,我不是很了解这块。
硬件初始化完成之后,在使用TPM前,要执行 tpm2_provision
,可以理解为软件初始化。
但是在provision的时候,需要进行ek certificate的校对。这里有两个问题:
1.有些TPM是没有ek certificate的
2.库的问题(还未调查清楚) //TODO
如果嫌麻烦,并且认为TPM是靠谱的,那么可以直接在fapi的配置文件中配置跳过check EK certificate这一步骤:
更改默认配置文件,位于你安装TSS的 /etc/tpm2-tss/fapi-profiles
{
"profile_name": "P_ECCP256SHA256",
"profile_dir": "/afs/cs.pitt.edu/projects/babay/local/etc/tpm2-tss/fapi-profiles/",
"user_dir": "~/.local/share/tpm2-tss/user/keystore",
"system_dir": "/afs/cs.pitt.edu/projects/babay/local/var/lib/tpm2-tss/system/keystore",
"tcti": "",
"system_pcrs" : [],
"log_dir" : "/afs/cs.pitt.edu/projects/babay/local/var/run/tpm2-tss/eventlog/",
"ek_cert_less": "yes"
}
5. debug
若要debug, 在编译的时候就要加入断点symble进程序
tool
./configure --prefix=/opt/tpm_dev --disable-hardening CFLAGS="$CFLAGS -std=gnu99" --enable-debug=yes
tss lib
./configure --prefix=/opt/tpm_dev --disable-doxygen-doc —enable-debug=yes
4.杂
安装完成之后,写个小测试代码会发现出问题,如果编译的时候出先找不到 /dev/tpm*
和无法和TCTI
通信这样的提示,说明没有配置好TPM芯片。可以用qemu以及swTPM进行模拟,但是后面硬件TPM教授配置好了,我就没继续搞, 模拟这东西有一堆麻烦事。
reference:
tpm-tools: https://tpm2-tools.readthedocs.io/en/latest/INSTALL/#building-tpm2-tools