新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于嵌入式ARM平臺的可信計算軟件棧的設計與實現

        基于嵌入式ARM平臺的可信計算軟件棧的設計與實現

        作者: 時間:2013-10-15 來源:網絡 收藏

        交叉編譯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在的移植之后,可以使用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! ");



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 仙居县| 弥渡县| 布尔津县| 正蓝旗| 浑源县| 嘉黎县| 抚州市| 巴塘县| 祁连县| 洪洞县| 象山县| 出国| 河西区| 北辰区| 福海县| 剑阁县| 富源县| 平潭县| 朝阳县| 宣化县| 墨玉县| 菏泽市| 永宁县| 商水县| 寿阳县| 秭归县| 综艺| 德州市| 台北市| 尤溪县| 陆川县| 丹棱县| 民勤县| 台安县| 德钦县| 子长县| 武鸣县| 沂南县| 阜新市| 崇礼县| 时尚|