<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式ARM平臺(tái)的可信計(jì)算的實(shí)現(xiàn)

          基于嵌入式ARM平臺(tái)的可信計(jì)算的實(shí)現(xiàn)

          作者: 時(shí)間:2017-06-04 來源:網(wǎng)絡(luò) 收藏

          引言

          隨著計(jì)算機(jī)應(yīng)用的不斷發(fā)展,安全威脅問題越來越嚴(yán)重,傳統(tǒng)的單純依靠軟件來抵抗安全威脅往往不能解決問題??尚庞?jì)算的基本思想是從芯片、硬件結(jié)構(gòu)和操作系統(tǒng)等方面制定安全規(guī)范保證計(jì)算機(jī)和網(wǎng)絡(luò)結(jié)構(gòu)的安全。可信計(jì)算平臺(tái)基于可信平臺(tái)模塊(TPM),以密碼算法技術(shù)作為基礎(chǔ)、安全操作系統(tǒng)作為核心,通過信任域的不斷擴(kuò)展形成安全的平臺(tái)。

          本文引用地址:http://www.ex-cimer.com/article/201706/348344.htm

          目前市場(chǎng)上的TPM芯片主要應(yīng)用在PC終端上,但是隨著嵌入式系統(tǒng)的不斷發(fā)展,TPM在嵌入式系統(tǒng)上的應(yīng)用也越來越廣,程序員在編寫可信計(jì)算應(yīng)用程序的時(shí)候,其切入點(diǎn)應(yīng)該是TSS,本文就TPM和TSS的概念、TSS在平臺(tái)上的移植、調(diào)用TSS的API編寫應(yīng)用程序以及如何與TPM進(jìn)行交互做了詳細(xì)的介紹,最終實(shí)現(xiàn)了在嵌入式平臺(tái)上的可信計(jì)算。

          TPM芯片結(jié)構(gòu)和TSS體系結(jié)構(gòu)概述

          可信計(jì)算的核心是TPM,它是一種安全加密芯片,提供了一種基于硬件的方法來管理用戶權(quán)限、網(wǎng)絡(luò)訪問、數(shù)據(jù)保護(hù)等。TPM芯片用來存儲(chǔ)數(shù)字、認(rèn)證和密碼,有了TPM不管是虛擬的還是物理的攻擊都將變得更加困難。如圖1所示,TPM芯片主要由以下幾部分組成:I/O組件、非易失性存儲(chǔ)、身份、程序代碼、隨機(jī)數(shù)產(chǎn)生器、Sha-1算法引擎、RSA產(chǎn)生、RSA引擎、Opt-In選擇組件、執(zhí)行引擎。

          圖1 TPM芯片結(jié)構(gòu)

          TPM芯片里的資源是有限的,它僅僅對(duì)外提供了一些基本的功能接口。為了充分應(yīng)用TPM的內(nèi)部功能,需要在TPM外部套接一個(gè)TSS,TSS作為可信計(jì)算平臺(tái)上TPM的支持軟件,其規(guī)范定義了一種能夠讓訪問TPM變得簡(jiǎn)單和直接的體系結(jié)構(gòu)。本文構(gòu)建的嵌入式平臺(tái)為三星的9TDMI-S3C2410處理器,TPM芯片為Atmel公司的AT97SC3204T。

          由圖2可知,TSS的運(yùn)行模式分為兩種:用戶模式和內(nèi)核模式。用戶模式下,通常根據(jù)用戶的要求來加載和執(zhí)行用戶應(yīng)用程序和服務(wù),有時(shí)候這些用戶應(yīng)用程序和服務(wù)也可以作為啟動(dòng)服務(wù)被載入。在內(nèi)核模式下,通常運(yùn)行設(shè)備驅(qū)動(dòng)和操作系統(tǒng)的核心組件。

          圖2 TSS體系結(jié)構(gòu)

          TSS由三個(gè)邏輯組件構(gòu)成:TCG設(shè)備驅(qū)動(dòng)程序庫(kù)(TCG Device Driver Library,TDDL)、TSS核心服務(wù)(TSS Core Services,TCS)、TCG服務(wù)提供者(TCG Service Provider,TSP)。

          TDDL提供了一個(gè)與TPM設(shè)備驅(qū)動(dòng)程序進(jìn)行交互的API的庫(kù),用來打開和關(guān)閉TPM設(shè)備驅(qū)動(dòng)程序(TPM Device Driver)、發(fā)送和接收數(shù)據(jù)塊、查詢?cè)O(shè)備驅(qū)動(dòng)程序的屬性、取消已經(jīng)提交的TPM命令。TCS層主要用來管理TPM的資源,提供了一個(gè)TPM命令數(shù)據(jù)塊產(chǎn)生器和一個(gè)全局的密鑰存儲(chǔ)設(shè)備。TSP層通過共享對(duì)象或動(dòng)態(tài)鏈接庫(kù)直接被應(yīng)用程序調(diào)用。

          TSS的工作流程如下:應(yīng)用程序的命令參數(shù)通過接口TSPl發(fā)送到TSP,TSP通過處理后傳送給TCS,TCS將接收到的請(qǐng)求轉(zhuǎn)化為TPM能夠識(shí)別的字節(jié)流,通過TDDL和TDD傳給TPM,然后反向經(jīng)TDDL、TDD、TCS、TSP傳回應(yīng)用程序。

          TSS在ARM上的移植

          本文所使用的宿主機(jī)操作系統(tǒng)為Fedora,交叉編譯工具為arm-linux-gcc。

          TSS在ARM上的移植分為3部分:交叉編譯OpenSSL、交叉編譯TSS、制作包含TSS的文件系統(tǒng)。在交叉編譯TSS之前,先交叉編譯安裝OpenSSL,因?yàn)榻徊婢幾gTSS的時(shí)候需要用到其中的libcrypto庫(kù)文件,其流程如圖3所示:

          圖3 TSS在ARM上的移植過程

          交叉編譯OpenSSL

          本文所使用的OpenSSL具體版本為1.0.0,在交叉編譯之前需要進(jìn)行如下操作:

          (1)配置:在對(duì)OpenSSL1.0.0進(jìn)行配置時(shí)需要指定其安裝路徑,在后面配置TSS時(shí)需要調(diào)用OpenSSL安裝路徑里的庫(kù)文件,并且需要指定交叉編譯工具,具體命令如下:

          $/config--prefix=/usr/local/openssl os/compiler:arm-linux-gcc

          其中--prefix=/usr/local/openssl指定安裝的路徑,

          os/compiler:arm-linux-gcc指定編譯器arm-linux-gcc;

          (2)修改Makefile,里面對(duì)應(yīng)的部分需要修改為:

          CC=arm-linux-gcc

          EX_LIBS=-ldl

          AR=arm-linux-ar $(ARFLAGS) r

          RANLIB=arm-linux-ranlib

          交叉編譯TSS

          本文所使用的為trousers0.3.3.2,在交叉編譯之前需要進(jìn)行如下操作:

          (1)執(zhí)行bootstrap.sh腳本,具體命令如下:

          [root@happy trousers-0.3.3.2]#sh bootstrap.sh

          (2)對(duì)軟件包進(jìn)行配置,命令如下:

          [root@happy trousers-0.3.3.2]# /configure

          --host=arm-linux --with-openssl=/usr/local/openssl --prefix=/usr/tss

          其中--host=arm-linux指定目標(biāo)平臺(tái)為ARM,并使用交叉編譯工具;--with-openssl=/usr/local/openssl指定OpenSSL所在的位置,交叉編譯的時(shí)候需要用到其中的libcrypto庫(kù)文件;--prefix=/usr/tss指定安裝位置。

          包含TSS的文件系統(tǒng)制作

          文件系統(tǒng)在宿主機(jī)上的目錄為~/rootfs,將交叉編譯安裝好的TSS(在宿主機(jī)上的位置為/usr/tss)拷貝到~/rootfs/usr下,將TSS安裝后生成的庫(kù)文件拷貝到~/rootfs的lib目錄下。

          然后使用文件系統(tǒng)制作工具mkcramfs1.0,將目錄rootfs制作成鏡像文件,通過串口工具minicom下載到ARM開發(fā)板。

          如果TSS啟動(dòng)成功,則會(huì)出現(xiàn)如下提示:TCSD trousers 0.3.3.2:TCSD up and running。

          注意事項(xiàng)

          在制作文件系統(tǒng)時(shí),~/rootfs/etc中需要添加關(guān)于TSS的group、passwd文件,hosts里面應(yīng)該包含localhost。否則,制作成文件系統(tǒng)燒寫進(jìn)開發(fā)板之后,當(dāng)輸入#./usr/tss/sbin/tcsd-f啟動(dòng)TSS時(shí),會(huì)報(bào)錯(cuò)。

          將不希望用戶修改的文件都放在只讀的cramfs分區(qū)下,修改初始化腳本liunxrc,將TSS所在的目錄掛載為yaffs格式。另外下文中將要用到的/tmp目錄也要掛載為yaffs格式,保證可讀可寫。

          應(yīng)用程序編寫

          在完成了TSS在ARM平臺(tái)的移植之后,可以使用TSS所提供的API編寫應(yīng)用程序與TPM進(jìn)行交互。下面主要介紹一下獲取屬主身份、創(chuàng)建密鑰、對(duì)文件進(jìn)行加密和解密。

          屬主身份獲取

          首次使用TPM時(shí),需要先獲取屬主身份,主要用到函數(shù)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 屬主身份獲取

          密鑰創(chuàng)建

          對(duì)文件進(jìn)行加密時(shí)需要使用密鑰,這可以使用函數(shù)Tspi_Key_CreateKey()來創(chuàng)建,示例代碼如下:

          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! );

          創(chuàng)建密鑰之前/tmp目錄下的文件只有dir,創(chuàng)建成功后會(huì)打印信息,并生成密鑰文件UserKeyBlob.cer,如圖5所示:

          圖5 密鑰創(chuàng)建

          文件加密

          加密操作主要使用函數(shù)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,前面創(chuàng)建的密鑰所在的目錄為/tmp,則編譯后執(zhí)行命令時(shí)的格式為encryptFile -e /tmp/dir /tmp。

          加密之前,/tmp/dir目錄下只有test一個(gè)文件,使用cat命令查看該文件的內(nèi)容為:Hello,world!執(zhí)行加密命令之后,使用cat命令再次查看該文件的內(nèi)容,看到的是亂碼,而不是原始內(nèi)容,可見加密成功。加密后在test文件所在的目錄下會(huì)生成一個(gè)FileKey.cer文件。如圖6所示:

          圖6 文件加密

          文件解密

          解密操作使用函數(shù)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;

          }

          解密文件和加密文件使用的是同一個(gè)命令,但后綴參數(shù)不同,格式為encryptFile –d /tmp/dir /tmp。執(zhí)行解密操作后,使用cat命令查看加密的文件test,則可以看到原始的內(nèi)容,說明解密成功。此時(shí),test文件所在的目錄下加密時(shí)生成的FileKey.cer文件消失。如圖7所示:

          圖7 文件解密

          除了上面的幾個(gè)示例之外,還可以調(diào)用TSS的API編寫各種應(yīng)用程序?qū)PM進(jìn)行操作??傊灰o定了TPM芯片,掌握了TPM的基本知識(shí)和TSS的API,就可以寫出可信計(jì)算的應(yīng)用程序。

          結(jié)束語

          傳統(tǒng)的可信計(jì)算一般是基于PC平臺(tái)的,本文通過TSS在ARM平臺(tái)上的實(shí)現(xiàn),調(diào)用TSS的API編寫應(yīng)用程序與TPM進(jìn)行交互,對(duì)于實(shí)現(xiàn)可信計(jì)算在嵌入式ARM平臺(tái)上的應(yīng)用提供了重要的橋梁和支持。



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();