Chinaunix首页 | 论坛 | 博客
  • 博客访问: 274747
  • 博文数量: 18
  • 博客积分: 787
  • 博客等级: 军士长
  • 技术积分: 235
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-27 21:20
文章分类

全部博文(18)

文章存档

2015年(2)

2013年(2)

2012年(7)

2011年(1)

2010年(6)

分类: LINUX

2012-02-16 14:33:06

在带有TPM的DELL机器上,安装TCG软件栈(TSS)的方法。

判断机器上是否有TPM芯片的简单方法

查看BIOS-Security中是否有TPM设置选项。

 

TPM真实开发环境构建手册

实验环境:Ubuntu 11.10 Linux Kernel 3.0.0

软件包准备:

(两条重要的命令,”apt-get install”, “apt-cache search”)

trousers-0.3.7.tar.gz(必备)

tpm-tools-1.3.5.tar.gz(必备,主要用于tpm模拟测试)

下载链接:

tpmmanager-0.8.1.tar.gz(可选,测试tpm

下载链接:

1.gmp-4.2.2

#sudo apt-get install libgmp10 libgmp-dev

3.安装trousersTSS软件栈)

(养成好的习惯,安装之前阅读READMEINSTALL文件)

#sh bootstrap.sh

很奇怪的是最新版的trousers竟然没有bootstrap.sh这个文件,如果不使用这个文件,直接configure会出错,可以直接从旧版本的trousers中拷一个来用。

bootstrap.sh运行时,可能会显示缺少某个程序,如缺少autopoint,则使用sudo apt-get install autopoint即可解决,同理其他。

configure之前,修改configure文件,删除其中所有的-Werror字符串,其实只有一处.

#configure

#sudo make            #不用sudo貌似会出问题?

#sudo make install

检查trousers是否安装成功,需要安装完成后需要启动tpm驱动和运行tcs daemon

#sudo modprobe tpm_tis

