您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术基于ARM平台的可信计算软件栈的实现及应用 正文
基于ARM平台的可信计算软件栈的实现及应用

基于ARM平台的可信计算软件栈的实现及应用

点击数:7682 次   录入时间:03-04 12:00:35   整理:http://www.55dianzi.com   嵌入式系统-技术

  引言

  随着计算机应用的不断发展,安全威胁问题越来越严重,传统的单纯依靠软件来抵抗安全威胁往往不能解决问题。可信计算的基本思想是从芯片、硬件结构和操作系统等方面制定安全规范保证计算机和网络结构的安全。可信计算平台基于可信平台模块(TPM),以密码算法技术作为基础、安全操作系统作为核心,通过信任域的不断扩展形成安全的平台。

  目前市场上的TPM芯片主要应用在PC终端上,但是随着嵌入式系统的不断发展,TPM在嵌入式系统上的应用也越来越广,程序员在编写可信计算应用程序的时候,其切入点应该是TSS,本文就TPM和TSS的概念、TSS在ARM平台上的移植、调用TSS的API编写应用程序以及如何与TPM进行交互做了详细的介绍,最终实现了在嵌入式ARM平台上的可信计算。

  TPM芯片结构和TSS体系结构概述

  可信计算的核心是TPM,它是一种安全加密芯片,提供了一种基于硬件的方法来管理用户权限、网络访问、数据保护等。TPM芯片用来存储数字密钥、认证和密码,有了TPM不管是虚拟的还是物理的攻击都将变得更加困难。如图1所示,TPM芯片主要由以下几部分组成:I/O组件、非易失性存储、身份密钥、程序代码、随机数产生器、Sha-1算法引擎、RSA密钥产生、RSA引擎、Opt-In选择组件、执行引擎。



图1 TPM芯片结构

  TPM芯片里的资源是有限的,它仅仅对外提供了一些基本的功能接口。为了充分应用TPM的内部功能,需要在TPM外部套接一个可信计算软件栈TSS,TSS作为可信计算平台上TPM的支持软件,其规范定义了一种能够让访问TPM变得简单和直接的体系结构。本文构建的嵌入式平台为三星的ARM9TDMI-S3C2410处理器,TPM芯片为Atmel公司的AT97SC3204T。

  由图2可知,TSS的运行模式分为两种:用户模式和内核模式。用户模式下,通常根据用户的要求来加载和执行用户应用程序和服务,有时候这些用户应用程序和服务也可以作为启动服务被载入。在内核模式下,通常运行设备驱动和操作系统的核心组件。


图2 TSS体系结构

  TSS由三个逻辑组件构成:TCG设备驱动程序库(TCG DevICe Driver Library,TDDL)、TSS核心服务(TSS Core Services,TCS)、TCG服务提供者(TCG Service Provider,TSP)。

  TDDL提供了一个与TPM设备驱动程序进行交互的API的库,用来打开和关闭TPM设备驱动程序(TPM Device Driver)、发送和接收数据块、查询设备驱动程序的属性、取消已经提交的TPM命令。TCS层主要用来管理TPM的资源,提供了一个TPM命令数据块产生器和一个全局的密钥存储设备。TSP层通过共享对象或动态链接库直接被应用程序调用。

  TSS的工作流程如下:应用程序的命令参数通过接口TSPl发送到TSP,TSP通过处理后传送给TCS,TCS将接收到的请求转化为TPM能够识别的字节流,通过TDDL和TDD传给TPM,然后反向经TDDL、TDD、TCS、TSP传回应用程序。

  TSS在ARM上的移植

  本文所使用的宿主机操作系统为FEDora,交叉编译工具为arm-linux-gCC。

  TSS在ARM上的移植分为3部分:交叉编译OpenSSL、交叉编译TSS、制作包含TSS的文件系统。在交叉编译TSS之前,先交叉编译安装OpenSSL,因为交叉编译TSS的时候需要用到其中的libcrypto库文件,其流程如图3所示:




图3 TSS在ARM上的移植过程

  交叉编译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在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);

[1] [2]  下一页


本文关键字:软件  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术