前几天我在"可信计算(1)"一文中声称:可信计算技术的一个重要应用就是保护软件的完整性,或者说是"硬化"软件,并将这一事实向用户作出担保.现对这一断言作一番技术说明.希望它Make Sense.
 
     如图给出了可信计算的重要部件,可信平台模块(Trusted Platform Module, TPM),在计算机体系架构中的安装位置.TPM是个具有计算及存储功能的芯片.输入/输出控制器(I/O Controller)是连接外部设备与内存的总线.将TPM安装在I/O Controller中的目的是为了让TPM截获每一个从外存装载入内存的软件.所谓"截获",您尽管可以把它读作"偷听"(或叫"垂帘听政"也行).由于是硬件连接,只要用户选择了"打开TCG功能",TPM的"偷听"行为就不可避免.当然囿于TPM的内存量,TPM仅存储被它"偷听"到的软件的一个哈希值.TPM内部配备有哈希函数.
 
 
     按照TCG的设计理念,TPM会按照整个系统及应用软件栈的装载顺序来"偷听"装载到计算平台上的所有软件.请不要担心TPM有没有这个海量,由于采用了一个很聪明的哈希扩展算法,TPM的确会有办法来存储所有能够被平台所装载的全部软件.举例X86平台的软件装载过程:从机器加电启动开始,TPM将顺序"偷听"并存储BIOS(通常是存在一个固件中,与附加ROMs一起,叫做BasicBootBlocks), MBR(Master Boot Record, 是系统硬盘上的第一个扇区内容), OS Loader(MBR所指向的一个足够大的磁盘区域,从其能够导入一个足够大的程序来执行OS的装载), OS, 用户应用程序1, 用户应用程序2,...(见下图,来源TCG).
 
 
     如此顺序装载的程序叫做一个链(Chain).图中"度量"一个软件就是对该软件哈希.TPM之所以要把跑在计算平台上的整个软件链的哈希值记录下来是为了能够把该平台上的软件加载状况向一个关心这一状况的人报告.比如该平台是一台云服务器,而关心者是云服务的用户.TPM可以对一分报告进行数字签名,确保报告的真实性.TPM内有公钥密码算法使得TPM可以给出数字签名.
 
     除了对TPM给出设计说明,TCG还给出了TPM设备驱动软件的设计说明.到此为止我对TCG技术作了一个非常简单的叙述.
 
     假定在这样一个链中的这些程序都是正确的,则这个从底部BIOS开始到顶部用户应用程序的链就叫做信任链(a Chain of Trust),而BIOS又叫做信任链之根(the Root of a Chain of Trust).TCG当然无法控制任何这些软件的可信性!实际上通过TCG技术,一个平台软件状况的询问者仅仅是得到了平台软件状况而已,判断这些软件的正确与否还是询问者自己的任务.TCG技术只是对询问者作出了真实的报告.
 
     目前普遍认为TCG所设想的信任链如要包含商用操作系统是不切实际的.从BIOS一直到OS Loader,这些软件都不是很复杂,做到可信不会太难.惟独可信OS是个大难题.目前热门的做法是用可信硬件虚拟化的技术来绕开商用操作系统不可信的问题.我会在以后的一讲中尝试介绍.