历史上的今天
返回首页

历史上的今天

今天是:2025年02月03日(星期一)

2021年02月03日 | 基于ARM的可信计算的实现

2021-02-03 来源:eefocus

引言

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


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平台上的应用提供了重要的桥梁和支持。

推荐阅读

史海拾趣

ABL Aluminum Components公司的发展小趣事

为了进一步提升竞争力,ABL公司开始实施国际化发展战略。公司首先在海外市场设立了销售分支机构,积极开拓国际市场。随后,ABL公司又在海外建立了生产基地,利用当地资源和优势降低生产成本。通过国际化发展,ABL公司不仅扩大了市场份额,还提高了品牌的国际影响力。

Alpha (Taiwan)公司的发展小趣事

随着全球电子市场的不断扩大,Alpha (Taiwan)公司积极寻求国际合作,拓宽市场渠道。公司与多家国际知名电子企业建立了战略合作关系,共同研发新产品,开拓新市场。此外,公司还积极参加国际电子展会,展示公司的最新技术和产品,吸引更多的潜在客户。这些国际合作的开展,不仅提升了公司的国际影响力,也为公司的长远发展注入了新的动力。

EHC(ELECTRONICHARDWARE)公司的发展小趣事

EHC公司自创立之初就专注于电子硬件的技术创新。在竞争激烈的电子市场中,EHC公司凭借其独特的设计理念和先进的生产工艺,成功推出了一系列高性能、高可靠性的电子产品。这些产品不仅满足了消费者对高品质电子产品的需求,也为EHC公司赢得了良好的市场口碑。随着技术的不断进步,EHC公司不断推出创新产品,逐步巩固了其在行业中的领先地位。

迦美信芯(CanaanTek)公司的发展小趣事

迦美信芯一直致力于技术创新和产品升级。公司推出的面向手机终端和物联网的2G/3G/4G/5G全系列的射频开关、天线调谐器、低噪声放大器等产品,在行业内具有较高的知名度和美誉度。特别是在天线调谐器领域,迦美信芯已成为国内设计出天线调谐器芯片并大量量产的厂家之一。

Comtronic Gmbh-Verbindungstechnik公司的发展小趣事

迦美信芯通讯技术有限公司成立于2008年,总部位于被誉为“中国硅谷”的上海张江高科技园区。自成立以来,公司便专注于射频领域集成电路的研发和销售。凭借对技术的深入理解和不懈追求,迦美信芯逐渐在射频前端市场占据了一席之地。

Anders DX公司的发展小趣事

在导航芯片领域,迦美信芯也取得了显著成就。由公司董事长兼CTO倪文海主导开发的兼容“GPS+北斗导航”的射频芯片,被国内主要基带厂商广泛采用,占据了北斗细分市场60%的份额。这一成就不仅彰显了迦美信芯在导航芯片领域的强大实力,也为其在物联网和汽车电子等领域的应用奠定了坚实基础。

问答坊 | AI 解惑

ScanWedge 扫描后自动回车

怎么写配置文件才能自动回车? 这个文件放在Application 下, 同目录下有一个ScanWedge.reg 内容是这样的 [HKEY_CURRENT_USER\\Software\\Symbol\\ScanWedge] \"AutoEnter\"=dword:00000001 为什么不行呢,改怎么写,高手请指教…

查看全部问答>

PDA开发任务外包

本公司想开发一个PDA抄表器,PC数据库SQLSERVER 2000 如有意者,可与列联系 QQ:463071950,武汉本地最好,便于直接沟通…

查看全部问答>

如何使自己编写的驱动开机时候就运行?

如题。比如一个使LED灯不断闪烁的GPIO驱动。谢谢。…

查看全部问答>

键入字母a到屏幕显示a计算机做了什么操作?

键入字母a到屏幕显示a计算机做了什么操作? …

查看全部问答>

请问现在哪个厂家生产的音频类控件最好?在什么地方能够买到?

美国Ligos公司是一家专门从事音频,视频控件开发的厂商,所生产的音频,视频类控件功能相当强大,为软件产品的开发提高了效率,也节约了成本,在全球都是享有地位的! 在慧都控件网能买到!重庆慧都科技有限公司---提供专业的控件产品咨询,代理全 ...…

查看全部问答>

小型太阳能供电板的制作方法图解

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 本刊前几期介绍了太阳能电池板及相关的小制作,引发了包括笔者在内的许多读者的兴趣。闲来无事,突发奇想,决定利用手头上的两块太阳能电池板DIY一个微型太阳能供电系统,模拟现代化太阳能电 ...…

查看全部问答>

stm32i2c2上拉电阻电压的问题

                                 最近做了块板子,用STM32F103VB,在用24C256的时候,忘加上拉电阻,好不容易弄上去两个2.2K的上拉电阻,结果发现我 ...…

查看全部问答>

【求助】用TA能产生2MHZ的方波吗?急,在线等!!!

我用的是MSPF1611 MCLK=7.3728MHZ现在想产生一个最高频率为2M的方波,程序我是这样写的 void main(void) { WDTCTL = WDTPW +WDTHOLD; // Stop WDT P3DIR|=0x04; P3OUT|=0x04; CCR0 = 4; // ...…

查看全部问答>

职场人士应如何控制情绪?

  职场中要避免不良情绪发生,控制好自己的情绪对工作前途和同事关系都会带来影响。学会控制情绪会让你变得更成熟,那么职场人士应如何控制情绪呢?一起来看看下面的介绍吧,希望对您有所帮助。   用理智控制你的情绪   如果你怒气冲冲 ...…

查看全部问答>