Ubuntu 安装 TPM-2.0 TSS 软件栈

本文更新于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.
    组合起来使用是很强大的


    Ubuntu 安装 TPM-2.0 TSS 软件栈_第1张图片
    组合使用tpm2-tools中的四条命令测试RSA公钥加密
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 评估板

这个国内无能力生产, 欧洲限制对华出口. 必须求助海外代购绕道才能夹带回国内.


Ubuntu 安装 TPM-2.0 TSS 软件栈_第2张图片
海外代购 TPM2.0 评估板

树莓派 3 Model B 开发板

很便宜, 树莓派裸板只需要¥300元不到. 国内到处可以买


树莓派
Ubuntu 安装 TPM-2.0 TSS 软件栈_第3张图片
树莓派通过SPI接口连接TPM2.0模块
Ubuntu 安装 TPM-2.0 TSS 软件栈_第4张图片
树莓派成功加载 Peter Huewe 编写的英飞凌 TPM2.0 驱动模块
Ubuntu 安装 TPM-2.0 TSS 软件栈_第5张图片
Infineon SLB9670 on Secure96 Mezzanine Board
放大图

Secure96 是一款支持 TPM2.0 规范的安全扩展板,可作为服务器、物联设备、工控等领域的硬件加密卡,有效保障系统和数据传输的安全性,能够满足不同行业开发者的个性化需求。http://www.hihope.org/product/Secure96


下一篇:

  • 《树莓派Linux内核编译选项如何开启TPM 2.0》http://www.jianshu.com/p/174844b99716

你可能感兴趣的:(Ubuntu 安装 TPM-2.0 TSS 软件栈)