《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于ARM平臺的可信計算軟件棧的實現及應用
基于ARM平臺的可信計算軟件棧的實現及應用
楊鐵柱 張向剛
電子科技大學空天科學技術研究院
摘要: 傳統的可信計算一般是基于PC平臺的,本文通過可信計算軟件棧TSS在ARM平臺上的實現,調用TSS的API編寫應用程序與TPM進行交互,對于實現可信計算在嵌入式ARM平臺上的應用提供了重要的橋梁和支持。
關鍵詞: ARM 軟件棧
Abstract:
Key words :

引言

隨著計算機應用的不斷發展,安全威脅問題越來越嚴重,傳統的單純依靠軟件來抵抗安全威脅往往不能解決問題。可信計算的基本思想是從芯片、硬件結構和操作系統等方面制定安全規范保證計算機和網絡結構的安全。可信計算平臺基于可信平臺模塊(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平臺上的應用提供了重要的橋梁和支持。
 

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲另类一区二区| 午夜精品视频一区| 亚洲中字在线| 亚洲精品一级| 在线观看视频欧美| 国内精品亚洲| 国产主播一区| 国产日韩欧美综合一区| 国产精品视频免费在线观看| 欧美日韩直播| 欧美日韩在线播放一区| 欧美色另类天堂2015| 欧美日韩中文| 国产精品高潮呻吟视频| 国产精品二区影院| 国产精品高潮呻吟久久av无限 | 亚洲欧洲综合另类| 亚洲国产aⅴ天堂久久| 亚洲成人在线网| 亚洲黄色成人久久久| 最新国产乱人伦偷精品免费网站| 久久国产福利国产秒拍| 久久精品夜色噜噜亚洲aⅴ| 亚洲电影在线| 日韩一级欧洲| 亚洲性线免费观看视频成熟| 亚洲欧美在线视频观看| 新片速递亚洲合集欧美合集| 久久精品视频免费观看| 鲁鲁狠狠狠7777一区二区| 欧美本精品男人aⅴ天堂| 欧美精品一区二区三区四区| 欧美日韩精品综合| 国产精品久久久久77777| 国产午夜亚洲精品理论片色戒| 国产一区成人| 亚洲第一二三四五区| 亚洲精品日韩在线| 中文久久乱码一区二区| 亚洲女人小视频在线观看| 久久成人资源| 日韩午夜激情av| 亚洲资源av| 久久久欧美一区二区| 欧美大片在线看免费观看| 欧美日韩精品综合| 国产日韩欧美91| 亚洲第一福利视频| 亚洲视频网在线直播| 欧美综合国产| 在线视频日本亚洲性| 欧美在线精品一区| 欧美mv日韩mv国产网站app| 欧美性猛交视频| 国产综合香蕉五月婷在线| 亚洲欧洲精品一区二区精品久久久| 中文欧美在线视频| 久久精品视频99| 亚洲一区二区三区高清不卡| 久久久精品动漫| 欧美另类久久久品| 国产欧美日韩亚洲精品| 91久久精品美女高潮| 亚洲免费在线观看| 亚洲精品免费在线播放| 欧美一区二区三区四区高清 | 红桃视频一区| 亚洲毛片一区| 久久gogo国模裸体人体| 中日韩男男gay无套| 久久久五月婷婷| 国产精品豆花视频| 亚洲国产精品毛片| 午夜精品久久久久久| 一本色道久久综合| 久久天堂av综合合色| 国产精品观看| 亚洲激情一区二区| 欧美在线播放一区| 亚洲一区欧美二区| 欧美成人一区二区三区在线观看| 国产乱码精品1区2区3区| 日韩亚洲成人av在线| 久久精品一区二区三区不卡| 亚洲小少妇裸体bbw| 欧美va亚洲va国产综合| 国产日韩在线一区| 国产精品99久久99久久久二8| 最新国产乱人伦偷精品免费网站| 久久国产精品一区二区三区四区| 欧美日韩在线播放三区四区| 亚洲国产精彩中文乱码av在线播放| 午夜精品久久久久久久男人的天堂| 一本色道久久综合亚洲91| 蜜臀91精品一区二区三区| 国产婷婷成人久久av免费高清 | 欧美三级欧美一级| 亚洲国产经典视频| 久久国产精品久久久久久电车 | 国产精品丝袜白浆摸在线| 亚洲精品在线观看免费| 亚洲国产高清一区二区三区| 欧美一区二区视频免费观看| 欧美午夜电影在线| 亚洲乱码国产乱码精品精98午夜| 亚洲人成网站影音先锋播放| 巨胸喷奶水www久久久免费动漫| 国产欧美一区二区精品忘忧草| 亚洲视频在线观看视频| 在线一区二区三区做爰视频网站 | 亚洲精品一区二区三区av| 亚洲人在线视频| 蜜桃久久av| 影音先锋在线一区| 久久精品人人做人人爽电影蜜月| 久久精品国产清高在天天线| 国产欧美一区二区精品性| 亚洲伊人第一页| 亚洲欧美999| 国产精品卡一卡二卡三| 一区二区日韩| 亚洲一区二区视频在线| 国产精品成人v| 亚洲视频在线免费观看| 亚洲欧美日韩成人| 国产精品免费一区二区三区观看 | 亚洲欧洲精品一区二区三区不卡 | 国产婷婷色综合av蜜臀av| 亚洲欧美日韩国产一区二区三区| 午夜激情一区| 国产欧美 在线欧美| 久久精品观看| 欧美大尺度在线| 亚洲日本成人网| 亚洲一区二区高清视频| 国产精品久久久久久av下载红粉| 亚洲一区二区精品视频| 欧美一区二区视频在线观看| 国产在线播放一区二区三区| 久久精品一区四区| 欧美国产一区二区在线观看 | 亚洲一区二区三区777| 国产精品毛片a∨一区二区三区|国| 亚洲一区二区三区视频播放| 欧美一级一区| 国产在线观看一区| 亚洲经典视频在线观看| 免费成人av在线看| 亚洲国产日韩综合一区| 在线一区二区三区做爰视频网站 | 日韩视频在线永久播放| 欧美日韩国产二区| 亚洲午夜久久久久久尤物 | 欧美精品成人91久久久久久久| 亚洲精品一区二区三区四区高清| 亚洲丝袜av一区| 国产伦精品一区二区三| 久久精品亚洲| 欧美日韩亚洲系列| 午夜精品视频在线观看| 麻豆精品精华液| 日韩网站在线| 久久精品国产精品| 亚洲日本成人| 欧美一级成年大片在线观看| 精品不卡一区| 国产精品99久久久久久白浆小说| 国产精品午夜春色av| 亚洲国产视频a| 欧美人与性禽动交情品| 亚洲欧美国产不卡| 免费中文字幕日韩欧美| 亚洲无线一线二线三线区别av| 久久久视频精品| 一本久久a久久免费精品不卡| 久久国产欧美| 日韩视频一区二区三区| 久久久久久穴| 99热这里只有精品8| 久久久999精品| 99视频精品全国免费| 玖玖视频精品| 亚洲一区二区三区中文字幕在线| 蘑菇福利视频一区播放| 亚洲女同性videos| 欧美日韩国产限制| 久久精彩免费视频| 国产精品成人一区| 亚洲精品极品| 国产一区二区三区无遮挡| 一本不卡影院| 在线观看亚洲视频| 先锋资源久久| 日韩午夜电影av| 久久综合九色九九| 亚洲欧美怡红院| 国产精品99一区二区| 亚洲精品一区二| 极品少妇一区二区三区精品视频| 亚洲永久字幕|