新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于嵌入式ARM平台的可信计算软件栈的设计与实现

基于嵌入式ARM平台的可信计算软件栈的设计与实现

作者:时间:2013-10-15来源:网络收藏

交叉编译OpenSSL

本文所使用的OpenSSL具体版本为1.0.0,在交叉编译之前需要进行如下操作:

(1)配置:在对OpenSSL1.0.0进行配置时需要指定其安装路径,在后面配置TSS时需要调用OpenSSL安装路径里的库文件,并且需要指定交叉编译工具,具体命令如下:

$/config--prefix=/usr/local/openssl os/compiler:arm-linux-gcc

其中--prefix=/usr/local/openssl指定安装的路径,

os/compiler:arm-linux-gcc指定编译器arm-linux-gcc;

(2)修改Makefile,里面对应的部分需要修改为:

CC=arm-linux-gcc

EX_LIBS=-ldl

AR=arm-linux-ar $(ARFLAGS) r

RANLIB=arm-linux-ranlib

交叉编译TSS

本文所使用的可信为trousers0.3.3.2,在交叉编译之前需要进行如下操作:

(1)执行bootstrap.sh脚本,具体命令如下:

[root@happy trousers-0.3.3.2]#sh bootstrap.sh

(2)对软件包进行配置,命令如下:

[root@happy trousers-0.3.3.2]# /configure

--host=arm-linux --with-openssl=/usr/local/openssl --prefix=/usr/tss

其中--host=arm-linux指定目标平台为ARM,并使用交叉编译工具;--with-openssl=/usr/local/openssl指定OpenSSL所在的位置,交叉编译的时候需要用到其中的libcrypto库文件;--prefix=/usr/tss指定安装位置。

包含TSS的文件系统制作

文件系统在宿主机上的目录为~/rootfs,将交叉编译安装好的TSS(在宿主机上的位置为/usr/tss)拷贝到~/rootfs/usr下,将TSS安装后生成的库文件拷贝到~/rootfs的lib目录下。

然后使用文件系统制作工具mkcramfs1.0,将目录rootfs制作成镜像文件,通过串口工具minicom下载到ARM开发板。

如果TSS启动成功,则会出现如下提示:TCSD trousers 0.3.3.2:TCSD up and running。

注意事项

在制作文件系统时,~/rootfs/etc中需要添加关于TSS的group、passwd文件,hosts里面应该包含localhost。否则,制作成文件系统烧写进开发板之后,当输入#./usr/tss/sbin/tcsd-f启动TSS时,会报错。

将不希望用户修改的文件都放在只读的cramfs分区下,修改初始化脚本liunxrc,将TSS所在的目录挂载为yaffs格式。另外下文中将要用到的/tmp目录也要挂载为yaffs格式,保证可读可写。

应用程序编写

在完成了TSS在的移植之后,可以使用TSS所提供的API编写应用程序与TPM进行交互。下面主要介绍一下获取属主身份、创建密钥、对文件进行加密和解密。

属主身份获取

首次使用TPM时,需要先获取属主身份,主要用到函数Tspi_TPM_TakeOwnership(),示例代码如下:

TSS_RESULT rc=Tspi_TPM_TakeOwnership(a_hTpm, a_hSrk, NULL_HKEY);

if(rc!=TSS_SUCCESS)

{

fprintf(stderr,"Tspi_TPM_TakeOwnership:%s ", Trspi_Error_String(rc));

goto out_close;

}

printf("result is %d ",result);

return result;

如果获取成功则返回值为0,如图4所示:

图4 属主身份获取

密钥创建

对文件进行加密时需要使用密钥,这可以使用函数Tspi_Key_CreateKey()来创建,示例代码如下:

TSS_RESULT result = Tspi_Key_CreateKey(hKey,hSrk,NULL_HOBJECT);

if(result!=TSS_SUCCESS)

{

fprintf(stderr,"Tspi_Key_CreateKey: %s ", Trspi_Error_String(rc));

goto out_close;

}

printf("create key success! ");



评论


相关推荐

技术专区

关闭