Chinaunix首页 | 论坛 | 博客
  • 博客访问: 273937
  • 博文数量: 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 ~


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

止觞2012-04-15 21:03:12

yanggzhong: 你好,我们的信息安全竞赛也在做tpm配置,请教一个问题,我的tpm driver为什么无法找到呢?没有/dev/tpm0这项设备,但驱动模块是加载成功的,lsmod是发现有tpm_.....
我试了一下,只要tpm_tis加载成功了,/dev/tpm0就会出现,同样的,我的tpm_tis的使用位也是0,所以你的/dev/tpm0设备不出现与使用标志无关。
关于/dev/tpm0, 我引用一下书上的阐释:
“tpm.ko是通用的设备驱动程序,还有特定的芯片驱动程序,如负责处理特定芯片的驱动程序的tpm_atmel.ko。一般情况下,该模块在启动的时候自动加载。设备驱动程序是一个主号码为10,次号码为224的正式的字符设备。通常,应用程序通过特定的文件/dev/tpm0访问它。”
因此,只要设备驱动加载成功,这个文件应该就是存在的。
我有点建议:
1.你的安装环境是模拟器还是带有芯片的真正机

yanggzhong2012-04-14 20:58:48

你好,我们的信息安全竞赛也在做tpm配置,请教一个问题,我的tpm driver为什么无法找到呢?没有/dev/tpm0这项设备,但驱动模块是加载成功的,lsmod是发现有tpm_tis的,只不过在使用标志上为0,而不是1。你能说明一下/dev/tpm0是怎样加载的吗?谢谢啦!

yimikeer2012-03-30 10:29:22

楼主可以留个联系方式么,我有些TPM编程的问题想请教一下楼主,非常感谢!