本文更新于2018-08-11
手动编译 TPM2.0-TSS
sudo apt-get install -y git-core
git clone --branch=1.x --depth=1 https://github.com/tpm2-software/tpm2-tss.git
pushd tpm2-tss
wget http://ftpmirror.gnu.org/autoconf-archive/autoconf-archive-2017.09.28.tar.xz
tar xJf autoconf-archive-2017.09.28.tar.xz
cp autoconf-archive-2017.09.28/m4/ax_code_coverage.m4 m4/
nproc=4
./bootstrap && ./configure && make -j$(nproc)
make install DESTDIR=$HOME/my-tpm2-tss-installation-dir
popd
Ubuntu 17.04 PC机 或 Ubuntu Snap 嵌入式开发板下如何借助 snapcraft 编译安装 TPM2.0-TSS
sudo apt-get install -y git-core snapcraft
git clone --depth=1 https://git.launchpad.net/~snappy-hwe-team/snappy-hwe-snaps/+git/tpm2
cd tpm2
snapcraft
snap try
ls ~/tpm2/prime/sbin
如何编译 TPM Simulator (532版本)
# 以ibmtpm532版本为例(本方法仅x86能编译通过)
wget https://downloads.sourceforge.net/project/ibmswtpm2/ibmtpm532.tar
sha256sum ibmtpm532.tar | grep -q ^abc0b420257917ccb42a9750588565d5e84a2b4e99a6f9f46c3dad1f9912864f
mkdir ibmtpm532
tar axf ibmtpm532.tar -C ibmtpm532
make "CC=gcc -Wno-tautological-compare" -C ibmtpm532/src
后台运行编译好的 TPM Simulator
ibmtpm532/src/tpm_server &
树莓派自带openssl.h版本不允许src/CpriHash.c创建EVP_MD_CTX实例
# ibmtpm974存在另一个bug, 当本机为32位树莓派开发板时无法编译报错openssl宏定义为64位
wget https://downloads.sourceforge.net/project/ibmswtpm2/ibmtpm974.tar.gz
sha256sum ibmtpm974.tar.gz | grep -q ^8e45d86129a0adb95fee4cee51f4b1e5b2d81ed3e55af875df53f98f39eb7ad7
mkdir ibmtpm974
tar axf ibmtpm974.tar.gz -C ibmtpm974
make -C ibmtpm974/src
Ubuntu 17.04 x86_64 环境下编译 TPM2-TSS 1.x 分支共生成以下文件
- TSS 动态连接库libsapi(必须安装), 主要包括3个so文件: libsapi.so libtcti-device.so libtcti-socket.so
合计约160KB
usr/lib/
└──x86_64-linux-gnu
├── [ 16B] libsapi.so.0 -> libsapi.so.0.0.0
├── [119KB] libsapi.so.0.0.0
├── [ 23B] libtcti-device.so.0 -> libtcti-device.so.0.0.0
├── [ 15KB] libtcti-device.so.0.0.0
├── [ 23B] libtcti-socket.so.0 -> libtcti-socket.so.0.0.0
└── [ 19KB] libtcti-socket.so.0.0.0
- TSS 开发包libsapi-dev(包括头文件和静态库, 只需开发者安装在交叉编译环境下)
usr/include/
├──sapi
│ ├── [ 54KB] implementation.h
│ ├── [ 60KB] sys_api_part3.h
│ ├── [1.9KB] tpm20.h
│ ├── [3.9KB] tpmb.h
│ ├── [ 12KB] tss2_common.h
│ ├── [4.5KB] tss2_sys.h
│ ├── [6.6KB] tss2_tcti.h
│ └── [136KB] tss2_tpm2_types.h
├──tcti
│ ├── [1.8KB] common.h
│ ├── [1.9KB] tcti_device.h
│ ├── [2.9KB] tcti_socket.h
│ └── [1.5KB] tcti-tabrmd.h
└──tss2
└── [2.8KB] tabrmd.h
-
开发者辅助工具包(用于调试 TPM 模块, 可选择是否安装到目标机): tpm2-tools
其中每个独立的工具均可在命令行下执行, 每个可执行文件大小约为 30KB, 合计约 1MB.
组合起来使用是很强大的
usr/sbin
├── [ 34K] tpm2_activatecredential
├── [ 30K] tpm2_akparse
├── [ 34K] tpm2_certify
├── [ 35K] tpm2_create
├── [ 34K] tpm2_createprimary
├── [ 30K] tpm2_encryptdecrypt
├── [ 30K] tpm2_evictcontrol
├── [ 43K] tpm2_getmanufec
├── [ 39K] tpm2_getpubak
├── [ 34K] tpm2_getpubek
├── [ 30K] tpm2_getrandom
├── [ 30K] tpm2_hash
├── [ 30K] tpm2_hmac
├── [ 34K] tpm2_listpcrs
├── [ 30K] tpm2_listpersistent
├── [ 30K] tpm2_load
├── [ 30K] tpm2_loadexternal
├── [ 30K] tpm2_makecredential
├── [ 34K] tpm2_nvdefine
├── [ 30K] tpm2_nvlist
├── [ 30K] tpm2_nvread
├── [ 30K] tpm2_nvreadlock
├── [ 30K] tpm2_nvrelease
├── [ 30K] tpm2_nvwrite
├── [ 34K] tpm2_quote
├── [ 29K] tpm2_rc_decode
├── [ 30K] tpm2_readpublic
├── [ 30K] tpm2_rsadecrypt
├── [ 30K] tpm2_rsaencrypt
├── [ 34K] tpm2_sign
├── [ 34K] tpm2_takeownership
├── [ 30K] tpm2_unseal
└── [ 35K] tpm2_verifysignature
软件仿真器IBM Software TPM2.0 Simulator
英特尔 TPM2.0-TSS 源码包提供了几个脚本, 快速下载并编译 IBM 开源的仿真器 tpm_server
make simulator
make simulator-start
TPM2.0 的资源管理器守护进程
resourcemgr 是老版本的资源管理器, 虽然接口简陋但作为开发工具还是够用了. 英特尔官方已经不再维护这个工具的源代码.
tabrmd 是新版本的资源管理器, 但想要正确的从源码编译她并不容易, Ubuntu和Debian目前(2017年)都还没有deb格式的安装包可用. 我只能从源码编译她. 暂时不将她作为我们的首选工具.
TPM 资源管理器守护进程 tpm2-abrmd (运行在目标开发板上, 可选安装), 包括可执行文件、内部动态库、配置文件以及man手册:
合计约占用 1.3MB 硬盘空间
usr
├──sbin
│ └── [620KB] tpm2-abrmd
├──lib
│ ├── [ 23B] libtcti-tabrmd.so -> libtcti-tabrmd.so.0.0.0
│ ├── [ 23B] libtcti-tabrmd.so.0 -> libtcti-tabrmd.so.0.0.0
│ ├── [680KB] libtcti-tabrmd.so.0.0.0
│ ├──systemd/system
│ │ └── [ 347B] tpm2-abrmd.service
│ └──udev/rules.d
│ └── [ 111B] tpm-udev.rules
├──etc/dbus-1/system.d
│ └──[ 546B] tpm2-abrmd.conf
└──share
└──man
├──man3
│ └── [3.7KB] tss2_tcti_tabrmd_init.3
├──man7
│ └── [ 932B] tcti-tabrmd.7
└──man8
└── [2.9KB] tpm2-abrmd.8
另外, 有下列基础软件包(动态库so文件)需要安装到目标机, 资源管理器tabrmd在目标机运行时依赖他们的存在:
gobject-2.0(libgobject-2.0.so或libgobject-2.0.a)
glib-2.0(libglib-2.0.so或libglib-2.0.a)
gio-unix-2.0(libgio-2.0.so或libgio-2.0.a)
上述静态库以及头文件位于 libglib2.0-dev 开发包
最后, 下列开发包需要开发者安装到Ubuntu交叉编译环境
/usr/bin/gdbus-codegen
位于 libdbus-1-dev 开发包
sudo apt-get install libglib2.0-dev
sudo apt-get install libdbus-1-dev
或fedora下
yum install glib2-devel glib2-static
yum install dbus-devel
英飞凌 TPM2.0 评估板
这个国内无能力生产, 欧洲限制对华出口. 必须求助海外代购绕道才能夹带回国内.
树莓派 3 Model B 开发板
很便宜, 树莓派裸板只需要¥300元不到. 国内到处可以买
Secure96 是一款支持 TPM2.0 规范的安全扩展板,可作为服务器、物联设备、工控等领域的硬件加密卡,有效保障系统和数据传输的安全性,能够满足不同行业开发者的个性化需求。http://www.hihope.org/product/Secure96
下一篇:
- 《树莓派Linux内核编译选项如何开启TPM 2.0》http://www.jianshu.com/p/174844b99716