当前位置: 首页 > 编程日记 > 正文

linux tpm 测试完整记录,亲测有效。

没有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:221: Debug: tpm_rsa_encrypt(RSA_ES_OAEP_SHA1)
tpm_testing.c:225: Debug: tpm_rsa_decrypt(RSA_ES_OAEP_SHA1)
tpm_testing.c:229: Debug: verify plain text
tpm_testing.c:261: Info: Self-Test succeeded
tpm_startup.c:43: Info: TPM_Startup(2)
tpmd.c:412: Debug: waiting for connections...

5.下载安装tpm-tools

 BUILDING tpm-tools-------- ---------$ sh ./bootstrap.sh$ ./configure$ make# make installBy default the build will place everything in /usr/local. Issue./configure --helpto 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:362 Sending TSP packet to host localhost.
LOG_DEBUG TSPI rpc/tcstp/rpc.c:377 Connecting to 127.0.0.1
LOG_DEBUG TSPI rpc/tcstp/rpc_context.c:44 RPC_OpenContext_TP: Received TCS Context: 0xa0d40600
LOG_DEBUG TSPI rpc/tcstp/rpc_caps_tpm.c:40 RPC_GetTPMCapability_TP: TCS Context: 0xa0d40600TPM 1.2 Version Info:Chip Version:        1.2.0.7Spec Level:          2Errata Revision:     1TPM Vendor ID:       ETHZ
LOG_DEBUG TSPI rpc/tcstp/rpc_caps_tpm.c:40 RPC_GetTPMCapability_TP: TCS Context: 0xa0d40600TPM Version:         01010000
LOG_DEBUG TSPI rpc/tcstp/rpc_caps_tpm.c:40 RPC_GetTPMCapability_TP: TCS Context: 0xa0d40600Manufacturer Info:   4554485a
LOG_DEBUG TSPI rpc/tcstp/rpc_context.c:60 RPC_CloseContext_TP: TCS Context: 0xa0d40600
LOG_RETERR TSPI tspi_context.c:113: 0x126

加密某个文件:

tpm_sealdata  -i  /home/caq/Path_test/caq.txt -p 4 -p 8 -p 9 -p 12 -p 14  -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-256-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:362 Sending TSP packet to host localhost.
LOG_DEBUG TSPI rpc/tcstp/rpc.c:377 Connecting to 127.0.0.1
LOG_DEBUG TSPI rpc/tcstp/rpc_context.c:44 RPC_OpenContext_TP: Received TCS Context: 0xa0b0fe15
LOG_DEBUG TSPI rpc/tcstp/rpc_random.c:37 RPC_GetRandom_TP: TCS Context: 0xa0b0fe15
LOG_DEBUG TSPI rpc/tcstp/rpc_ps.c:318 RPC_LoadKeyByUUID_TP: TCS Context: 0xa0b0fe15
LOG_DEBUG TSPI rpc/tcstp/rpc_ps.c:339 RPC_LoadKeyByUUID_TP: TCS key handle: 0x40000000
LOG_DEBUG TSPI rpc/tcstp/rpc_ps.c:274 RPC_GetRegisteredKeyBlob_TP: TCS Context: 0xa0b0fe15
Enter SRK password: 
LOG_DEBUG TSPI rpc/tcstp/rpc_auth.c:70 RPC_OSAP_TP: TCS Context: 0xa0b0fe15
LOG_DEBUG TSPI rpc/tcstp/rpc_key.c:119 RPC_CreateWrapKey_TP: TCS Context: 0xa0b0fe15
LOG_DEBUG TSPI rpc/tcstp/rpc_auth.c:37 RPC_OIAP_TP: TCS Context: 0xa0b0fe15
LOG_DEBUG TSPI obj_policy.c:230 Got a secret:
36 F7 7C 80 32 12 AD 05 7D 36 63 03 76 D2 85 2E 
24 72 D6 4D 
LOG_DEBUG TSPI rpc/tcstp/rpc_key.c:42 RPC_LoadKeyByBlob_TP: IN: TCS Context: 0xa0b0fe15
LOG_DEBUG TSPI rpc/tcstp/rpc_key.c:75 RPC_LoadKeyByBlob_TP: OUT: TCS key handle: 0x2233000d, TPM key slot: 0xb
LOG_DEBUG TSPI rpc/tcstp/rpc_auth.c:70 RPC_OSAP_TP: TCS Context: 0xa0b0fe15
LOG_DEBUG TSPI rpc/tcstp/rpc_seal.c:46 common_Seal_TP: TCS Context: 0xa0b0fe15
LOG_DEBUG TSPI rpc/tcstp/rpc_context.c:60 RPC_CloseContext_TP: TCS Context: 0xa0b0fe15
LOG_RETERR TSPI tspi_context.c:113: 0x126

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

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

转载于:https://www.cnblogs.com/10087622blog/p/7840163.html

相关文章:

互联网流量太贵!新零售成创业新风口

