郝彦军,包国琦
(1.广东工业大学 计算机学院,广东 广州510006;2.广东省公安厅,广东 广州510050)
近十多年来,可信计算技术一直是国内外信息安全研究的热点[1,2]。国际上在可信计算方面最具有权威性的是可信计算组织TCG[3],我国在可信计算研究方面成果显著[4,5]。由于TCG 对增强计算环境安全的一般性,可信计算技术可被以用以增强几乎所有信息系统,如云计算环境[6-8]。TrouSerS[9]、IAIK、jTSS[10]和TPM-Emulator[11]等项目的开展,为可信计算平台技术的研究和应用做出了巨大贡献。IBM 公司的TrouSerS 项目组是一个开源TSS项目组,相应的成果Trousers是第一个被广泛使用的基于Linux平台TSS 软件包。与开源TSS 相对的是开源软件TPM 项目-TPM Emulator的开展,该项目的目标是实现一个可以在Unix环境下工作的软件TPM 仿真器。
TSS和TPM 是TCG 核心所在,对TCG 的学习很大部分集中在对TSS和TPM 的学习。无论从可信计算的学习、应用或可信计算的教学来看,一个可以在Windows环境下运行的TCG 学习软件具有重要意义。基于上述想法以及TrouSerS、TPM-Emulator本身是由C 语言开发的这个特性,通过对它们进行Windows环境下的移植,然后增加必要的功能部件,本文设计开发了一套Windows环境下的TCG 学习软件。
可信计算平台学习系统,应该提供友好的操作和显示界面,尽可能的展示可信计算平台各个方面的细节,特别是TPM 和TSS的实现执行细节。为此可信计算平台学习系统制定了以下3个主要设计目标:
(1)学习软件要包含可信计算平台的TSS和TPM 部分内容。
(2)学习软件要能可视化的显示TPM 和TSS中的重要信息。
(3)学习软件要能提供控制TCG 应用程序执行的能力。
根据系统设计目标并参照标准的TCG 应用软件体系结构[12],可信计算平台学习系统采用如图1所示的类C/S软件架构。整个系统由4个相对独立的模块组成:
(1)TPM 模块:修改移植后的TPM Emulator,单独编译成为一个DLL 模块,作为系统的软件TPM,共TSS应用程序使用;
(2)TCS模块:修改移植后的部分TrouSerS(TSS 中的TCS,TDDL部分),单独编译成为一个DLL 模块,作为系统的TCS、TDDL,充当TCG 应用程序和TPM 的通信桥梁,并负责管理多个TSS应用程序线程对TPM 的串行化访问以及其它TCG 核心服务功能;
(3)TCG 应用程序模块:TSS应用程序(包含TSS的TSP部分)单独作为一个DLL 模块,用户通过TSS应用程序使用TPM 提供的功能;
(4)控制管理模块:信息记录器、控制台和输入输出等组成控制管理部件。
图1 系统体系结构
整个系统以上述3个DLL模块为基础,以控制管理部件为核心,相互协作完成系统功能实现系统设计目标。
为了更大限度的利用已有资源和增强系统扩展能力,系统各个主要部件之间的通信主要采用TCP/IP 协议。TCG 应用程序(包含TSP)和TCS之间的通讯采用TCP/IP协议,可以实现TSP 对本地TCS或远程TCS的调用。系统中的TPM 模块是软件实现,TCS与TPM 之间的通信也利用TCP/IP 协议完成。同时,TSS 应用程序、TCS 和TPM 内部的信息收集代理与控制管理部件中的信息记录器之间,也采用TCP/IP协议进行通信完成信息传输。
可信计算平台学习系统软件实现时,需要解决以下4个关键问题:①TSS和TPM 的信息收集;②系统运行过程控制;③系统模块间通信与同步;④结果的可视化显示。由于篇幅的原因,本文重点描述系统运行过程控制的原理与实现。
能够较友好的控制系统运行,是学习软件开发的目的之一。如同进行软件开发时,软件开发环境提供的 “单步运行”、“断点”等调试功能,可以帮助开发人员快速查找错误、跟踪软件运行效果、提高软件开发效率一样,本学习系统提供TCG 应用程序的 “单步运行”功能。使用者可以利用 “单步运行”功能,控制TCG 应用程序执行到指定位置后暂停下来。然后通过系统提供的各种数据观察手段,观察分析TCG 应用程序执行过程和执行效果,从而深入了解TCG 内部实现机制。
“断点”指的是:TCG 应用程序在执行过程中可以被用户中断并暂停的位置。假设TCG 应用程序过程中,可以在用户的控制下,运行到运行时间轴A 点或B 点时暂停,则A 点或B点就是TCG 应用程序的 “断点”,如图2所示。
图2 TCG 应用程序断点和单步运行粒度关系
任意两个相邻断点之间的程序片段称为 “单步运行粒度”,也称为TCG 应用程序执行的 “一步”。 “单步运行粒度”具体代码长度与具体函数实现有关。TCG 应用程序可以以单步运行粒度为单位进行 “单步运行”。单步运行粒度或断点位置的选择,直接影响用户对TCG 应用程序的控制能力和观察能力。考虑到观察的方便和实现上的简单,本系统以模块间函数调用接口点为断点设置位置。断点设置策略确定好后,根据图2所示断点和单步运行粒度的关系,单步运行粒度或一步操作内容也随之确定。
在选定好断点位置后,系统在 “单步”模式运行时,每当TCG 应用程序运行到断点位置,就必须暂停下来等待用户的输入,然后再依据用户的不同命令执行不同的操作。
对于单线程运行的系统来说,应按照图3所示的方式,串行的 “单步运行”TCG 应用程序。
图3 串行单步执行
由图1所示的系统体系结构可知,可信计算平台学习系统属于多线程系统。接收用户控制命令的操作和TCG 应用程序分别属于不同的工作线程。多线程系统需要按照图4所示的方式, “单步运行”TCG 应用程序。单步运行过程描述如下:
(1)用户通过控制界面启动单步运行;
(2)在分叉1处:
1)系统控制界面线程:等待TCG 应用程序执行一步后的暂停;
2)TCG 应用程序线程:开始单步执行并执行一步单步操作;
(3)在分叉2处:
1)系统控制界面线程:得到TCG 应用程序执行完一步后暂停的通知;
2)TCG 应用程序线程:等待用户发出执行下一步命令;
(4)在连接1处,系统控制界面线程:
1)用户这时可以进行观察数据等操作;
2)发出执行下一步操作命令给TCG 应用程序;
(5)在分叉3处:系统控制界面线程跳转到(2)的1)。
(6)在连接2处:TCG 应用程序线程判断是否继续单步执行:
1)如果继续单步执行,则跳转到(2)的2);
2)否则结束整个单步运行操作;
图4 TCG 应用程序并发单步执行
可信计算平台学习系统具体实现时,系统控制线程作为学习系统的主线程运行。然后系统控制线程创建3个线程,分别运行组成TCG 应用程序的APP+TSP模块、TCS模块和TPM 模块。TCG 应用程序中的3 个模块线程都独立地按照图4所示的方式与系统控制线程协作,共同实现TCG 应用程序的 “单步运行”功能。
当系统中存在多线程时,必然涉及到多线程间的并发控制。并发控制涉及两个概念:互斥和同步。互斥是指多个进程对共享资源进行访问互时,某一时刻只能有一个进程可以访问共享资源。多个进程间通过交换消息协调它们的活动称为同步,同步是实现多个进程按照一定事件顺序执行的有力工具[13]。本学习系统中,与单步运行相关的并发控制只涉及多线程的同步问题:即图4中并发执行的多线程中的诸多操作,如何实现图3所示的串行执行效果。
由图4可以看出:在连接1处,系统控制线程需要等待TCG 应用程序完成单步操作;在连接2处,TCG 应用程序需要等待系统控制线程发出 “下一步”指令。3个分叉则都需要发送相应的信号,这种同步属于事件同步类型。在分析Windows操作系统提供的诸多同步对象后,本文选择“事件对象”(Event Object)并配合“等待”(WaitFroSingleObject)函数,作为学习系统实现同步的工具[14]。虽然图4中有3个分叉,但系统具体实现时只需要一个同步事件对象,原因如下:
(1)在分叉1处,系统控制线程可以采用创建TCG 应用程序进程,并设置相应参数方式完成事件通知。
(2)一般情况下,用户会在启动TCG 应用程序单步运行功能后,自然的等待TCG 应用程序执行,并观察TCG应用程序给出的单步执行完毕信息。TCG 应用程序通过显式的提示信息通知用户单步执行完毕。因此在分叉2 处,TCG 应用程序不需要使用操作系统的同步对象,可以采用直观的信息显示方式完成事件通知。
(3)分叉3处和连接2处的同步,采用事件对象和等待函数配合实现。表1给出利用事件对象和等待函数实现单步运行同步操作的伪代码片段,解释如下:
1)用户发出单步运行指令后,系统控制线程通过调用StartStepRun创建同步事件对象EventA,并创建可单步运行的TCG 应用程序线程。
2)TCG 应用程序线程运行并执行一步单步操作;在运行一完步单步操作后显示单步操作完成提示信息,然后获得(OpenEvent)同步事件对象EventA,并等待(Wait-ForSingleObject)用户 “下一步”命令事件的发生。
3)用户在看到TCG 应用程序给出的 “单步操作操作完成”提示信息后,可以按照自己的意愿进行系统允许的其它操作。必要时发送 “下一步”指令。
4)系统控制线程接收到用户 “下一步”指令后,通过调用NextStep设置(SetEvent)同步事件对象EventA,通知TCG 应用程序线程,使TCG 应用程序继续运行并在下一个断点处暂停。
表1 事件对象和等待函数实现单步运行伪代码片段
为了说明该学习软件的实际运行效果,本节按照操作类别给出两类运行效果,并加以说明。
图5展示了系统在执行完读取TPM EK 公钥信息命令后运行效果。系统界面分为4个大的区域:
(1)左上角是内嵌TCG 应用程序管理区。用户可以在这里找到并执行TSS应用例程。
(2)左下角是模块调用信息区。以树形方式按照函数调用顺序,显示TCG 应用程序各个调用模块的详细信息。
(3)右下角是模块调用可视化显示区。系统采用模仿UML序列图方式,可视化的显示TCG 应用程序多个软件层次间函数调用关系。
(4)右上角是信息显示区域。该区域在不同情况下有不同用途,图5 中显示的是查看选中调用节点代码时的情况。
图5 模块调用可视化区选中节点并显示源代码
界面左下角模块调用信息区中所列的模块调用节点,就是相应TCG 应用程序可能的断点位置。用户开启单步运行功能后,系统在执行TCG 应用程序时,默认情况下会在执行完 “一步”后暂停,并在信息显示区域显示提示单步执行信息,如图6所示。
图6 系统在单步运行模式下运行效果
用户可以在TCG 应用程序单步暂停期间执行系统允许的各种操作,比如查看TPM 内部数据。图7是系统提供的TPM 内部数据查看器。用户通过该查看器可以查看TCG应用程序当前状态下TPM 内部数据。由于读取TPM EK公钥信息不使用授权协议,所以图7中所示TPM 内部Sessions的信息仍保持为TPM 启动时的初始状态。
图7 TPM 内部数据查看窗口
可信计算平台学习系统,通过提供友好的控制和显示界面,帮助使用者详尽的了解整个TCG 应用程序的执行过程。特别,本系统利用开源项目TrouserS和TPM Emulator提供的TSS和TPM 实现源代码,可以让用户的观察到TSS和TPM 具体实现。TCG 应用程序的 “单步运行”功能是本系统的特色之一。本文通过定义 “断点”和 “单步运行粒度”给出 “单步”原理,利用Windows系统提供的线程间同步对象--事件对象实现TCG 应用程序的 “单步运行”。系统实际运行效果表明,该系统的开发对使用者学习了解TCG 有一定意义。当然该系统还有一定的不足:比如提供的自由度还不够丰富,使用者还不能任意的更改TCG应用程序执行过程中的内容。如何为用户提供更易于操作的界面和显示更加丰富的功能是我们后期的工作。
[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).[沈昌祥,张焕国,王怀民,等.可信计算的研究与发展 [J].中国科学:信息科学,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].武汉:武汉大学出版社,2011.]
[5]State Cryptography Administration.Functionality and interface specification of cryptographic support platform for trusted computing[S].2007 (in Chinese).[国家密码管理局.可信计算密码支撑平台功能与接口规范 [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].软件学报,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.