郝彥軍,包國琦
(1.廣東工業(yè)大學(xué) 計算機學(xué)院,廣東 廣州510006;2.廣東省公安廳,廣東 廣州510050)
近十多年來,可信計算技術(shù)一直是國內(nèi)外信息安全研究的熱點[1,2]。國際上在可信計算方面最具有權(quán)威性的是可信計算組織TCG[3],我國在可信計算研究方面成果顯著[4,5]。由于TCG 對增強計算環(huán)境安全的一般性,可信計算技術(shù)可被以用以增強幾乎所有信息系統(tǒng),如云計算環(huán)境[6-8]。TrouSerS[9]、IAIK、jTSS[10]和TPM-Emulator[11]等項目的開展,為可信計算平臺技術(shù)的研究和應(yīng)用做出了巨大貢獻。IBM 公司的TrouSerS 項目組是一個開源TSS項目組,相應(yīng)的成果Trousers是第一個被廣泛使用的基于Linux平臺TSS 軟件包。與開源TSS 相對的是開源軟件TPM 項目-TPM Emulator的開展,該項目的目標是實現(xiàn)一個可以在Unix環(huán)境下工作的軟件TPM 仿真器。
TSS和TPM 是TCG 核心所在,對TCG 的學(xué)習(xí)很大部分集中在對TSS和TPM 的學(xué)習(xí)。無論從可信計算的學(xué)習(xí)、應(yīng)用或可信計算的教學(xué)來看,一個可以在Windows環(huán)境下運行的TCG 學(xué)習(xí)軟件具有重要意義。基于上述想法以及TrouSerS、TPM-Emulator本身是由C 語言開發(fā)的這個特性,通過對它們進行Windows環(huán)境下的移植,然后增加必要的功能部件,本文設(shè)計開發(fā)了一套Windows環(huán)境下的TCG 學(xué)習(xí)軟件。
可信計算平臺學(xué)習(xí)系統(tǒng),應(yīng)該提供友好的操作和顯示界面,盡可能的展示可信計算平臺各個方面的細節(jié),特別是TPM 和TSS的實現(xiàn)執(zhí)行細節(jié)。為此可信計算平臺學(xué)習(xí)系統(tǒng)制定了以下3個主要設(shè)計目標:
(1)學(xué)習(xí)軟件要包含可信計算平臺的TSS和TPM 部分內(nèi)容。
(2)學(xué)習(xí)軟件要能可視化的顯示TPM 和TSS中的重要信息。
(3)學(xué)習(xí)軟件要能提供控制TCG 應(yīng)用程序執(zhí)行的能力。
根據(jù)系統(tǒng)設(shè)計目標并參照標準的TCG 應(yīng)用軟件體系結(jié)構(gòu)[12],可信計算平臺學(xué)習(xí)系統(tǒng)采用如圖1所示的類C/S軟件架構(gòu)。整個系統(tǒng)由4個相對獨立的模塊組成:
(1)TPM 模塊:修改移植后的TPM Emulator,單獨編譯成為一個DLL 模塊,作為系統(tǒng)的軟件TPM,共TSS應(yīng)用程序使用;
(2)TCS模塊:修改移植后的部分TrouSerS(TSS 中的TCS,TDDL部分),單獨編譯成為一個DLL 模塊,作為系統(tǒng)的TCS、TDDL,充當TCG 應(yīng)用程序和TPM 的通信橋梁,并負責(zé)管理多個TSS應(yīng)用程序線程對TPM 的串行化訪問以及其它TCG 核心服務(wù)功能;
(3)TCG 應(yīng)用程序模塊:TSS應(yīng)用程序(包含TSS的TSP部分)單獨作為一個DLL 模塊,用戶通過TSS應(yīng)用程序使用TPM 提供的功能;
(4)控制管理模塊:信息記錄器、控制臺和輸入輸出等組成控制管理部件。
圖1 系統(tǒng)體系結(jié)構(gòu)
整個系統(tǒng)以上述3個DLL模塊為基礎(chǔ),以控制管理部件為核心,相互協(xié)作完成系統(tǒng)功能實現(xiàn)系統(tǒng)設(shè)計目標。
為了更大限度的利用已有資源和增強系統(tǒng)擴展能力,系統(tǒng)各個主要部件之間的通信主要采用TCP/IP 協(xié)議。TCG 應(yīng)用程序(包含TSP)和TCS之間的通訊采用TCP/IP協(xié)議,可以實現(xiàn)TSP 對本地TCS或遠程TCS的調(diào)用。系統(tǒng)中的TPM 模塊是軟件實現(xiàn),TCS與TPM 之間的通信也利用TCP/IP 協(xié)議完成。同時,TSS 應(yīng)用程序、TCS 和TPM 內(nèi)部的信息收集代理與控制管理部件中的信息記錄器之間,也采用TCP/IP協(xié)議進行通信完成信息傳輸。
可信計算平臺學(xué)習(xí)系統(tǒng)軟件實現(xiàn)時,需要解決以下4個關(guān)鍵問題:①TSS和TPM 的信息收集;②系統(tǒng)運行過程控制;③系統(tǒng)模塊間通信與同步;④結(jié)果的可視化顯示。由于篇幅的原因,本文重點描述系統(tǒng)運行過程控制的原理與實現(xiàn)。
能夠較友好的控制系統(tǒng)運行,是學(xué)習(xí)軟件開發(fā)的目的之一。如同進行軟件開發(fā)時,軟件開發(fā)環(huán)境提供的 “單步運行”、“斷點”等調(diào)試功能,可以幫助開發(fā)人員快速查找錯誤、跟蹤軟件運行效果、提高軟件開發(fā)效率一樣,本學(xué)習(xí)系統(tǒng)提供TCG 應(yīng)用程序的 “單步運行”功能。使用者可以利用 “單步運行”功能,控制TCG 應(yīng)用程序執(zhí)行到指定位置后暫停下來。然后通過系統(tǒng)提供的各種數(shù)據(jù)觀察手段,觀察分析TCG 應(yīng)用程序執(zhí)行過程和執(zhí)行效果,從而深入了解TCG 內(nèi)部實現(xiàn)機制。
“斷點”指的是:TCG 應(yīng)用程序在執(zhí)行過程中可以被用戶中斷并暫停的位置。假設(shè)TCG 應(yīng)用程序過程中,可以在用戶的控制下,運行到運行時間軸A 點或B 點時暫停,則A 點或B點就是TCG 應(yīng)用程序的 “斷點”,如圖2所示。
圖2 TCG 應(yīng)用程序斷點和單步運行粒度關(guān)系
任意兩個相鄰斷點之間的程序片段稱為 “單步運行粒度”,也稱為TCG 應(yīng)用程序執(zhí)行的 “一步”。 “單步運行粒度”具體代碼長度與具體函數(shù)實現(xiàn)有關(guān)。TCG 應(yīng)用程序可以以單步運行粒度為單位進行 “單步運行”。單步運行粒度或斷點位置的選擇,直接影響用戶對TCG 應(yīng)用程序的控制能力和觀察能力??紤]到觀察的方便和實現(xiàn)上的簡單,本系統(tǒng)以模塊間函數(shù)調(diào)用接口點為斷點設(shè)置位置。斷點設(shè)置策略確定好后,根據(jù)圖2所示斷點和單步運行粒度的關(guān)系,單步運行粒度或一步操作內(nèi)容也隨之確定。
在選定好斷點位置后,系統(tǒng)在 “單步”模式運行時,每當TCG 應(yīng)用程序運行到斷點位置,就必須暫停下來等待用戶的輸入,然后再依據(jù)用戶的不同命令執(zhí)行不同的操作。
對于單線程運行的系統(tǒng)來說,應(yīng)按照圖3所示的方式,串行的 “單步運行”TCG 應(yīng)用程序。
圖3 串行單步執(zhí)行
由圖1所示的系統(tǒng)體系結(jié)構(gòu)可知,可信計算平臺學(xué)習(xí)系統(tǒng)屬于多線程系統(tǒng)。接收用戶控制命令的操作和TCG 應(yīng)用程序分別屬于不同的工作線程。多線程系統(tǒng)需要按照圖4所示的方式, “單步運行”TCG 應(yīng)用程序。單步運行過程描述如下:
(1)用戶通過控制界面啟動單步運行;
(2)在分叉1處:
1)系統(tǒng)控制界面線程:等待TCG 應(yīng)用程序執(zhí)行一步后的暫停;
2)TCG 應(yīng)用程序線程:開始單步執(zhí)行并執(zhí)行一步單步操作;
(3)在分叉2處:
1)系統(tǒng)控制界面線程:得到TCG 應(yīng)用程序執(zhí)行完一步后暫停的通知;
2)TCG 應(yīng)用程序線程:等待用戶發(fā)出執(zhí)行下一步命令;
(4)在連接1處,系統(tǒng)控制界面線程:
1)用戶這時可以進行觀察數(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é)束整個單步運行操作;
圖4 TCG 應(yīng)用程序并發(fā)單步執(zhí)行
可信計算平臺學(xué)習(xí)系統(tǒng)具體實現(xiàn)時,系統(tǒng)控制線程作為學(xué)習(xí)系統(tǒng)的主線程運行。然后系統(tǒng)控制線程創(chuàng)建3個線程,分別運行組成TCG 應(yīng)用程序的APP+TSP模塊、TCS模塊和TPM 模塊。TCG 應(yīng)用程序中的3 個模塊線程都獨立地按照圖4所示的方式與系統(tǒng)控制線程協(xié)作,共同實現(xiàn)TCG 應(yīng)用程序的 “單步運行”功能。
當系統(tǒng)中存在多線程時,必然涉及到多線程間的并發(fā)控制。并發(fā)控制涉及兩個概念:互斥和同步?;コ馐侵付鄠€進程對共享資源進行訪問互時,某一時刻只能有一個進程可以訪問共享資源。多個進程間通過交換消息協(xié)調(diào)它們的活動稱為同步,同步是實現(xiàn)多個進程按照一定事件順序執(zhí)行的有力工具[13]。本學(xué)習(xí)系統(tǒng)中,與單步運行相關(guān)的并發(fā)控制只涉及多線程的同步問題:即圖4中并發(fā)執(zhí)行的多線程中的諸多操作,如何實現(xiàn)圖3所示的串行執(zhí)行效果。
由圖4可以看出:在連接1處,系統(tǒng)控制線程需要等待TCG 應(yīng)用程序完成單步操作;在連接2處,TCG 應(yīng)用程序需要等待系統(tǒng)控制線程發(fā)出 “下一步”指令。3個分叉則都需要發(fā)送相應(yīng)的信號,這種同步屬于事件同步類型。在分析Windows操作系統(tǒng)提供的諸多同步對象后,本文選擇“事件對象”(Event Object)并配合“等待”(WaitFroSingleObject)函數(shù),作為學(xué)習(xí)系統(tǒng)實現(xiàn)同步的工具[14]。雖然圖4中有3個分叉,但系統(tǒng)具體實現(xiàn)時只需要一個同步事件對象,原因如下:
(1)在分叉1處,系統(tǒng)控制線程可以采用創(chuàng)建TCG 應(yīng)用程序進程,并設(shè)置相應(yīng)參數(shù)方式完成事件通知。
(2)一般情況下,用戶會在啟動TCG 應(yīng)用程序單步運行功能后,自然的等待TCG 應(yīng)用程序執(zhí)行,并觀察TCG應(yīng)用程序給出的單步執(zhí)行完畢信息。TCG 應(yīng)用程序通過顯式的提示信息通知用戶單步執(zhí)行完畢。因此在分叉2 處,TCG 應(yīng)用程序不需要使用操作系統(tǒng)的同步對象,可以采用直觀的信息顯示方式完成事件通知。
(3)分叉3處和連接2處的同步,采用事件對象和等待函數(shù)配合實現(xiàn)。表1給出利用事件對象和等待函數(shù)實現(xiàn)單步運行同步操作的偽代碼片段,解釋如下:
1)用戶發(fā)出單步運行指令后,系統(tǒng)控制線程通過調(diào)用StartStepRun創(chuàng)建同步事件對象EventA,并創(chuàng)建可單步運行的TCG 應(yīng)用程序線程。
2)TCG 應(yīng)用程序線程運行并執(zhí)行一步單步操作;在運行一完步單步操作后顯示單步操作完成提示信息,然后獲得(OpenEvent)同步事件對象EventA,并等待(Wait-ForSingleObject)用戶 “下一步”命令事件的發(fā)生。
3)用戶在看到TCG 應(yīng)用程序給出的 “單步操作操作完成”提示信息后,可以按照自己的意愿進行系統(tǒng)允許的其它操作。必要時發(fā)送 “下一步”指令。
4)系統(tǒng)控制線程接收到用戶 “下一步”指令后,通過調(diào)用NextStep設(shè)置(SetEvent)同步事件對象EventA,通知TCG 應(yīng)用程序線程,使TCG 應(yīng)用程序繼續(xù)運行并在下一個斷點處暫停。
表1 事件對象和等待函數(shù)實現(xiàn)單步運行偽代碼片段
為了說明該學(xué)習(xí)軟件的實際運行效果,本節(jié)按照操作類別給出兩類運行效果,并加以說明。
圖5展示了系統(tǒng)在執(zhí)行完讀取TPM EK 公鑰信息命令后運行效果。系統(tǒng)界面分為4個大的區(qū)域:
(1)左上角是內(nèi)嵌TCG 應(yīng)用程序管理區(qū)。用戶可以在這里找到并執(zhí)行TSS應(yīng)用例程。
(2)左下角是模塊調(diào)用信息區(qū)。以樹形方式按照函數(shù)調(diào)用順序,顯示TCG 應(yīng)用程序各個調(diào)用模塊的詳細信息。
(3)右下角是模塊調(diào)用可視化顯示區(qū)。系統(tǒng)采用模仿UML序列圖方式,可視化的顯示TCG 應(yīng)用程序多個軟件層次間函數(shù)調(diào)用關(guān)系。
(4)右上角是信息顯示區(qū)域。該區(qū)域在不同情況下有不同用途,圖5 中顯示的是查看選中調(diào)用節(jié)點代碼時的情況。
圖5 模塊調(diào)用可視化區(qū)選中節(jié)點并顯示源代碼
界面左下角模塊調(diào)用信息區(qū)中所列的模塊調(diào)用節(jié)點,就是相應(yīng)TCG 應(yīng)用程序可能的斷點位置。用戶開啟單步運行功能后,系統(tǒng)在執(zhí)行TCG 應(yīng)用程序時,默認情況下會在執(zhí)行完 “一步”后暫停,并在信息顯示區(qū)域顯示提示單步執(zhí)行信息,如圖6所示。
圖6 系統(tǒng)在單步運行模式下運行效果
用戶可以在TCG 應(yīng)用程序單步暫停期間執(zhí)行系統(tǒng)允許的各種操作,比如查看TPM 內(nèi)部數(shù)據(jù)。圖7是系統(tǒng)提供的TPM 內(nèi)部數(shù)據(jù)查看器。用戶通過該查看器可以查看TCG應(yīng)用程序當前狀態(tài)下TPM 內(nèi)部數(shù)據(jù)。由于讀取TPM EK公鑰信息不使用授權(quán)協(xié)議,所以圖7中所示TPM 內(nèi)部Sessions的信息仍保持為TPM 啟動時的初始狀態(tài)。
圖7 TPM 內(nèi)部數(shù)據(jù)查看窗口
可信計算平臺學(xué)習(xí)系統(tǒng),通過提供友好的控制和顯示界面,幫助使用者詳盡的了解整個TCG 應(yīng)用程序的執(zhí)行過程。特別,本系統(tǒng)利用開源項目TrouserS和TPM Emulator提供的TSS和TPM 實現(xiàn)源代碼,可以讓用戶的觀察到TSS和TPM 具體實現(xiàn)。TCG 應(yīng)用程序的 “單步運行”功能是本系統(tǒng)的特色之一。本文通過定義 “斷點”和 “單步運行粒度”給出 “單步”原理,利用Windows系統(tǒng)提供的線程間同步對象--事件對象實現(xiàn)TCG 應(yīng)用程序的 “單步運行”。系統(tǒng)實際運行效果表明,該系統(tǒng)的開發(fā)對使用者學(xué)習(xí)了解TCG 有一定意義。當然該系統(tǒng)還有一定的不足:比如提供的自由度還不夠豐富,使用者還不能任意的更改TCG應(yīng)用程序執(zhí)行過程中的內(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).[沈昌祥,張煥國,王懷民,等.可信計算的研究與發(fā)展 [J].中國科學(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). [張煥國,趙波.可信計算 [M].武漢:武漢大學(xué)出版社,2011.]
[5]State Cryptography Administration.Functionality and interface specification of cryptographic support platform for trusted computing[S].2007 (in Chinese).[國家密碼管理局.可信計算密碼支撐平臺功能與接口規(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).[馮登國,張敏,張妍,等.云計算安全研究 [J].軟件學(xué)報,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.