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

发布者:RadiantEnergy最新更新时间:2013-10-15 来源: eefocus关键字:ARM平台  计算软件栈  安全操作系统 手机看文章 扫描二维码
随时随地手机看文章
引言

随着计算机应用的不断发展,安全威胁问题越来越严重,传统的单纯依靠软件来抵抗安全威胁往往不能解决问题。可信计算的基本思想是从芯片、硬件结构和操作系统等方面制定安全规范保证计算机和网络结构的安全。可信计算平台基于可信平台模块(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上的移植过程[page]

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

if(result!=TSS_SUCCESS)

{

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

goto out_close;

}

printf("create key success! ");[page]

创建密钥之前/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平台上的应用提供了重要的桥梁和支持。

关键字:ARM平台  计算软件栈  安全操作系统 引用地址:基于嵌入式ARM平台的可信计算软件栈的设计与实现

上一篇:基于关键点控制的网络嵌入式设备在线升级的实现
下一篇:Buddy算法在μC/OSII动态内存管理改进方案中的应用

推荐阅读最新更新时间:2024-03-16 13:28

IBM、特许及三星45纳米通用平台技术采用ARM开发低功耗、高效能的组件库
       拓展合作关系,为客户先进的 SoC 设计与        半导体制造解决方案带来上市时程的优势   ARM 正式宣布 IBM 、特许半导体及三星电子等三家通用平台技术合作伙伴,获 得 ARM Artisan 实体 IP 系列产品中的 Metro 低功耗与 Advantage 高效能产品的授权,以支持技术联盟的 45 纳米( nanometer, nm )低 功耗( low power, LP )制程技术。此项 ARM 组件库的授权协议扩展四家公司的合作 关系,确保晶圆厂客户获得系统单芯片( System-on-chip, SoC )设计的兼容性与 制造弹性。 ARM 不久之前才宣布与 IBM 、特许及三
[焦点新闻]
Nordic Semiconductor发布用于蓝牙智能应用的ARM mbed开发平台
超低功耗(ULP)射频(RF)专业厂商 Nordic Semiconductor ASA (OSE: NOD )和世界领先的半导体知识产权提供商ARM®公司宣布推出nRF51822-mKIT,这是用于快速、简便和灵活地开发蓝牙智能(Bluetooth® Smart) (即蓝牙低功耗(Bluetooth low energy)),蓝牙v4.1的标志性元素) 应用的平台。 虽然仍处于起步阶段,但物联网 (Internet of Things, IoT) 在某种程度上正以蓝牙智能(Bluetooth Smart ) (请参见最后“关于蓝牙智能”)作为支持技术来发展。蓝牙智能(Bluetooth Smart)正快速应用于使用RF
[网络通信]
Nordic Semiconductor发布用于蓝牙智能应用的<font color='red'>ARM</font> mbed开发<font color='red'>平台</font>
分析Google和ARM:如何做平台的领导者
    必称平台。然而真正要成为平台,并不是一件容易的事前。处于平台基石位置的企业,不仅仅需要在在生态系统中占据中心位置,还需要很好的协调好平台产于各方的利益。这需要有很多有大智慧的顶层设计,并很好的把这些精巧的设计变成实际的解决方案。通过对Google和ARM的案例分析,为大家梳理了下打造一个平台所需要考虑的问题。希望这两家世界上最成功的平台公司的案例,对正在或打算打造平台的创业者们有所启示。   合作共赢   包括Google、Arm这些处于生态体系中基石位置的企业,占据着具有广泛联系的生态体系中心的位置,它们调整生态体系成员之间的各种联系,并致力于增进整个体系的多样性和生产效率。在移动互联网时代,平台企业需要做好哪些事情,来推
[手机便携]
基于ARM的快速原型化平台的实现
1 背景介绍 在日益信息化的社会中,各种各样的嵌入式系统已经全面渗透到日常生活的每一个角落。嵌入式系统的功能越来越复杂,这就使得一个嵌入式系统产品从市场需求立项到方案选择、样机研制、定型量产所需要的开发费用越来越多,所需开发时间越来越长。因此,高效的嵌入式系统设计方法就显得尤为重要。 1.1 传统的嵌入式系统设计方法 嵌入式系统开发的关键就是对核心部分进行功能验证。传统的验证方法是建模模拟和制作目标板评估。 通过建模来进行功能验证存在不足。首先就是耗时和准确性互相矛盾。建立高层次的模型需要的时间短,但是模拟不够准确。相反,低层次的模型可以达到满意的评估效果,但是建模耗时长。其次,建模模拟是静态的过程,不能很好地反映系统实际
[单片机]
基于<font color='red'>ARM</font>的快速原型化<font color='red'>平台</font>的实现
ARM 平台printf函数定位到uart输出介绍
1.1 ARM 串口输出函数uart_printf ARM如果能使用C函数库自带的printf函数格式输出,那多方便,但是默认的printf都是定位到stdout终端,而不是串口,本文章讲述的是如何定位到ARM的串口。 1.1.1 函数主要代码 有在Mini2440开发板上验证过 //*****************main.c******************************* #include serial.h int Main() { unsignedint plck_val = 50000000; unsignedint buad_val = 115200; un
[单片机]
基于嵌入式Linux操作系统的可视化安全倒车系统
  引言   电子信息与数字图像处理技术目前已被广泛地应用在各个领域,车载系统的信息化已成为现代汽车业的重要标志。现在的倒车雷达系统可以为驾驶者提供许多帮助,多数采用超声波测距技术,可以直接显示出车尾与障碍物之间的距离。但由于超声波的散射特性,如果地面有尖锐的突起或存在横在半空的棱角状物体,系统就不能有效地“察觉”。假如能为现有的倒车系统增加一个可视功能,那么驾驶员在倒车时不必回头就可清楚车后的情况。本文设计了一种可视化安全 倒车 系统,该系统采用 嵌入式Linux操作系统 内核驱动 USB摄像头实现车后状况实时监控,通过判断超声波测距是否达到阈值来启动语音报警功能。   1 系统方案设计   如图1所示,系统由主控模块、超声
[单片机]
基于嵌入式Linux<font color='red'>操作系统</font>的可视化<font color='red'>安全</font>倒车系统
基于ARM平台的钢琴游戏 08实现音乐钢琴效果
////////////////////////////////////////////////////////////////// // // Copyright(C), 2013-2016, GEC Tech. Co., Ltd. // // File name: GPLE/bmp.c // // Author: Vincent Lin (林世霖) 微信公众号:秘籍酷 // // Date: 2016-11 // // Description: 处理BMP格式图像数据 // // GitHub: github.com/vincent040 Bug Report: 2437231462@qq.com // ////////
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved