郝彥軍,包國(guó)琦
(1.廣東工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院,廣東 廣州510006;2.廣東省公安廳,廣東 廣州510050)
近十多年來(lái),可信計(jì)算技術(shù)一直是國(guó)內(nèi)外信息安全研究的熱點(diǎn)[1,2]。國(guó)際上在可信計(jì)算方面最具有權(quán)威性的是可信計(jì)算組織TCG[3],我國(guó)在可信計(jì)算研究方面成果顯著[4,5]。由于TCG 對(duì)增強(qiáng)計(jì)算環(huán)境安全的一般性,可信計(jì)算技術(shù)可被以用以增強(qiáng)幾乎所有信息系統(tǒng),如云計(jì)算環(huán)境[6-8]。TrouSerS[9]、IAIK、jTSS[10]和TPM-Emulator[11]等項(xiàng)目的開(kāi)展,為可信計(jì)算平臺(tái)技術(shù)的研究和應(yīng)用做出了巨大貢獻(xiàn)。IBM 公司的TrouSerS 項(xiàng)目組是一個(gè)開(kāi)源TSS項(xiàng)目組,相應(yīng)的成果Trousers是第一個(gè)被廣泛使用的基于Linux平臺(tái)TSS 軟件包。與開(kāi)源TSS 相對(duì)的是開(kāi)源軟件TPM 項(xiàng)目-TPM Emulator的開(kāi)展,該項(xiàng)目的目標(biāo)是實(shí)現(xiàn)一個(gè)可以在Unix環(huán)境下工作的軟件TPM 仿真器。
TSS和TPM 是TCG 核心所在,對(duì)TCG 的學(xué)習(xí)很大部分集中在對(duì)TSS和TPM 的學(xué)習(xí)。無(wú)論從可信計(jì)算的學(xué)習(xí)、應(yīng)用或可信計(jì)算的教學(xué)來(lái)看,一個(gè)可以在Windows環(huán)境下運(yùn)行的TCG 學(xué)習(xí)軟件具有重要意義?;谏鲜鱿敕ㄒ约癟rouSerS、TPM-Emulator本身是由C 語(yǔ)言開(kāi)發(fā)的這個(gè)特性,通過(guò)對(duì)它們進(jìn)行Windows環(huán)境下的移植,然后增加必要的功能部件,本文設(shè)計(jì)開(kāi)發(fā)了一套Windows環(huán)境下的TCG 學(xué)習(xí)軟件。
可信計(jì)算平臺(tái)學(xué)習(xí)系統(tǒng),應(yīng)該提供友好的操作和顯示界面,盡可能的展示可信計(jì)算平臺(tái)各個(gè)方面的細(xì)節(jié),特別是TPM 和TSS的實(shí)現(xiàn)執(zhí)行細(xì)節(jié)。為此可信計(jì)算平臺(tái)學(xué)習(xí)系統(tǒng)制定了以下3個(gè)主要設(shè)計(jì)目標(biāo):
(1)學(xué)習(xí)軟件要包含可信計(jì)算平臺(tái)的TSS和TPM 部分內(nèi)容。
(2)學(xué)習(xí)軟件要能可視化的顯示TPM 和TSS中的重要信息。
(3)學(xué)習(xí)軟件要能提供控制TCG 應(yīng)用程序執(zhí)行的能力。
根據(jù)系統(tǒng)設(shè)計(jì)目標(biāo)并參照標(biāo)準(zhǔn)的TCG 應(yīng)用軟件體系結(jié)構(gòu)[12],可信計(jì)算平臺(tái)學(xué)習(xí)系統(tǒng)采用如圖1所示的類C/S軟件架構(gòu)。整個(gè)系統(tǒng)由4個(gè)相對(duì)獨(dú)立的模塊組成:
(1)TPM 模塊:修改移植后的TPM Emulator,單獨(dú)編譯成為一個(gè)DLL 模塊,作為系統(tǒng)的軟件TPM,共TSS應(yīng)用程序使用;
(2)TCS模塊:修改移植后的部分TrouSerS(TSS 中的TCS,TDDL部分),單獨(dú)編譯成為一個(gè)DLL 模塊,作為系統(tǒng)的TCS、TDDL,充當(dāng)TCG 應(yīng)用程序和TPM 的通信橋梁,并負(fù)責(zé)管理多個(gè)TSS應(yīng)用程序線程對(duì)TPM 的串行化訪問(wèn)以及其它TCG 核心服務(wù)功能;
(3)TCG 應(yīng)用程序模塊:TSS應(yīng)用程序(包含TSS的TSP部分)單獨(dú)作為一個(gè)DLL 模塊,用戶通過(guò)TSS應(yīng)用程序使用TPM 提供的功能;
(4)控制管理模塊:信息記錄器、控制臺(tái)和輸入輸出等組成控制管理部件。
圖1 系統(tǒng)體系結(jié)構(gòu)
整個(gè)系統(tǒng)以上述3個(gè)DLL模塊為基礎(chǔ),以控制管理部件為核心,相互協(xié)作完成系統(tǒng)功能實(shí)現(xiàn)系統(tǒng)設(shè)計(jì)目標(biāo)。
為了更大限度的利用已有資源和增強(qiáng)系統(tǒng)擴(kuò)展能力,系統(tǒng)各個(gè)主要部件之間的通信主要采用TCP/IP 協(xié)議。TCG 應(yīng)用程序(包含TSP)和TCS之間的通訊采用TCP/IP協(xié)議,可以實(shí)現(xiàn)TSP 對(duì)本地TCS或遠(yuǎn)程TCS的調(diào)用。系統(tǒng)中的TPM 模塊是軟件實(shí)現(xiàn),TCS與TPM 之間的通信也利用TCP/IP 協(xié)議完成。同時(shí),TSS 應(yīng)用程序、TCS 和TPM 內(nèi)部的信息收集代理與控制管理部件中的信息記錄器之間,也采用TCP/IP協(xié)議進(jìn)行通信完成信息傳輸。
可信計(jì)算平臺(tái)學(xué)習(xí)系統(tǒng)軟件實(shí)現(xiàn)時(shí),需要解決以下4個(gè)關(guān)鍵問(wèn)題:①TSS和TPM 的信息收集;②系統(tǒng)運(yùn)行過(guò)程控制;③系統(tǒng)模塊間通信與同步;④結(jié)果的可視化顯示。由于篇幅的原因,本文重點(diǎn)描述系統(tǒng)運(yùn)行過(guò)程控制的原理與實(shí)現(xiàn)。
能夠較友好的控制系統(tǒng)運(yùn)行,是學(xué)習(xí)軟件開(kāi)發(fā)的目的之一。如同進(jìn)行軟件開(kāi)發(fā)時(shí),軟件開(kāi)發(fā)環(huán)境提供的 “單步運(yùn)行”、“斷點(diǎn)”等調(diào)試功能,可以幫助開(kāi)發(fā)人員快速查找錯(cuò)誤、跟蹤軟件運(yùn)行效果、提高軟件開(kāi)發(fā)效率一樣,本學(xué)習(xí)系統(tǒng)提供TCG 應(yīng)用程序的 “單步運(yùn)行”功能。使用者可以利用 “單步運(yùn)行”功能,控制TCG 應(yīng)用程序執(zhí)行到指定位置后暫停下來(lái)。然后通過(guò)系統(tǒng)提供的各種數(shù)據(jù)觀察手段,觀察分析TCG 應(yīng)用程序執(zhí)行過(guò)程和執(zhí)行效果,從而深入了解TCG 內(nèi)部實(shí)現(xiàn)機(jī)制。
“斷點(diǎn)”指的是:TCG 應(yīng)用程序在執(zhí)行過(guò)程中可以被用戶中斷并暫停的位置。假設(shè)TCG 應(yīng)用程序過(guò)程中,可以在用戶的控制下,運(yùn)行到運(yùn)行時(shí)間軸A 點(diǎn)或B 點(diǎn)時(shí)暫停,則A 點(diǎn)或B點(diǎn)就是TCG 應(yīng)用程序的 “斷點(diǎn)”,如圖2所示。
圖2 TCG 應(yīng)用程序斷點(diǎn)和單步運(yùn)行粒度關(guān)系
任意兩個(gè)相鄰斷點(diǎn)之間的程序片段稱為 “單步運(yùn)行粒度”,也稱為TCG 應(yīng)用程序執(zhí)行的 “一步”。 “單步運(yùn)行粒度”具體代碼長(zhǎng)度與具體函數(shù)實(shí)現(xiàn)有關(guān)。TCG 應(yīng)用程序可以以單步運(yùn)行粒度為單位進(jìn)行 “單步運(yùn)行”。單步運(yùn)行粒度或斷點(diǎn)位置的選擇,直接影響用戶對(duì)TCG 應(yīng)用程序的控制能力和觀察能力??紤]到觀察的方便和實(shí)現(xiàn)上的簡(jiǎn)單,本系統(tǒng)以模塊間函數(shù)調(diào)用接口點(diǎn)為斷點(diǎn)設(shè)置位置。斷點(diǎn)設(shè)置策略確定好后,根據(jù)圖2所示斷點(diǎn)和單步運(yùn)行粒度的關(guān)系,單步運(yùn)行粒度或一步操作內(nèi)容也隨之確定。
在選定好斷點(diǎn)位置后,系統(tǒng)在 “單步”模式運(yùn)行時(shí),每當(dāng)TCG 應(yīng)用程序運(yùn)行到斷點(diǎn)位置,就必須暫停下來(lái)等待用戶的輸入,然后再依據(jù)用戶的不同命令執(zhí)行不同的操作。
對(duì)于單線程運(yùn)行的系統(tǒng)來(lái)說(shuō),應(yīng)按照?qǐng)D3所示的方式,串行的 “單步運(yùn)行”TCG 應(yīng)用程序。
圖3 串行單步執(zhí)行
由圖1所示的系統(tǒng)體系結(jié)構(gòu)可知,可信計(jì)算平臺(tái)學(xué)習(xí)系統(tǒng)屬于多線程系統(tǒng)。接收用戶控制命令的操作和TCG 應(yīng)用程序分別屬于不同的工作線程。多線程系統(tǒng)需要按照?qǐng)D4所示的方式, “單步運(yùn)行”TCG 應(yīng)用程序。單步運(yùn)行過(guò)程描述如下:
(1)用戶通過(guò)控制界面啟動(dòng)單步運(yùn)行;
(2)在分叉1處:
1)系統(tǒng)控制界面線程:等待TCG 應(yīng)用程序執(zhí)行一步后的暫停;
2)TCG 應(yīng)用程序線程:開(kāi)始單步執(zhí)行并執(zhí)行一步單步操作;
(3)在分叉2處:
1)系統(tǒng)控制界面線程:得到TCG 應(yīng)用程序執(zhí)行完一步后暫停的通知;
2)TCG 應(yīng)用程序線程:等待用戶發(fā)出執(zhí)行下一步命令;
(4)在連接1處,系統(tǒng)控制界面線程:
1)用戶這時(shí)可以進(jìn)行觀察數(shù)據(jù)等操作;
2)發(fā)出執(zhí)行下一步操作命令給TCG 應(yīng)用程序;
(5)在分叉3處:系統(tǒng)控制界面線程跳轉(zhuǎn)到(2)的1)。
(6)在連接2處:TCG 應(yīng)用程序線程判斷是否繼續(xù)單步執(zhí)行:
1)如果繼續(xù)單步執(zhí)行,則跳轉(zhuǎn)到(2)的2);
2)否則結(jié)束整個(gè)單步運(yùn)行操作;
圖4 TCG 應(yīng)用程序并發(fā)單步執(zhí)行
可信計(jì)算平臺(tái)學(xué)習(xí)系統(tǒng)具體實(shí)現(xiàn)時(shí),系統(tǒng)控制線程作為學(xué)習(xí)系統(tǒng)的主線程運(yùn)行。然后系統(tǒng)控制線程創(chuàng)建3個(gè)線程,分別運(yùn)行組成TCG 應(yīng)用程序的APP+TSP模塊、TCS模塊和TPM 模塊。TCG 應(yīng)用程序中的3 個(gè)模塊線程都獨(dú)立地按照?qǐng)D4所示的方式與系統(tǒng)控制線程協(xié)作,共同實(shí)現(xiàn)TCG 應(yīng)用程序的 “單步運(yùn)行”功能。
當(dāng)系統(tǒng)中存在多線程時(shí),必然涉及到多線程間的并發(fā)控制。并發(fā)控制涉及兩個(gè)概念:互斥和同步?;コ馐侵付鄠€(gè)進(jìn)程對(duì)共享資源進(jìn)行訪問(wèn)互時(shí),某一時(shí)刻只能有一個(gè)進(jìn)程可以訪問(wèn)共享資源。多個(gè)進(jìn)程間通過(guò)交換消息協(xié)調(diào)它們的活動(dòng)稱為同步,同步是實(shí)現(xiàn)多個(gè)進(jìn)程按照一定事件順序執(zhí)行的有力工具[13]。本學(xué)習(xí)系統(tǒng)中,與單步運(yùn)行相關(guān)的并發(fā)控制只涉及多線程的同步問(wèn)題:即圖4中并發(fā)執(zhí)行的多線程中的諸多操作,如何實(shí)現(xiàn)圖3所示的串行執(zhí)行效果。
由圖4可以看出:在連接1處,系統(tǒng)控制線程需要等待TCG 應(yīng)用程序完成單步操作;在連接2處,TCG 應(yīng)用程序需要等待系統(tǒng)控制線程發(fā)出 “下一步”指令。3個(gè)分叉則都需要發(fā)送相應(yīng)的信號(hào),這種同步屬于事件同步類型。在分析Windows操作系統(tǒng)提供的諸多同步對(duì)象后,本文選擇“事件對(duì)象”(Event Object)并配合“等待”(WaitFroSingleObject)函數(shù),作為學(xué)習(xí)系統(tǒng)實(shí)現(xiàn)同步的工具[14]。雖然圖4中有3個(gè)分叉,但系統(tǒng)具體實(shí)現(xiàn)時(shí)只需要一個(gè)同步事件對(duì)象,原因如下:
(1)在分叉1處,系統(tǒng)控制線程可以采用創(chuàng)建TCG 應(yīng)用程序進(jìn)程,并設(shè)置相應(yīng)參數(shù)方式完成事件通知。
(2)一般情況下,用戶會(huì)在啟動(dòng)TCG 應(yīng)用程序單步運(yùn)行功能后,自然的等待TCG 應(yīng)用程序執(zhí)行,并觀察TCG應(yīng)用程序給出的單步執(zhí)行完畢信息。TCG 應(yīng)用程序通過(guò)顯式的提示信息通知用戶單步執(zhí)行完畢。因此在分叉2 處,TCG 應(yīng)用程序不需要使用操作系統(tǒng)的同步對(duì)象,可以采用直觀的信息顯示方式完成事件通知。
(3)分叉3處和連接2處的同步,采用事件對(duì)象和等待函數(shù)配合實(shí)現(xiàn)。表1給出利用事件對(duì)象和等待函數(shù)實(shí)現(xiàn)單步運(yùn)行同步操作的偽代碼片段,解釋如下:
1)用戶發(fā)出單步運(yùn)行指令后,系統(tǒng)控制線程通過(guò)調(diào)用StartStepRun創(chuàng)建同步事件對(duì)象EventA,并創(chuàng)建可單步運(yùn)行的TCG 應(yīng)用程序線程。
2)TCG 應(yīng)用程序線程運(yùn)行并執(zhí)行一步單步操作;在運(yùn)行一完步單步操作后顯示單步操作完成提示信息,然后獲得(OpenEvent)同步事件對(duì)象EventA,并等待(Wait-ForSingleObject)用戶 “下一步”命令事件的發(fā)生。
3)用戶在看到TCG 應(yīng)用程序給出的 “單步操作操作完成”提示信息后,可以按照自己的意愿進(jìn)行系統(tǒng)允許的其它操作。必要時(shí)發(fā)送 “下一步”指令。
4)系統(tǒng)控制線程接收到用戶 “下一步”指令后,通過(guò)調(diào)用NextStep設(shè)置(SetEvent)同步事件對(duì)象EventA,通知TCG 應(yīng)用程序線程,使TCG 應(yīng)用程序繼續(xù)運(yùn)行并在下一個(gè)斷點(diǎn)處暫停。
表1 事件對(duì)象和等待函數(shù)實(shí)現(xiàn)單步運(yùn)行偽代碼片段
為了說(shuō)明該學(xué)習(xí)軟件的實(shí)際運(yùn)行效果,本節(jié)按照操作類別給出兩類運(yùn)行效果,并加以說(shuō)明。
圖5展示了系統(tǒng)在執(zhí)行完讀取TPM EK 公鑰信息命令后運(yùn)行效果。系統(tǒng)界面分為4個(gè)大的區(qū)域:
(1)左上角是內(nèi)嵌TCG 應(yīng)用程序管理區(qū)。用戶可以在這里找到并執(zhí)行TSS應(yīng)用例程。
(2)左下角是模塊調(diào)用信息區(qū)。以樹(shù)形方式按照函數(shù)調(diào)用順序,顯示TCG 應(yīng)用程序各個(gè)調(diào)用模塊的詳細(xì)信息。
(3)右下角是模塊調(diào)用可視化顯示區(qū)。系統(tǒng)采用模仿UML序列圖方式,可視化的顯示TCG 應(yīng)用程序多個(gè)軟件層次間函數(shù)調(diào)用關(guān)系。
(4)右上角是信息顯示區(qū)域。該區(qū)域在不同情況下有不同用途,圖5 中顯示的是查看選中調(diào)用節(jié)點(diǎn)代碼時(shí)的情況。
圖5 模塊調(diào)用可視化區(qū)選中節(jié)點(diǎn)并顯示源代碼
界面左下角模塊調(diào)用信息區(qū)中所列的模塊調(diào)用節(jié)點(diǎn),就是相應(yīng)TCG 應(yīng)用程序可能的斷點(diǎn)位置。用戶開(kāi)啟單步運(yùn)行功能后,系統(tǒng)在執(zhí)行TCG 應(yīng)用程序時(shí),默認(rèn)情況下會(huì)在執(zhí)行完 “一步”后暫停,并在信息顯示區(qū)域顯示提示單步執(zhí)行信息,如圖6所示。
圖6 系統(tǒng)在單步運(yùn)行模式下運(yùn)行效果
用戶可以在TCG 應(yīng)用程序單步暫停期間執(zhí)行系統(tǒng)允許的各種操作,比如查看TPM 內(nèi)部數(shù)據(jù)。圖7是系統(tǒng)提供的TPM 內(nèi)部數(shù)據(jù)查看器。用戶通過(guò)該查看器可以查看TCG應(yīng)用程序當(dāng)前狀態(tài)下TPM 內(nèi)部數(shù)據(jù)。由于讀取TPM EK公鑰信息不使用授權(quán)協(xié)議,所以圖7中所示TPM 內(nèi)部Sessions的信息仍保持為TPM 啟動(dòng)時(shí)的初始狀態(tài)。
圖7 TPM 內(nèi)部數(shù)據(jù)查看窗口
可信計(jì)算平臺(tái)學(xué)習(xí)系統(tǒng),通過(guò)提供友好的控制和顯示界面,幫助使用者詳盡的了解整個(gè)TCG 應(yīng)用程序的執(zhí)行過(guò)程。特別,本系統(tǒng)利用開(kāi)源項(xiàng)目TrouserS和TPM Emulator提供的TSS和TPM 實(shí)現(xiàn)源代碼,可以讓用戶的觀察到TSS和TPM 具體實(shí)現(xiàn)。TCG 應(yīng)用程序的 “單步運(yùn)行”功能是本系統(tǒng)的特色之一。本文通過(guò)定義 “斷點(diǎn)”和 “單步運(yùn)行粒度”給出 “單步”原理,利用Windows系統(tǒng)提供的線程間同步對(duì)象--事件對(duì)象實(shí)現(xiàn)TCG 應(yīng)用程序的 “單步運(yùn)行”。系統(tǒng)實(shí)際運(yùn)行效果表明,該系統(tǒng)的開(kāi)發(fā)對(duì)使用者學(xué)習(xí)了解TCG 有一定意義。當(dāng)然該系統(tǒng)還有一定的不足:比如提供的自由度還不夠豐富,使用者還不能任意的更改TCG應(yīng)用程序執(zhí)行過(guò)程中的內(nèi)容。如何為用戶提供更易于操作的界面和顯示更加豐富的功能是我們后期的工作。
[1]SHEN Changxiang,ZHANG Huanguo,WANG Huaimin,et al.The research and development of trusted computing [J].Science China:Information Science,2010 (2):139-166 (in Chinese).[沈昌祥,張煥國(guó),王懷民,等.可信計(jì)算的研究與發(fā)展 [J].中國(guó)科學(xué):信息科學(xué),2010 (2):139-166.]
[2]David Challener,Kent Yoder.A practical guide to trusted computing [M].IBM PRess,2008.
[3]Trusted computing group[EB/OL].[2013-06-10].http://www.trustedcomputinggroup.org/.
[4]ZHANG Huanguo,ZHAO Bo.Trusted computing [M].Wuhan:Wuhan University Press,2011 (in Chinese). [張煥國(guó),趙波.可信計(jì)算 [M].武漢:武漢大學(xué)出版社,2011.]
[5]State Cryptography Administration.Functionality and interface specification of cryptographic support platform for trusted computing[S].2007 (in Chinese).[國(guó)家密碼管理局.可信計(jì)算密碼支撐平臺(tái)功能與接口規(guī)范 [S].2007.]
[6]Ryan K L Ko,Peter Jagadpramana,Miranda Mowbray.Trust cloud:A framework for accountability and trust in cloud computing[EB/OL].[2013-06-10].http://www.hpl.hp.com/techreports/2011/HPL-2011-38.pdf.2011.
[7]FENG Dengguo,ZHANG Min,ZHANG Yan,et al.Study on cloud computing security [J].Journal of Software,2011,22 (1):71-83 (in Chinese).[馮登國(guó),張敏,張妍,等.云計(jì)算安全研究 [J].軟件學(xué)報(bào),2011,22 (1):71-83.]
[8]TCG virtualized trusted platform architecture specification[EB/OL].[2013-06-10].http://www.trustedcomputinggroup.org/.
[9]An open source TCG Software Stack.TrouserS[EB/OL].[2013-06-10].http://trousers.sourceforge.net/.
[10]Trusted computing for the Java platform[EB/OL].[2013-06-10].http://trustedjava.sourceforge.net/.
[11]Software-based TPM Emulator for Unix.TPM emulator[EB/OL].[2013-06-10.]http://tpm-emulator.berlios.de/.
[12]TCG Specification Architecture Overview 1.4,2,Aug,2007,page:32,figure 4:i.[EB/OL].[2013-06-10].http://www.trustedcomputinggroup.org/.
[13]Stallings,William.Operating systems:Internals and design principles[M].7th ed.Pearson Education,Inc,Publishing as Prentice Hall,2012:77.
[14]Event Objects[EB/OL].[2013-06-15].http://msdn.microsoft.com/en-us/library/ms682655(v=vs.85).aspx.