也可以atmel/infineon等具体厂商驱动,使用lsmod查看驱动模块是否加载成功(#modprobe tpm_infineon

#sudo tcsd start        

#ps-e| grep tcsd检查守护进程是否启动

1

4.tpm-tools

#sh bootstrap.sh

configure之前,修改configure文件,删除其中所有的-Werror字符串,其实只有一处

#./configure

# make

#sudo make install

现在就可以通过tpm-tools提供的命令检查TPM的模拟环境。进入tpm-tools-1.3.5/src/tpm_mgmt/目录下运行命令

(在运行之前记得安装驱动,modprobe tpm_tis; sudo tcsd start)

#./tpm_version    #查看版本号

#./tpm_getpubek    #查看ek公钥

#./tpm_takeownership      #获取owner

如果都成功表明TPM模拟环境已经完全构建成功了。

2

5.安装tpmmanager 0.8.1

其实tpmmanager可装可不装,主要是它提供QT界面可以直观查看和管理TPM而已,比较方便。tpmmanager-0.8安装需要QT支持,需要安装qt4-qmake。但是make过程会出现缺少uic-qt4 command not found,还需要安装libqt4-dev。编译安装过程

#cd tpmmanager-0.8

#qmake –v    #查看qt版本,如果没有,apt-get install qt4-qmake

#qmake

#make

(make的过程提示错误,src/TPMManager.cxx412:47error: can not call constructor ‘QUrl::Qurl’ directly[-fpermissive],如果出现了同样的错误,打开这个文件,修改TPMManager.cxx 412行,将

QUrl myURL = QUrl::QUrl(url, QUrl::strictMode)修改为QUrl myURL = QUrl(url, QUrl::strictMode) 源码就可以继续编译)

# install bin/tpmmanager /usr/local/bin

运行tpmmanager

#tpmmanager

 

除此之外还可以安装tpm openssl engine等工具,这样就能够提供更多的操作方式和开发接口。

图3

图4

图5

图6

图7

 下面是一个小的测试程序

 为了测试一下接口,写了以下程序test.c来验证:

TPM 测试程序:

#include
#include
#include "trousers/tss.h"
#define TPMMAX 4096
int TPM_Transmit(unsigned char * blob){
unsigned int tpmfp, len;
 int i, size;
 tpmfp = open("/dev/tpm0", O_RDWR);
 if(tpmfp < 0){
printf("could not open /dev/tpm0\n");
exit(-1);
};

size = ntohl (*(int *)&blob[2]);
len = write(tpmfp, blob, size);
len = read(tpmfp, blob,TPMMAX);
for(i = 0; i< len; i++) {
 printf("%02x ", blob[i]);
 }
printf("\n");
close(tpmfp);
return len;
}
int TPM_Reset() {
unsigned char blob[TPMMAX] = {
0, 193, /* TPM_TAG_RQU_COMMAND */
 0, 0, 0, 10, 0, /* length */
 0, 0, 90 /* TPM_ORD_Reset */
 };
return (TPM_Transmit(blob));
}
int TPM_PcrRead(int pcrindex){
 unsigned char blob[TPMMAX] = {
 0, 193, /* TPM_TAG_RQU_COMMAND */
 0, 0, 0, 14, /* length */
 0, 0, 0, 21, /* TPM_ORD_PcrRead */
0, 0, 0, pcrindex/* PCR index */
 };

 return (TPM_Transmit(blob));
}
int TPM_Extend(int pcrindex){
 unsigned char blob[TPMMAX] = {
 0, 193, /* TPM_TAG_RQU_COMMAND */
0, 0, 0, 34, /* length */
0, 0, 0, 20, /* TPM_ORD_Extend */
0, 0, 0, pcrindex ,/* PCR index */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 /* data*/
 };
 return (TPM_Transmit(blob));
}
int TPM_SHA1Start(){
 unsigned char blob[TPMMAX] = {
 0, 193, /* TPM_TAG_RQU_COMMAND */
0, 0, 0, 10, /* length */
0, 0, 0, 160, /* TPM_ORD_SHA1Start */
 };
 return (TPM_Transmit(blob));
}
int TPM_SHA1Complete(){
 unsigned char blob[TPMMAX] = {
0, 193,/* TPM_TAG_RQU_COMMAND */
0, 0, 0, 15, /* length */
0, 0, 0, 162, /* TPM_ORD_SHA1Start */
0, 0, 0, 1, /* Hashdatasize */
 1 /* Hashdata */
 };
 return (TPM_Transmit(blob));
}
int main(){
 TPM_PcrRead(0);
 TPM_Extend(0);
 TPM_Reset();
 TPM_SHA1Start();
 TPM_SHA1Complete();
}

gcc -o test test.c

#./test

出现错误: Device or Resource busy

fuser /dev/tpm0

发现有个进程在用它,  kill ~


阅读(17693) | 评论(8) | 转发(1) |
给主人留下些什么吧!~~

Ruigel2019-02-27 21:51:39

楼主您好!我是TPM初学者,我在虚拟机上安装了TPM Manager之后,上边显示那个TPM Driver found是个红色的叉号,意思是没有找到驱动对吗?可是如果没有驱动的话是不是会不能正常启动TPM, 也就不能启动守护进程,也就启动不了tpm manager呢?

gbtux2013-01-11 10:07:04

我用的是硬件TPM芯片,但是tcsd不能启动。,错误如下
[root@localhost ~]# tcsd -f
TCSD TDDL ioctl: (25) Inappropriate ioctl for device
TCSD TDDL Falling back to Read/Write device support.
TCSD TDDL ERROR: read from device /dev/tpm0 failed: Input/output error
TCSD TCS ERROR: TCS GetCapability failed with result = 0x1087

然后dmesg里面错误为:
tpm_tis tpm_tis: tpm_transmit: tpm_send: error 4294967291

请问这是怎么回事?谢谢。

lhdboy19882012-12-25 09:53:10

请问楼主用的是什么型号的dell电脑。羡慕在真机上做TPM实验的啊~

lhdboy19882012-12-25 09:43:05

楼主总结的不错,有时间把其他几篇博客也看看~楼主做过可信计算向嵌入式平台的移植吗?

yanggzhong2012-04-21 23:50:25

止觞: 我试了一下,只要tpm_tis加载成功了,/dev/tpm0就会出现,同样的,我的tpm_tis的使用位也是0,所以你的/dev/tpm0设备不出现与使用标志无关。
关于/dev/tpm0, 我.....
后来在后面加一个enforce=1就可以了,不知为何.我用的是模拟器.还是非常感谢!