微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于嵌入式ARM平台的可信计算软件栈的设计与实现

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

时间:04-09 来源:3721RD 点击:

好的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在ARM平台的移植之后,可以使用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! ");

创建密钥之前/tmp目录下的文件只有dir,创建成功后会打印信息,并生成密钥文件UserKeyBlob.cer,如图5所示:

图5 密钥创建

文件加密

加密操作主要使用函数Tspi_Data_Bind(),示例代码如下:

TSS_RESULT rc=Tspi_Data_Bind(hEncdata,hKey, strlen(testCipher),(unsigned char*)testCipher);

if(result !=TSS_SUCCESS)

{

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

goto out_close;

}

交叉编译后生成命令encryptFile。如果要加密的文件为/tmp/dir/test,前面创建的密钥所在的目录为/tmp,则编译后执行命令时的格式为encryptFile -e /tmp/dir /tmp。

加密之前,/tmp/dir目录下只有test一个文件,使用cat命令查看该文件的内容为:Hello,world!执行加密命令之后,使用cat命令再次查看该文件的内容,看到的是乱码,而不是原始内容,可见加密成功。加密后在test文件所在的目录下会生成一个FileKey.cer文件。如图6所示:

图6 文件加密

文件解密

解密操作使用函数Tspi_Data_Unbind(),示例代码如下:

TSS_RESULT rc=Tspi_Data_Unbind(hEncdata,hKey, &unsealedDataLength, &unsealedData)

if(rc!=TSS_SUCCESS)

{

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

goto out_close;

}

解密文件和加密文件使用的是同一个命令,但后缀参数不同,格式为encryptFile –d /tmp/dir /tmp。执行解密操作后,使用cat命令查看加密的文件test,则可以看到原始的内容,说明解密成功。此时,test文件所在的目录下加密时生成的FileKey.cer文件消失。如图7所示:

图7 文件解密

除了上面的几个示例之外,还可以调用TSS的API编写各种应用程序对TPM进行操作。总之,只要给定了TPM芯片,掌握了TPM的基本知识和TSS的API,就可以写出可信计算的应用程序。

结束语

传统的可信计算一般是基于PC平台的,本文通过可信计算软件栈TSS在ARM平台上的实现,调用TSS的API编写应用程序与TPM进行交互,对于实现可信计算在嵌入式ARM平台上的应用提供了重要的桥梁和支持。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top