基于嵌入式ARM平臺的可信計算軟件棧的設計與實(shí)現
創(chuàng )建密鑰之前/tmp目錄下的文件只有dir,創(chuàng )建成功后會(huì )打印信息,并生成密鑰文件UserKeyBlob.cer,如圖5所示:
圖5 密鑰創(chuàng )建
文件加密
加密操作主要使用函數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,則編譯后執行命令時(shí)的格式為encryptFile -e /tmp/dir /tmp。
加密之前,/tmp/dir目錄下只有test一個(gè)文件,使用cat命令查看該文件的內容為:Hello,world!執行加密命令之后,使用cat命令再次查看該文件的內容,看到的是亂碼,而不是原始內容,可見(jiàn)加密成功。加密后在test文件所在的目錄下會(huì )生成一個(gè)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;
}
解密文件和加密文件使用的是同一個(gè)命令,但后綴參數不同,格式為encryptFile –d /tmp/dir /tmp。執行解密操作后,使用cat命令查看加密的文件test,則可以看到原始的內容,說(shuō)明解密成功。此時(shí),test文件所在的目錄下加密時(shí)生成的FileKey.cer文件消失。如圖7所示:
圖7 文件解密
除了上面的幾個(gè)示例之外,還可以調用TSS的API編寫(xiě)各種應用程序對TPM進(jìn)行操作??傊?,只要給定了TPM芯片,掌握了TPM的基本知識和TSS的API,就可以寫(xiě)出可信計算的應用程序。
結束語(yǔ)
傳統的可信計算一般是基于PC平臺的,本文通過(guò)可信計算軟件棧TSS在ARM平臺上的實(shí)現,調用TSS的API編寫(xiě)應用程序與TPM進(jìn)行交互,對于實(shí)現可信計算在嵌入式ARM平臺上的應用提供了重要的橋梁和支持。
評論