什么是新零售?无人便利店、每个创业者都有自己的电商平台?运用人工智能、大数据等技术手段,对商品生产、流通、销售进行再升级,进而提高线上服务与线下体验?其实,说白了就是效率更高的零售新模式。联网早期的流量福利开始变弱,…

拼多多黄峥给陆奇“兼职”,欲挖掘这类AI人才

整理 | 一一出品 | AI科技大本营在上任 Y Combinator 中国创始人兼 CEO 四个月后,陆奇今日宣布三位兼职合伙人加盟 YC 中国,同时宣布新一期创业训练营正式完成招生工作,即将开始为期三个月的冬季训练营培训工作。三位兼职合伙人分别是拼多多创…

Crystal Reports中的字段

字段,是Crystal Reports呈现数据的基本单元,也是报表的数据中心。 在Crystal Reports中,字段的类型有数据库字段,公式字段,参数字段,组名字段,运行总计字段,特殊字段,未绑…

深度学习的发展可能已达极限!

【编者按】回首 2018 年,身处技术圈的你是否曾反思过些什么——科技与非科技企业界限的日益模糊、技术的发展现状和前景、科技发展的正向助推到负面效应,乃至个人心态上的变化。人文、生态、社会……玩技术的人看到的从来不仅仅是技术本身而已&#xff0…

大学生创业难?现在已不是问题!

现在越来越多的大学生离开学校加入了自主创业的队伍,那么你一定要知道政府为扶持大学生创业,出台的那些鼓励政策!如果你符合以下条件:1、公司法人是普通高等院校(高自考的不行)毕业前2年的在校生和毕业后5年…

Oracle:彻底结束会话 ,彻底解锁

oracle会话被锁是经常的。但有时alter system kill session sid,serial#;并不能彻底的杀死会话。只能通过杀死Linux上对应的进程才行。以前都是通过v$session里的logon_time,和ps -ef|grep oracle所列出的时间大约的定位进程。然后结束。本来想把这个写成日志。但有…

使用vim打造自己的python编辑器

基础配置 vim的配置是在用户主目录下的 ~/.vimrc 文件中完成的,如果没有的话,需要自己新建一下: cd ~ touch .vimrc首先做些简单的配置: set nocompatible "关闭与vi的兼容模式 set number "显示行号 set nowrap &qu…

两亿多用户,六大业务场景,知乎AI用户模型服务性能如何优化?

作者 | 王政英来源 | 知乎技术专栏用户模型简介知乎 AI 用户模型服务于知乎两亿多用户,主要为首页、推荐、广告、知识服务、想法、关注页等业务场景提供数据和服务,例如首页个性化 Feed 的召回和排序、相关回答等用到的用户长期兴趣特征,问题…

加班到凌晨三点,就能月薪五万了吗?

早起上班的地铁上,看到朋友圈有不少人刷视觉志推出的一篇《凌晨3点不回家:成年人的世界是你想不到的心酸》,出于好奇,就点击看了一些。文章用一堆煽情的图片和煽情的文字推导出一个结论:成年人的世界很不容易&#xff…

山西之行的感想

出差学习、外出培训(既“训”别人,也被别人“训”,呵呵)……充实啊。关于这次出差学习,很想说点什么的。不过说实话,他们的全员人口系统目前只是完成信息编辑、查询功能,进一步的汇总、数据挖掘…

GIS开发随笔(2)——关于建立GIS数据库的几个问题

真正的实战开始了,根据用户的需求首先就是编写了一大堆的这样那样的文档说明,并根据用户需求分析建立了数据库的库表及其内容。在建库的过程中我们使用的是微软的Sql Server2000数据库,在分析数据库前也在网上游荡了些时日,发现很…

刘铁岩谈机器学习:随波逐流的太多,我们需要反思

嘉宾 | 刘铁岩 整理 | 阿司匹林 来源 | AI科技大本营在线公开课 人工智能正受到越来越多的关注,而这波人工智能浪潮背后的最大推手就是“机器学习”。机器学习从业者在当下需要掌握哪些前沿技术?展望未来,又会有哪些技术趋势值得期待&#…

SQL2K数据库开发二之查看和修改Sample数据库

1.在SQL Server 企业管理器中,选择“数据库”节点,右击sample 数据库图标,在弹出的菜单中选择“属性”。 2."常规"页面显示了数据库的概要信息。 3.“文件组”页面显示了数据库中现有的文件组,此时数据库中只有一个主文…

谈点正经的:Papi酱能火,如果你现在学她却未必能火起来

集才华美貌于一身的女子Papi酱刷屏了。先是融资1200万,估值3亿。其次,又即将在四月和罗辑思维一起联手推出“中国第一场新媒体广告拍卖会”。 这些数据和事件串在一起,网红经济又被推至新的高点,内容在资本圈也越发繁荣。是的&…

全国各地DNS地址

