没有tpm芯片,采用模拟器的方式来测试。

实验环境:内核版本 3.10.0-327

软件包准备:

内网,没有仓库,自己网上下载:

1. cmake-3.9.6-Linux-x86_64.tar.gz

解压后就已经有bin文件,可以直接使用bin下的cmake,

ls cmake-3.9.6-Linux-x86_64/
bin doc man share

2. 然后下载gmp,我使用的是gmp-6.1.2版本,

./configure && make && make install

在install的时候,它会提醒要求make check

+-------------------------------------------------------------+
| CAUTION: |
| |
| If you have not already run "make check", then we strongly |
| recommend you do so. |
| |
| GMP has been carefully tested by its authors, but compilers |
| are all too often released with serious bugs. GMP tends to |
| explore interesting corners in compilers and has hit bugs |
| on quite a few occasions. |
| |
+-------------------------------------------------------------+

我也按要求操作一把,没看到什么区别,但是同事在复制我的过程的时候,还是有些区别,建议大家按照安装步骤来。

3.安装tpm_emulator

因为并没有真实的芯片,所以还需要安装模拟器,如果有真实的芯片支持,则可以跳过安装模拟器这一步。

下载并解压之后,老规矩,先看readme,readme中针对不同的操作系统给了不同的步骤。

The compilation and installation of the TPM emulator package is based on
the CMake build environment (version 2.6 or better) and requires that the
GNU MP library (version 4.0 or better) is properly installed on your
system. A working MinGW compiler suite is further required on Windows
(see http://www.mingw.org/). To compile and install the package execute: # tar -xvzf tpm_emulator-X.Y.tar.gz
# cd tpm_emulator-X.Y
# mkdir build
# cd build
# cmake ../ ----------这一步,由于我们第一步没有安装cmake,可以用绝对路径因为bin文件即可。本例中,我使用的是/home/caq/cmake-3.9.6-Linux-x86_64/bin/cmake  -D CMAKE_BUILD_TYPE=Debug ../
# make
# make install

按步骤操作即可。

Usage Examples for TPM/J
-------------------------------------------------------------------------- === Linux
# modprobe tpmd_dev
# tpmd -f -d

4.下一步,下载trousers-master.zip并安装trousers,这个就是传说中的tss协议栈 (tcg software stack) 。

解压后,参照readme文件,一步步操作:

不过,由于我们是使用模拟器操作,所以原本makefile中的lib需要替换成我们模拟器安装的lib。

先查找一下lib的路径:

# whereis libtddl.so
libtddl: /usr/local/lib/libtddl.a /usr/local/lib/libtddl.so

然后,修改对应的makefile

修改./src/tcsd/Makefile.am :
tcsd_LDADD=../tcs/libtcs.a ../tddl/libtddl.a –lpthread  
为:
tcsd_LDADD=../tcs/libtcs.a /usr/local/lib/libtddl.so –lpthread
 
修改 ./src/tcsd/Makefile.in :
tcsd_DEPENDENCIES = ../tcs/libtcs.a ../tddl/libtddl.a
为:
tcsd_DEPENDENCIES = ../tcs/libtcs.a /usr/local/lib/libtddl.so
 
然后参照如下操作即可。
  To build trousers after you have the device driver installed:

  $ sh bootstrap.sh
$ ./configure [--enable-debug] [--enable-gprof] [--enable-gcov]
$ make
# make install

这个步骤的README非常重要,包括64位的安装的不同也会提示。也包括安装完之后的运行方法和参数,不过-h参数也提供了方法。

另外,由于这个步骤默认的configure是将编译warning设置成了error,所以make的时候,经常会停止,建议在make之前,

将configure脚本中的CFLAGS 参数修改一下,去掉-Werror -Wno-unused-parameter 。不然会好多编译不过的。

然后运行 tcsd -e -f  可以看到如下进程运行,我为了了解运行机制,gdb了一把,这个就需要在configure的时候对debug使能。

# ps -ef |grep -i tcsd
root 156492 183333 0 16:20 pts/4 00:00:00 grep --color=auto -i tcsd
tss 184541 107431 0 Nov15 pts/11 00:00:00 tcsd -e -f

使能了debug的运行结果,如果没有使能debug,不方便调试:

tpm_testing.c:: Debug: tpm_rsa_encrypt(RSA_ES_OAEP_SHA1)
tpm_testing.c:: Debug: tpm_rsa_decrypt(RSA_ES_OAEP_SHA1)
tpm_testing.c:: Debug: verify plain text
tpm_testing.c:: Info: Self-Test succeeded
tpm_startup.c:: Info: TPM_Startup()
tpmd.c:: Debug: waiting for connections...

5.下载安装tpm-tools

 BUILDING tpm-tools
-------- ---------
$ sh ./bootstrap.sh
$ ./configure
$ make
# make install By default the build will place everything in /usr/local. Issue
./configure --help
to see how to install to a different location.

安装完之后,敲入tpm然后tab健,就可以看到新增了很多命令了:

tpm_changeownerauth  tpm_nvinfo           tpm_restrictpubek    tpm_setactive        tpm_setpresence      tpmtool
tpm_clear tpm_nvread tpm_restrictsrk tpm_setclearable tpm_takeownership
tpm_createek tpm_nvrelease tpm_revokeek tpm_setenable tpm_unsealdata
tpm_getpubek tpm_nvwrite tpm_sealdata tpm_setoperatorauth tpm_version
tpm_nvdefine tpm_resetdalock tpm_selftest tpm_setownable tpmd

下面是最终的测试了:

# tpm_takeownership
Enter owner password:
Confirm password:
Enter SRK password:
Confirm password:

设置两个密码,要记住,后面要用到。

# ./tpm_version
LOG_DEBUG TSPI rpc/tcstp/rpc.c: Sending TSP packet to host localhost.
LOG_DEBUG TSPI rpc/tcstp/rpc.c: Connecting to 127.0.0.1
LOG_DEBUG TSPI rpc/tcstp/rpc_context.c: RPC_OpenContext_TP: Received TCS Context: 0xa0d40600
LOG_DEBUG TSPI rpc/tcstp/rpc_caps_tpm.c: RPC_GetTPMCapability_TP: TCS Context: 0xa0d40600
TPM 1.2 Version Info:
Chip Version: 1.2.0.7
Spec Level:
Errata Revision:
TPM Vendor ID: ETHZ
LOG_DEBUG TSPI rpc/tcstp/rpc_caps_tpm.c: RPC_GetTPMCapability_TP: TCS Context: 0xa0d40600
TPM Version:
LOG_DEBUG TSPI rpc/tcstp/rpc_caps_tpm.c: RPC_GetTPMCapability_TP: TCS Context: 0xa0d40600
Manufacturer Info: 4554485a
LOG_DEBUG TSPI rpc/tcstp/rpc_context.c: RPC_CloseContext_TP: TCS Context: 0xa0d40600
LOG_RETERR TSPI tspi_context.c:: 0x126

加密某个文件:

tpm_sealdata  -i  /home/caq/Path_test/caq.txt -p  -p  -p  -p  -p   -o  /home/caq/Path_test/sealed_key

会要求输入srk的密码,就是刚才设置的第二个密码。

加密后的文件内容:

-----BEGIN TSS-----
-----TSS KEY-----
AQEAAAARAAAABAEAAAABAAMAAQAAAAwAAAgAAAAAAgAAAAAAAAAAAAABANxiK5q8
Nfx/spy+mnJgRpRAaEgBhvT3bTDdV9gNSdy6hryJGNKkIsQCSdam1Yo28DPHiB9i
iout25PXLi9VaNLmlT7UPVMTReujGhSMWk5pkejpNd0He+CoTyov6CveHnk7YqXa
Hp1ipsg98+IVLrhshPkbW4yq6/PEK07Za56Cj0gVDQ1S+3zkZY8wegPilXG79GQ8
j/yHaPar62jExVfGuoOtPsUINFAcgvWO14Syq30ZM0Dr4aTGcj4XjKqrRtuuiE7y
qkQM37DM1x7/EYgg9/ITIpR3fVTP7hEuo+qPyfUy8rEINAoTCBiBN/53r84xdA+y
t+Ic1tt+qSJi/t8AAAEAq+dKuhTIuoo75gKIkRfiEbpeUn3yK3sHJTkZKwJudMyp
1f1oYegR48lhatQhgRPC5nfKBG/7N/VoKb9KQMA/XuFM4iKVdfqckSnnq8s97Exh
7cK9DHPWDLCChk/Fa6xPR4AIcq6Qj4DTiESQeb66ZGGl/DSKzMLQwYFeg011UmI9
5r4sb3vdkCVIj2suuLQpbmc80O9rLsHmo7z68SNB8HgHFSR/LQeywoPa4Gq5xFsH
/qDRSS5rayvd1+/W3n7bhlj1Byym6/T9Yjzgsycm1TlqWlY7uX9wiXP63y29IAzQ
sTnK1eTWfU2KrmpZznmwoa9oxjGuzvMPdplyMV4O2Q==
-----ENC KEY-----
Symmetric Key: AES--CBC
AQEAAAAAACwAAhBTkyUEalmn0CnsJOCtGAt3AocthliTJQRqWafQKewk4K0YC3cC
hy2GWAAAAQBvqgwWrpyJ0pTdR4aNEvq+YfQ+58GyISxMLh/DziwijcwZ5VZf03Ps
+vLq876xOSuo3SDbKJfHas7JHasxq5WnX8j50VqTubvHXQ6H2y3Frtp3suG6LQgT
kI4DNTrkHXMbp8AJU5Euk4DGf7dXKeKbu/XBsKqoY0FP61WgrSMU6wCGI3nQ0esW
ARdVBoZkWl4Gf7KHb+Jhkfyh8T+1vn63IZ31BvaJBjlQDTGqJofDvaBkR6ceKrAD
h9G1EA0NUc9Grwv59L0onyZ7R6D7P2lgCheLsvyt2gFr0bxyMm78D1Fuywx5iZtx
7e7iToJSld4tq7LJep8Rf/f7Bo9DvJnL
-----ENC DAT-----
UxkNGTc11B7eIdPUx65IsA==
-----END TSS-----

解密这个文件:

tpm_unsealdata  -i  /home/caq/Path_test/sealed_key -o hah

也要求输入密码,密码输入错误是拒绝解密的。

tpm_sealdata  -i  /home/caq/Path_test/sealed_key -o hah
LOG_DEBUG TSPI rpc/tcstp/rpc.c: Sending TSP packet to host localhost.
LOG_DEBUG TSPI rpc/tcstp/rpc.c: Connecting to 127.0.0.1
LOG_DEBUG TSPI rpc/tcstp/rpc_context.c: RPC_OpenContext_TP: Received TCS Context: 0xa0b0fe15
LOG_DEBUG TSPI rpc/tcstp/rpc_random.c: RPC_GetRandom_TP: TCS Context: 0xa0b0fe15
LOG_DEBUG TSPI rpc/tcstp/rpc_ps.c: RPC_LoadKeyByUUID_TP: TCS Context: 0xa0b0fe15
LOG_DEBUG TSPI rpc/tcstp/rpc_ps.c: RPC_LoadKeyByUUID_TP: TCS key handle: 0x40000000
LOG_DEBUG TSPI rpc/tcstp/rpc_ps.c: RPC_GetRegisteredKeyBlob_TP: TCS Context: 0xa0b0fe15
Enter SRK password:
LOG_DEBUG TSPI rpc/tcstp/rpc_auth.c: RPC_OSAP_TP: TCS Context: 0xa0b0fe15
LOG_DEBUG TSPI rpc/tcstp/rpc_key.c: RPC_CreateWrapKey_TP: TCS Context: 0xa0b0fe15
LOG_DEBUG TSPI rpc/tcstp/rpc_auth.c: RPC_OIAP_TP: TCS Context: 0xa0b0fe15
LOG_DEBUG TSPI obj_policy.c: Got a secret:
F7 7C AD 7D D2 2E
D6 4D
LOG_DEBUG TSPI rpc/tcstp/rpc_key.c: RPC_LoadKeyByBlob_TP: IN: TCS Context: 0xa0b0fe15
LOG_DEBUG TSPI rpc/tcstp/rpc_key.c: RPC_LoadKeyByBlob_TP: OUT: TCS key handle: 0x2233000d, TPM key slot: 0xb
LOG_DEBUG TSPI rpc/tcstp/rpc_auth.c: RPC_OSAP_TP: TCS Context: 0xa0b0fe15
LOG_DEBUG TSPI rpc/tcstp/rpc_seal.c: common_Seal_TP: TCS Context: 0xa0b0fe15
LOG_DEBUG TSPI rpc/tcstp/rpc_context.c: RPC_CloseContext_TP: TCS Context: 0xa0b0fe15
LOG_RETERR TSPI tspi_context.c:: 0x126

其他的一些使用方法,可以tpm_unsealdata  -h来找到方法。解密之后,diff对比下加密前的文件,可以看到两者是一样的。

模拟器和芯片的区别,就是秘钥的存放位置。

linux tpm 测试完整记录,亲测有效。的更多相关文章

  1. spring mybatis 3.2调用mysql存储过程返回多结果集(完整、亲测、可用)

    最近,有个开发提了个需求,希望中间件支持调用mysql存储过程时支持多结果集返回,因为某些原因我们使用了不少的存储过程,很多复杂的逻辑目前来看交互非常的多,所以从当前的现状来说,这个需求还是蛮合理的. ...

  2. 2017iOS开发最新的打包测试步骤(亲测)

    最近也是忙着修改项目,今天把最近遇到的问题和知识给大家分享一下. 有时候我们需要将我们的项目发给测试组进行bug测试,这时候我们就需要把自己的项目打包,生成一个二维码或者链接的形式,给测试组,接下来就 ...

  3. linux下gmplayer安装(亲测OK!)

    需要的安装包及下载地址:  mplayer源代码包(MPlayer-1.0rc4.tar.bz2)下载:http://www.mplayerhq.hu/MPlayer/releases/ 解码器安装包 ...

  4. linux解压缩文件名乱码问题 亲测可用

    unar 这个工具会自动检测文件的编码,也可以通过-e来指定:unar file.zip 即可解压出中文文件.

  5. Linux安装Qt详细步骤 亲测总结

    下载 qt-everywhere-opensource-src-4.8.4.tar.gz================准备工作====================yum install kern ...

  6. linux篇-linux修改网卡名(亲测有效)

    1查看网卡ip addr 2cd /etc/sysconfig/network-scripts Ls查看 3mv ifcfg-eno16777736 ifcfg-eth0重命名,然后编辑 最后一行加入 ...

  7. wchar_t是内置还是别名(亲测有效:wchar_t在windows下是16位整数的别名,在linux等平台下是32位整数的别名。MSVC2008开始默认是/Zc:wchar_t)

    接前一篇C++ ABI之名字改编(以Qt为例),继续看看C++名字改编相关的问题. 问题 MSVC 有一对选项/Zc:wchar_t- 与 /Zc:wchar_t控制wchar_t 于是 wchar_ ...

  8. linux 手动源码安装lnmp(亲测)

    linux 手动源码安装lnmp笔记(亲测)<pre>先安装这2个yum install gccyum install g++</pre><pre>先在linux ...

  9. 【Linux】kali 安装 python3 和 pip3(亲测有效)

    [Linux]kali 安装 python3 和 pip3 引言:   在使用kali的时候,经常会用到各种工具以及脚本,而大多数脚本都是以python编写的,但是烦就烦在python有2个版本,有些 ...

随机推荐

  1. vexx 邀请码 送3个比特龙

    错过了比特币的行情,注册获取3个原始比特币分叉币,比特龙. 目前10元一个,送3个币.类似于股票IPO,第一天一般会冲高十几倍,建议第一天就卖. 如果看好就继续持有吧. 放心是送的不用钱的. 注册网址 ...

  2. appium-chromedriver@3.0.1 npm ERR! code ELIFECYCLE npm ERR! errno 1

    解决方法: npm install appium-chromedriver@3.0.1 --ignore-scripts 或者(安装方法): npm install appium-chromedriv ...

  3. mimtproxy和arpspoof实现局域网MITM

    本地环境 环境:kali系统 目标机器:192.168.0.101 局域网网关:192.168.0.1 当前网络网卡端口:wlan0 arp欺骗流程 命令行开启本地数据转发: echo > /p ...

  4. 如何使用 Q#

    Q# 是微软的量子语言,很厉害,所以本文告诉大家如何入门,如何配置. 介绍 很多新的计数机技术都在很多年前就有人提出,量子计算就是其中一个.量子计算在 1980 年就被 Richard Feynman ...

  5. linux下使用 FreeRDP 连接 Windows 远程桌面(转)

    这是一种最简单的使用方法,转载自http://wenzhixin.net.cn/2014/03/16/ubuntu_xfreerdp 简介 FreeRDP 是一款开源的远程桌面系统,支持多种平台, 在 ...

  6. 转- 在ubuntu下安装Nginx

    一. 安装包安装 1.1 安装Nginx $sudo apt-get install nginx Ubuntu安装之后的文件结构大致为: 所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经 ...

  7. Maven02——回顾、整合ssh框架、分模块开发、私服

    1 回顾 1.1 Maven的好处 节省空间 对jar包做了统一管理 依赖管理 一键构建 可跨平台 应用在大型项目可提高开发效率 1.2 Maven安装部署配置 1.3 Maven的仓库 本地仓库 远 ...

  8. Java_web学习(一) jdk配置

    1.下载好jdk1.8.0版本或以上版本 2.配置JAVA_HOME,CLASSPATH,PATH 其中JAVA_HOME必须的 2.1   JAVA_HOME=E:\java\jdk1.8.0_77 ...

  9. Android开发艺术探究Note

    第一章:Activity的生命周期和启动模式 生命周期 onPause表示activity正在停止,onPaus必须先执行完(栈顶的activity),新的activity的onResume才会执行. ...

  10. js和jquery通过this获取html标签中的属性值

    <html> <head> <script type="text/javascript" src="jquery-1.10.2.min.js ...