全国各地电信DNS服务器地址北京:202.96.199.133 202.96.0.133 202.106.0.20 202.106.148.1 202.97.16.195上海:202.96.199.132 202.96.199.133 202.96.209.5 202.96.209.133天津:202.99.96.68 10.10.64.68广东:202.96.128.143 202…

iteye和微博

如果iteye能同步新浪微博,我以后就用iteye来写技术博客

BIND日志相关(二)

在Linux环境下,提供了广泛流行的BIND服务器,它是构建DNS服务器最常用的服务器软件。介绍BIND的安装的文章现在很多,现在我们就一起来谈一下维护的话题。我们如何才能够了解DNS服务器的运行情况下呢,它忙不忙、负载大不大?这一切&…

riot.js教程【四】Mixins、HTML内嵌表达式

前文回顾riot.js教程【三】访问DOM元素、使用jquery、mount输入参数、riotjs标签的生命周期;riot.js教程【二】组件撰写准则、预处理器、标签样式和装配方法;riot.js教程【一】简介; 共享Mixins 混合开发可以使你很好的复用代码,如…

思必驰发布AI芯片,透视智能语音企业的商业化历程

2019 年 1 月 4 日,言由芯生——2019 年思必驰 AI 芯片暨战略发布会在京举行。 现场,AI 芯片作为重头戏展示了其低功耗、高性能的核心优势,同时,思必驰多视角解读了 2018 年所取成果,并公布了 2019 年战略路线&#x…

【转载from冰河】来杭十周年

2001年9月12日,我高中毕业考入浙江大学,开始了杭州的生活;今天算是来杭十周年纪念日。中午我在杭州四眼井国际青年旅舍准备了一只烤全羊,邀请浙大毽球协会成员和包括 Mazha、andyfires 和萝卜等当年在校期间一起搞计算机的朋友们一…

CNI:容器网络接口

CNI:容器网络接口CNI简介不管是 docker 还是 kubernetes,在网络方面目前都没有一个完美的、终极的、普适性的解决方案,不同的用户和企业因为各种原因会使用不同的网络方案。目前存在网络方案 flannel、calico、openvswitch、weave、ipvlan等&…

马云:你改变不了特朗普,你连你妈都改变不了,你要改变你自己

整理 | 非主流出品 | AI 科技大本营1 月 3 日,世界浙商上海论坛暨上海市浙江商会第十次会员代表大会在上海举行。马云在大会上发表主题演讲,依旧金句频出。回望 2018,马云表示,「2018 年确实很不容易,但是大家都度过了…

简述Field,Attribute,Property的区别

您要是关注我这个,说明您是行内人,那我就开门见山了,用代码来诠释吧 //Fieldprotectedstring_Version;//Attribute[XmlElement("Version")]//PropertypublicstringVersion{ set{ _Version value; } get{ return_Version; }}转载…

添加Soap头来增加Web Service的安全性

myService.asmx.cs 添加类:MyHeader 从 System.Web.Services.Protocols.SoapHeader继承 完整的代码如下usingSystem;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Diagnostics;usingSystem.Web;usingSystem.Web.Services;//对…

BAT七年经验,却抵不过外企面试的两道算法题?

整理| 琥珀 出品| AI科技大本营又遇年底跳槽季,如果你曾在 BAT 等互联网大厂有过较为丰富的工作经验,想要换份工作,面试时会主要考虑哪些因素?面试外企,却被两道算法题难住?近日,一位网友在脉脉…

#Ruby# Introspect (1)

Introspect,内省,是指从程序自身出发,审视程序各方面的能力。这个过程又称为Reflection,反射。 孔子曰,吾日三省吾身。于人于程序,内省都是非常重要的。 1. Looking at objects ObjectSpace.each_object([…

java.lang.IllegalMonitorStateException 异常出现原因

java.lang.IllegalMonitorStateException 违法的监控状态异常。当某个线程试图等待一个自己并不拥有的对象(O)的监控器或者通知其他线程等待该对象(O)的监控器时,抛出该异常。 例子: //计算线程 //获取计算…

Tomcat init 脚本并添加服务自启动

很多用源码编译安装和一些用tar包直接解压缩的java程序都没有init脚本,不能像httpd或者nginx这种服务直接使用service httpd start,也不能使用/etc/init.d/httpd start 来启动。对于这种情况,我们可以自己写一个init脚本,并将命令…

算法 | 动画+解析,轻松理解「Trie树」

Trie这个名字取自“retrieval”,检索,因为Trie可以只用一个前缀便可以在一部字典中找到想要的单词。 虽然发音与「Tree」一致,但为了将这种 字典树 与 普通二叉树 以示区别,程序员小吴一般读「Trie」尾部会重读一声,可…

#Ruby# Introspect (2)

3. Looking at Classes superclass > get the parent of any particular class ancestors > get both superclasses and mixin modules 在Ruby1.9中,任何未指定的class都继承自Object,而Object继承自BasicObject,BasicObject无supercla…