第3章 可信度量技术 可信度量技术是可信计算的关键技术之一。可信计算平台通过可信度量,把信任关系 从信任根扩展到整个计算机系统,以确保计算平台可信。本章首先介绍TCG的链形信任度 量技术,然后介绍带有数据恢复功能的星形信任度量技术,以及基于TPCM 的信任度量。 3.1 TCG 的链形信任度量技术 TCG 利用计算机启动序列建立信任链。PC 平台的启动序列如下:加电后首先 BIOS/EFI取得控制权,BIOS/EFI将初始化一些硬件设备。然后BIOS/EFI将控制权传 递给系统安装的一些硬件板卡的固件,当这些硬件板卡完成自己的初始化工作后,BIOS/ EFI回收控制权。在此之后,BIOS/EFI将控制权传递给系统的引导加载程序,引导加载 程序加载操作系统内核,然后将控制权传递给操作系统内核。操作系统内核加载并安装 各种设备驱动和服务。至此,系统启动完毕,等待执行用户程序。 计算机执行各种任务时,计算机的控制权将会在不同的实体之间传递。那么,用户如 何才能知道计算机是否受到恶意攻击,以及计算机是否可信呢? 显然,用户希望能够知道 计算机的可信状态,以决定是否使用这台计算机或应当采用什么措施确保计算机可信。 TCG采用度量、存储、报告机制解决这一问题,即对平台的启动序列的可信性进行度 量,并对度量的可信值进行安全存储,当用户询问时提供报告。为此,首先要记录系统的 启动序列和在启动序列中的可信度量结果,然后才能通过向用户报告启动序列和可信度 量结果,向用户报告平台的可信状态。从这一观点看,所谓信任链技术,就是记录系统的 启动序列和在启动序列中的可信度量结果的一种实现技术。 3.1.1 TCG 的信任链 TCG给出的信任链定义如下:CRTM→BIOS/EFI→OS装载器→OS→应用。其中, 可信度量根核(CRTM)是BIOS/EFI里面的最先执行的一段代码,用于对后续启动部件 进行完整性度量,因此CRTM 是整个信任链度量的起点。 当系统加电启动时,CRTM 首先对BIOS/EFI的完整性进行度量。这种度量就是把 BIOS/EFI当前代码的可信值计算出来,并把计算结果与预期的可信值进行比较。如果 两者一致,则说明BIOS/EFI没有被篡改,BIOS/EFI是可信的;如果两者不一致,则说明 第3章 可信度量技术 BIOS/EFI的完整性遭到了破坏,不可信了。如果BIOS/EFI是可信的,那么可信的边界 将会从CRTM 扩大到CRTM+BIOS/EFI,于是执行BIOS/EFI。接下来,BIOS对OS 图3-1 可信计算平台的启动 和信任链流程 装载器进行度量。OS 装载器包括主引导扇区 (MasterBootRecord,MBR)、操作系统引导扇区 等。如果OS装载器也是可信的,则信任的边界将 会扩大到CRTM+BIOS/EFI+OS装载器,于是 执行操作系统的加载程序。接下来,操作系统加载 程序在加载操作系统之前,将首先度量操作系统。 如果操作系统是可信的,则信任的边界将扩大到 CRTM+BIOS/EFI+OS装载器+OS,于是加载 并执行操作系统。当操作系统启动以后,由操作系 统对应用程序的完整性进行度量。如果应用程序 是可信的,则信任的边界将扩大到CRTM+BIOS +OS装载器+OS+应用,于是操作系统加载并执 行应用程序。上述过程看起来如同一根链条,环环 相扣,因此称之为信任链。可信计算平台的启动和 信任链流程如图3-1所示。 在信任链的执行过程中,度量的序列反映了系统启动的序列,度量的值就是反映系统 可信状态的值,于是将这一过程中的度量值妥善地存储下来,就记录了系统的启动序列和 在启动序列中的可信度量结果,为以后的报告机制提供了数据基础。 3.1.2 度量方法 这里需要解决一个问题:采用什么方法度量软件的可信性? 这种方法既要能够准确 反映软件是否被篡改、是否可信,度量的结果数据又比较短,以节省存储空间。TCG 采用 哈希函数度量软件的完整性,以软件的完整性代表软件的可信性。哈希函数具有以下几 个明显优点,特别适合这里的应用。 ① 可以接受几乎任意长的输入数据,其输出长度固定,一般为几十字节。 ② 输入数据的微小改变将引起输出的明显改变。 ③ 安全性好,具有不可逆和抗碰撞攻击的能力。 接下来的一个问题是度量的结果存储在哪里? 我们首先会想到硬盘有足够大的存储 空间。但是,我们现在的数据是反映平台可信性的度量值,必须安全存储,而硬盘的安全 性较低。可信计算的一个突出特点是采用了一个TPM 芯片作为信任根,其安全性比硬 盘高。因此,TCG将可信度量值存储到TPM 中。具体地,在TPM 的存储器中专门开辟 一片区域作为平台配置寄存器(PCR),用于存储可信度量值。 为了使存储到PCR中的度量值能够反映系统的启动序列,TCG 采用了一种迭代计 算哈希值的方式,称为“扩展”操作,即将PCR的现值与新值相连,再计算哈希值并作为新 的完整性度量值存储到PCR中: NewPCRi=Hash(OldPCRi‖NewValue),其中符号“‖”表示连接。 87 可信计算 根据哈希函数的如下性质: ① 如果A ≠B,则有Hash(A)≠Hash(B)。 ② 如果A ≠B,则有Hash(A ‖B)≠Hash(B‖A)。 综上可知,PCR中存储的度量值不仅能反映当前度量的软件完整性,也能反映系统 的启动序列。当前软件的完整性或系统启动序列的任何改变都将引起存储到PCR 的值 的改变。 我们事先把系统启动过程中需要度量的部件的完整性值计算出来,并作为预期值存 储起来。当系统实际启动时,信任链技术就会把当前度量的实际完整性值计算出来,并与 预期的完整性值进行比较。如果两者一致,则说明被度量部件没有被篡改,数据是完整 的,平台是可信的。如果两者不一致,则说明被度量部件被篡改,其数据完整性遭到了破 坏,平台不可信了。这样,依靠信任链技术就可以在系统启动过程中检查,以发现系统资 源的完整性是否得到确保,从而确保系统资源的完整性和系统的可信性。 3.1.3 度量日志 除了信任链的度量之外,TCG还采用日志技术与之配合,对信任链过程中的事件记 录相应的日志。日志将记录每个部件的度量内容、度量时序以及异常事件等内容。由于 日志与PCR的内容是相关联的,因此攻击者篡改日志的行为将被发现,这就进一步增强 了系统的安全性。 对于PC而言,启动过程中的完整性度量事件日志应存放于系统的ACPI表中。图3-2 定义了度量事件日志在ACPI表中的存放位置,并定义了该如何找到事件日志的起始位置。 图3-2 ACPI表的事件日志结构 88 第3章 可信度量技术 3.1.4 TCG 信任链技术的一些不足 根据上面的分析可以知道,TCG的链式信任链技术的最大优点是实现了可信计算的 基本思想:从信任根开始到硬件平台、到操作系统、再到应用,一级测量认证一级,一级信 任一级,把这种信任扩展到整个计算机系统,从而确保整个计算机系统可信。其次,这种 信任链技术与现有计算机有较好的兼容性,而且实现简单。 但是,TCG的这种信任链技术具有下列几点不足。 1. 信任链中度量的是数据完整性,不是可信性 可信计算的主要目标是提高和确保计算平台的可信性。为此,应当度量并确保系统 资源的可信性。但是,受可信性度量理论的限制,目前尚缺少简单易行的平台可信性度量 理论与方法。相比之下,数据完整性的度量理论已经成熟,而且简单易行。TCG 采用数 据完整性度量,代替可信性度量。理论和实践都表明,通过数据完整性的度量与检查,可 以发现大多数对系统资源的完整性破坏,对确保系统资源的数据完整性和平台的可信性 有重要贡献。因此我们说TCG的信任链技术是成功的。 但是,完整性并不等于可信性。目前,在学术界对可信性的理解尚没有统一的认识。 我们的学术观点是:“可信≈安全+可靠”。人们普遍认为,数据安全性包括数据的秘密 性、完整性和可用性。另外,确保数据完整性也是提高系统可靠性的一种措施。显然,数 据完整性仅是安全性和可靠性中的一部分,而不是它们的全部。因此,TCG 的信任链度 量是有一定局限性的。这一问题的解决依赖于可信度量理论的发展。 其次,由于TCG在信任链中采用的是度量数据完整性,因此它能确保数据的完整 性,具体确保BIOS、OSLoader、OS的数据完整性。但是,数据完整性只能说明这些软件 没有被修改,并不能说明这些软件中没有安全缺陷,更不能确保这些软件在运行时的安全 性。例如,攻击者可以在一个可信系统中利用缓冲区溢出来替换可执行文件。基于数据 完整性的度量是一种静态度量。静态度量可以确保软件加载时的可信性,而不能确保软 件在执行时的可信性。因此,我们需要基于软件行为的动态度量。但是,软件的行为是复 杂的,对其进行度量是比较困难的。 文献[45]对软件的行为进行了形式化的刻画和分析。国内外许多学者对软件的行为 可信性进行了研究,并取得了一些研究成果。我国自然科学基金执行了“可信软件”重大 研究计划,推动了对软件可信性的研究。 文献[47]提出一种基于软件行为的动态完整性度量方法。分析可执行文件或源代码 的API函数调用关系得到软件的预期行为,建立软件预期行为描述集并发布;然后对软 件进程的实际API函数调用行为进行监控;如果在软件执行过程中,软件行为符合软件 预期行为描述集中的相关规则(软件行为认证码),则认为软件是可信的,否则说明软件不 可信,此时应该对该软件进行控制。在实际科研项目中把静态度量与动态度量相结合,可 得到较好的效果。这种基于行为的动态度量方法需要进一步提升之处是,如何提前感知 攻击行为的发生,不能等到攻击行为发生了才感知到。 另外,TCG的信任链还把信任值二值化,只考虑了可信和不可信两种极端状况,而且 89 可信计算 认为在传递过程中没有信任损失,这显然是一种理想化的处理方法。 2. 信任链较长 根据信任理论可知:信任传递的路径越长,信任的损失可能越大。TCG的信任链 CRTM→BIOS→OSLoader→OS→Applications 从CRTM 到应用程序,中间经过了很多级的传递,可能产生信任的损失。 3. 信任链的维护麻烦 由于信任度量值的计算采用了一种迭代计算哈希值的“扩展”方式,这就使得在信任 链中加入或删除一个部件,信任链中的软件部件更新(如BIOS升级、OS打补丁等),相应 的预期可信值都得重新计算,用户维护很麻烦。另外,为了确保系统可信,需要度量所有 的可执行部件(如可执行程序、Shell脚本、Pert脚本等)。要度量这么多部件,十分麻烦。 4. CRTM 存储在TPM 之外,容易受到恶意攻击 在实现技术上,CRTM 是一个软件模块,将它存储在TPM 之外,容易受到恶意攻击。 如果能把它存储到TPM 内部,将会更安全。 3.2 星形信任度量模型与技术 3.2.1 星形信任度量模型 现有的计算机引导方式一般为链式结构,因此TCG采用BIOSBootBlock→BIOS→ OSLoader→操作系统→应用的信任度量。显然,这种依照引导方式进行度量的信任链较 长。因为信任也是一种信息,因此在传输过程中会有损失,而且传输的路径越长,损失可 能越大。由于链式信任度量方法的信任链很长,因此容易产生信任衰减。如图3-3所示, 如果节点A 对节点B 的信任值为T (A ,B ),节点B 对节点C 的信任值为T (B,C),用 T(A ,C)表示经由B 点传递的A 、C 之间的信任关系。由传递性可以推断出A 和C 之间 的信任值取两者之间的最小信任值,从而产生信任衰减。 图3-3 信任衰减 文献[14]提出一种星形信任度量模型。星形信任度量模型采用一级度量的方法,大 大缩短了信任链长度。与链式结构一级度量一级的方案不同,星形信任度量模型是利用 可信根分别对引导程序、操作系统内核、应用程序等进行度量。因为采用一级度量,从而 解决了链式信任度量中的信任衰减问题。通过完整性度量后,TPM 才允许CPU 启动平 台。因为所有度量均由可信根的CPU 进行,不是由平台的CPU 度量,所以是可信根的 90 第3章 可信度量技术 图3-4 星形信任度量模型 主动度量。星形信任度量模型如图3-4所示。 在星形信任结构中,引导程序、操作系统内核和应 用程序直接被可信根度量过,因此可以保证系统在启 动过程中是安全的,软件没有被非法篡改。由于星形 信任结构的信任值计算是根节点与每一个度量节点之 间的独立计算结果,互相之间不会产生影响,因此添加 和删除一个部件以及软件版本升级,根节点对该节点 单独重新计算即可,不会影响到整个信任链。而且,星 形信任关系不在信任代理间传递,度量部件均为一级 度量,可以有效避免信任损失。 星形信任结构也有不足之处:在星形结构中,由于根节点处于中心位置,在平台的工 作过程中需要不断地对各节点进行完整性度量和可信度的判断,因此可信根的计算量较 大。由于可信根芯片CPU 的效率一般低于平台主CPU,因此有可能影响平台的工作 效率。 3.2.2 具有数据恢复的星形信任度量 根据“可信≈可靠+安全”的学术思想,可信计算机系统应该具备较好的可靠性。因 此,信任根若检测到某个软件受到攻击并被篡改,除了阻止该软件运行之外,需要提供一 种机制,以使该软件能够恢复到其正常的状态,保证平台的正常工作不受干扰。星形信任 度量模型的备份恢复机制需要对TCG 规范中的TPM 结构进行扩展,将RTM、RTS和 RTR集成在TPM 芯片中,并要在平台中开辟一个受TPM 直接管理的系统备份存储器, 保存计算机系统引导程序和操作系统等希望被保护的内容代码。当TPM 发现某个被度 量的部件被篡改后,便直接调用系统备份存储器进行数据恢复,保证平台正常启动并运 行。图3-5为具有数据恢复的星形信任度量模型。 图3-5 具有数据恢复的星形信任度量模型 91 可信计算 如图3-5所示,TPM 在系统启动之前对引导程序、操作系统内核、应用程序分别进行完 整性校验,若校验未通过,则认为以上内容被篡改,TPM 将从受保护的备份存储器中读取相 应的备份代码,将其写入外部工作用存储器,并再次进行完整性校验,若通过校验,表明系统 恢复成功,允许该软件启动。该模型为备份存储器提供受保护的安全存储环境,在进行完整 性校验和数据恢复的过程中不会受到外部干扰,从而大大提高了系统的可靠性和可用性。 3.3 基于TPCM 的信任度量 TPCM 是我国自主设计的一种可信平台模块方案。它在继承了TCG 的TPM 的一 些优点外,也针对TPM 的一些缺点进行了有效的改进,具有自己的一些突出特点。其主 要特点是,平台启动时TPCM 首先掌握对平台的控制权,并对平台关键部件进行完整性 度量。本节介绍国家标准GB/T29827-2013《信息安全技术可信计算规范可信平台主板 功能接口》里所定义的信任度量技术。 3.3.1 TPCM 优先启动与度量 通过主板电路设计保障实现TPCM 和计算机主板其他通用部件之间的加电启动时 序控制。确保用户启动PC后,TPCM 先于主板其他通用部件启动。RTM 认证并度量完 扩展度量模块1(ExtendedMeasurementModule1,EMM1)后,TPCM 发出控制信号启 动主板的CPU、芯片组和动态存储器等通用部件。其中EMM1为BootROM 中的一段 程序代码。如图3-6所示,TPCM 优先启动以及对EMM1的完整性度量流程为 图3-6 TPCM 优先启动以及对EMM1的完整性度量流程 92 第3章 可信度量技术 ① 用户启动PC; ② TPCM 先于主板其他通用部件获得复位信号并执行RTM; ③ TPCM 和主板其他通用部件设计电路,确保RTM 能可靠地读取BootROM 中的 一段程序代码EMM1,对其进行身份认证; ④ RTM 度量EMM1完整性; ⑤ RTM 度量EMM1完毕,TPCM 发出控制信号使主板的其他通用部件复位,开始 正常开机引导过程。 3.3.2 扩展度量模块和信任传递 扩展度量模块(ExtendedMeasurementModule,EMM)是指接受了完整性度量检查 并被装载到当前执行环境中,度量后续代码装载的部件。作为RTM 度量引擎的扩展度 量模块,实现对执行部件的完整性度量,确保信任传递。基于TPCM 的可信PC平台的 EMM 主要有EMM1、EMM2和EMM3。 ① EMM1:通过RTM 对其进行完整性度量,并被装载到系统的一段BootROM 初 始引导程序,作为主板开机引导中装载执行部件对BootROM 其他部件执行完整性度量 的扩展度量模块。 ② EMM2(BIOS/UEFI):通过EMM1对其进行完整性度量,并被装载的扩展度量 模块实体,负责对操作系统装载器进行完整性度量与可信装载的一段BootROM 程序。 ③ EMM3:存储于外部存储器中用来装载操作系统内核的执行部件,通过EMM2对 其进行完整性度量并被完整性装载到主板系统中,对被装载的操作系统内核执行完整性 度量的扩展度量模块。 对于PC而言,信任链包括从开机到操作系统内核装载之前的可信启动过程,基于部 件完整性度量与扩展度量部件,保障部件代码的装载和执行环境的可信。由TPCM 初始 信任状态发起,以扩展度量模块为节点的信任传递与扩展,实现传递部件之间的信任关 系。信任链上主要部件之间的相互协作关系是:RTM 度量EMM1,EMM1度量EMM2, EMM2度量EMM3,EMM3度量操作系统内核;可信计算主板以RTM、EMM1、EMM2 和EMM3为节点搭建信任链传递,如图3-7所示。信任链的建立过程满足如下要求。 ① 信任链的建立过程以RTM 为起点。 ② 当需要装载一个部件到当前环境上运行时,首先对该部件进行完整性度量,然后 再将其加载。 ③ 当主板系统启动完成后,可信根TPCM 中的PCR寄存器记录了按照系统事件启 动顺序依次迭代计算的哈希值。 ④ PCR中的哈希值与启动过程中的部件启动事件相对应。 ⑤ PCR中的哈希值与系统引导过程的度量日志记录启动顺序相对应。 ⑥ PCR中的哈希值和度量事件日志,在每次开机过程中重新计算生成。 PC从开机引导到OS内核装载之前,以信任链建立为核心功能,基于TPCM 信任根 支撑的主板系统实现部件完整性度量与被度量,度量执行部件与被度量部件角色变化的 信任传递关系和一般流程如下。 93 可信计算 ① TPCM 先于计算机主板其他部件(包括主CPU)启动并确保RTM 作为信任起点 的度量执行部件,可靠地读取BootROM 中的EMM1并对其执行完整性度量,生成的哈 希值和日志临时存储于TPCM 中; ② TPCM 发送控制信号,使主板其他部件(如CPU、芯片组和动态存储器等)复位, 开始执行BootROM 中的EMM1模块,构建以EMM1为当前系统控制和执行部件的可 信执行环境; ③ EMM1获得系统执行控制权,作为RTM 的扩展度量模块执行部件; ④ EMM1对EMM2部件进行完整性度量,并临时寄存当前哈希值和日志; ⑤ EMM2获得当前系统控制权,对EMM3执行完整性度量,并将哈希值存储到 TPCM 的PCR中,度量事件日志保存到ACPI表中; ⑥ EMM3获得当前度量执行部件控制权,作为可信度量执行部件; ⑦ EMM3对操作系统内核执行完整性度量,将哈希值存储到TPCM 的PCR 中,并 把日志保存到ACPI表中。 经过上述步骤后,主板系统以TPCM 中的RTM 为度量起点,以EMM1、EMM2和 EMM3部件为度量代理的信任链建构完成,保障OS内核获得一个可信的执行环境。 图3-7 主板引导过程部件信任传递关系网络和信任链建立流程 3.3.3 一种TPCM 度量Boot ROM 的实现方法 基于TPCM 的可信计算平台主板电路设计确保TPCM 先于主板通用部件获得复位 94 第3章可信度量技术 信号并可信引导,完成对BootROM 的EMM1 度量;度量完毕,TPCM 发送控制信号使 主机板的其他通用部件加电复位,实现开机可信引导。TPCM 和通用主机平台的电路组 成结构及双机开机时序关系如图3-8所示。 图3-8 双系统开机时序关系 TPCM 先于主板启动的设计特点如下。 ①平台主板设计上满足TPCM 和其他通用部件之间基于双电源模块加电。 ②TPCM 外围电源与信号等采用独立电路系统设计。 ③通过主板的通用部件电源控制功能截获其加电和复位信号,实现双系统在用户开 机过程的分时控制。平台主板的其他通用部件电源设计实现切换与控制电路功能,在冷 启动和主板复位过程,截获主机电源PowerSupply的“PowerGood号,隔离除TPCM 外的其他通用部件的电压信号、复位信号和时钟信号等;在获得TPCM 发出的控制信号 时,切换与控制电路给通用部件(如CPU 、芯片组等)分发电压信号、时钟信号和复位信号 等,主板通用部件进入正常开机引导。信(”) ④在有选择性实现TPCM 与主板其他通用部件加电工作过程中,如BootROM 芯 片加电,TPCM 及外围部件电路系统的电源和主板其他不需要加电的部件采用单向隔离 电路保护,确保电流不能倒灌进入平台主板的其他通用部件。TPCM 及外围部件电路系 统的电源,在其他通用部件加电复位后,其单向隔离电路被正向电流导通,TPCM 重新复 位;TPCM 电源设计实现智能检测到其他部件的“倒灌”电流而出现断路保护,停止输出 电压信号。 TPCM 先于主板启动的平台可信引导过程如下。 ①PowerOn:用户启动开机按钮动作,PowerSupply发出“PowerGood”信号。 95 可信计算 ②计算机主板通用部件电源截获“PowerGood”信号,切断给通用部件加电;将电源 转发给TPCM 电源。 ③在隔离保护电路支撑下,TPCM 电源模块给TPCM 加电和给主板BootROM 电 路供电。 ④TPCM 嵌入式系统启动运行。 ⑤TPCM 自我可靠性启动与部件完整性检验。 ⑥TPCM 检测物理防护电路和主板BootROM 连接电路SPI 总线的可靠性。 ⑦TPCM 可靠地读取BootROM 中的EMM1 代码。 ⑧完整性度量EMM1 并扩展PCR 值。 ⑨度量EMM1 执行完毕,TPCM 给主板通用部件电源发送控制指令,切换电路使主 板电源给通用部件加电、复位,使主板正常启动。 3.4 TCG 动态可信度量根技术 信任链是可信计算的关键技术,通过信任链的作用确保系统资源的数据完整性,从而 提高系统的可信性。但是,早期的信任链只在平台启动时才进行一次完整性校验。这对 于频繁开机和关机的PC 来说,是基本可以的。但是,对于服务器这种一旦开机后就长时 间不关机的计算平台来说,远远不够。用户很难相信开机时几分钟的数据完整性度量,很 难确保服务器几年的数据完整性。因此,需要能够反复进行系统完整性度量的信任链 机制。 在工业界,neAMD 等CPU 厂商都致力于通过改进CPU 的体系结构增强计算平 Itl、 台的安全性。最著名的是Intel的LaGrande计划和AMD 的Presidio计划。这两个计划 都是通过改进CPU 和芯片组的安全功能来增强平台的安全性。在这些技术的支持下, 可以实现信任链的多次完整性度量,因而比较适合服务器。TCG 称这种可多次度量的技 术为动态可信度量根(DynamicRootofTrustMeasurement,DRTM)技术,而称原来的 可信度量技术为静态可信度量根(StaticRootofTrustMeasurement,SRTM)技术。 LaGrande计划的体系结构包含了很多安全特性,如它具有可信执行技术(Trusted eXecutionTechnology,TXT)特性的CPU 和TCGTPM 。为了能够反复进行系统完整性 度量,l的CPU 中增加了一条新指令SENTER 。这条指令能够创建可控和可认证的 Inte 执行环境。该环境不受系统中任何部件的影响,因此可以确保执行这条指令所加载的程 序的执行不会被恶意篡改。 LaGrande体系结构的保护目标主要如下。 ①保护执行:在CPU 芯片中提供一个安全的区域来运行一些敏感的应用程序,以 使得用户即使处于可能被攻击的环境中,仍然能够相信这个区域的安全性。 ②密封存储:采用密码保护用户的数据,使用户即使处于可能被攻击的环境中,仍 能够相信被保护数据的机密性和完整性。 ③远程证明:提供一种机制,使用户能够相信一个远程平台是可信的。 96 第3章可信度量技术 ④I/O保护:对平台的I/O进行保护,使用户和应用程序之间的交互路径是可信 路径。 2005 年,AMD 宣布了包含虚拟机和安全扩展的下一代CPU 规范。在其扩展指令中 有一条SKINIT 指令,用以支持反复进行系统完整性度量。SKINIT 指令对CPU 进行初 始化,为程序建立一个安全执行环境。在这个环境里,屏蔽了所有中断,关闭了虚拟内存, 禁止DMA,除正在执行的这条指令的处理器外,其他处理器都不工作。用于加载虚拟机 管理器(VMM)的程序被封装到一个安全的加载程序块中。在CPU 执行安全加载程序 前,这个程序要被度量,其度量值被写进特定PCR 中。这个PCR 只能通过特殊的LPC 总线周期才能读取,而软件是无法模拟这个LPC 总线周期的,这就保证了只有CPU 能够 读取这个特定的PCR 。这个特定PCR 的值就是信任根的度量值,CPU 的SKINIT 指令 就是可信度量根。为了防止SKINIT 指令被攻击,前面所述的所有步骤和条件都是以原 子形式执行的。 有了Intel和AMD 的上述技术支持,TCG 提出了DRTM 的概念。DRTM 是与 SRTM 相对而言的,之所以称之为动态,是因为其信任度量不仅可以在平台启动的时候 进行一次,还可以在平台启动以后的任何时刻再次进行。 TCG 的DRTM 是CPU 的一条新指令,在Intel的CPU 中这条新指令是SENTER, 在AMD 的CPU 中这条新指令是SKINIT 。这条新指令的执行告诉TPM 开始信任度 量,并创建一个可信的计算环境。信任链由这条新指令开始信任度量,并重置PCR 寄存 器。这种信任链可以在任何时候执行信任链、创建可信计算环境,既可以在平台启动时, 也可以在平台启动后的任何时候。 由于这种动态信任度量起始于CPU 的一条新指令,而且不需要重启平台就能进行, 所以信任链排除了BIOS 及其配置、可选ROM 及其配置、BootLoader,因此在静态度量 情况下针对BIOS 和BootLoader的攻击也就失效了,从而提高了平台的安全性。 动态可信度量的目的是引导一个可信的操作系统,建立一个可信的环境。但是,这个 可信的操作系统会创建多个互相隔离的安全区域,以允许用户使用自己的操作系统或应 用程序。当可信操作系统、用户普通操作系统或应用程序都使用同一个TPM 时,就会发 生一个问题。这个问题就是TPM 如何区分它们呢? 换句话说,就是TPM 如何区分度量 的命令和度量值属于可信操作系统、用户操作系统,还是属于应用程序呢? 为了解决这个问题,TCG 在TPMv1.ocality的概念, ocality与不 2中引入了L并用L 同的度量请求相关联,从而达到能够区分度量请求者的目的。共定义了5个不同的 Locality:Locality0与TPMv1.1b 的设备关联;Locality1~Locality3没有特别规定,一 般Locality1与可信操作系统关联,Locality2与用户操作系统关联,Locality3与用户应 用程序关联;Locality4与CPU 关联,用于认证DRTM 。 对于静态可信度量,TCG 在TPMv1. 1中规定PCR0~PCR15 仅在平台重启时才被 允许重置成初始值。为了支持动态可信度量,TCG 在TPMv1. PCR23,并允许在动态度量时把PCR16~PCR23 重置成初始值。 2中新增了PCR16~ 最后我们指出,TCG 的DRTM 技术可以实现信任链的多次度量,而且克服了SRTM 的一些缺点。它进一步提高了平台系统的安全性,而且比原来的静态可信度量更适合服 97 可信计算 务器应用。这些都是有积极意义的。Intel已经将支持DRTM的TXT技术升级为SGX (SoftwareGuardExtensions)技术。 但是应当指出,DRTM技术只是实现信任链的多次度量,其度量的内容还是软件的 数据完整性,并不是软件的行为可信性,因此仍然不能确保软件的行为可信。确保软件的 行为可信是一件困难的事情,在这方面目前还缺少完善的理论和技术,需要我们进一步开 展研究。 3.5 本章小结 可信计算平台通过可信度量技术,把信任关系从信任根扩展到整个计算机系统。 TCG的信任链技术总体上是成功的。它的最大优点是实现了可信计算的基本思想:从 信任根开始到硬件平台,到操作系统,再到应用,一级测量认证一级,一级信任一级,把这 种信任扩展到整个计算机系统,从而确保整个计算机系统可信。其次,这种信任链技术与 现有计算机有较好的兼容性,而且实现简单,但是它也有一些明显的不足之处。 具有数据恢复功能的星形信任结构减少了信任传递,基于TPCM的信任度量确保 TPCM首先启动,完成对BootROM程序的可信度量。DRTM技术从一条安全指令开 始信任度量,可以在平台运行时创建可信计算环境,不需要重启平台。 我们完全相信,在世界各国的共同努力下,可信度量技术将会越来越完善,将在可信 计算中发挥越来越大的作用。 习题 (1)TCG链形信任度量为何将启动过程中的完整性度量事件日志存放于系统的 ACPI表中? (2)TCG链形信任度量技术有哪些不足之处? (3)星形信任度量技术有哪些优势? (4)基于TPCM的信任度量如何实现TPCM先于主板通用部件启动,完成对Boot ROM关键代码的度量? 实验 TrustedGrub实验。 ①请到htps://github.com/Rohde-Schwarz/TrustedGRUB2处下载; ②编译、安装、试运行TrustedGrub2,若无TPM支持,请用软件模拟; ③试用其支持的可信相关命令工具; ④分析其实现原理。 98 第4章 可信软件栈 4.1 可信软件栈的概念 可信软件栈是可信计算平台的重要组成部分。它基于可信计算平台的硬件资源,特 别是TPM,提供支撑可信计算目标的可信服务,并保证系统软件与环境的可信性。可信 软件栈位于应用软件与TPM 之间,是应用软件方便使用TPM 的桥梁,应用程序通过调 用可信软件栈的接口使用TPM 提供的安全功能。 4.2 TCGTPM1.2软件栈 TCG的软件栈(TCGSoftwareStack,TSS),是TCG 定义的一种为上层的可信计算 应用提供访问TPM 接口的软件系统,是可信计算平台体系中必不可少的组成部分。在 整个体系中,TPM 是整个平台的信任根;信任链将信任从信任根依次传递给BIOS、操作 系统内核和应用程序。TSS为应用程序访问TPM 提供支持,并对TPM 进行管理。 国际TCG 为可信软件栈制定了一系列的技术规范,2003 年10 月推出TSS SpecificationVersion1.1规范,2007年4月在前一规范基础上做了进一步修改,制定出 TSSSpecificationVersion1.2规范,该规范中指出:“TSS的设计目标包括:为应用程序 调用TPM 安全保护功能提供入口点,提供对TPM 的同步访问,向应用程序隐藏TPM 所建立的功能命令以及管理TPM 资源”。 在整个可信计算平台体系中,可信软件栈(TSS)是必不可少的系统组件。首先,为了 应用软件能够方便地使用TPM 的可信计算功能,应该提供相关的软件支持,如设备驱 动、设备应用接口等。其次,由于TPM 的计算能力和存储资源有限,TPM 不可能独立完 成可信计算的所有功能,必须借助TSS的参与。 4.2.1 TCG TPM 1.2 软件栈体系结构 可信软件栈具有多层次的体系结构,如图4-1所示,可分为TSS 服务提供(TCG ServiceProvider,TSP)层、TSS核心服务(TCGCoreService,TCS)层和TSS设备驱动库 (TCGDeviceDriverLibrary,TDDL),各个层次都定义了规范化的函数接口。TSP主要 作为本地和远程应用的可信代理,TCS用于提供公共服务的集合,而TDDL负责与TPM 可信计算 的交互。 图4-2TSS 体系结构图 1 TCGTPM1. TSP 层以共享对象或动态链接库的方式直接被应用程序调用。TSP 接口(即TSPI) 对外提供了TPM 的所有功能和它自身的一些功能,比如密钥存储和弹出关于授权数据 的对话框。 TCS 层有以下几个任务:管理TPM 的资源,比如,授权会话和密钥上下文的交换; 提供一个TPM 命令数据块产生器,这个命令数据块产生器能够把TCSAPI 请求转换成 TPM 能够识别的比特流;提供一个全局的密钥存储设备;同步来自TSP 层的应用程序访 问。如果操作系统支持,TCS 层必须以系统服务方式实现,也应该是TDDL 的唯一使 用者。 TDDL 是一个提供与TPM 设备驱动进行交互的API 的库。一般来说,TPM 生产厂 商会随TPM 驱动一起附带TDDL 库,以便TSS 实现者能够和TPM 进行交互。TDDL 提供一个小的API 集合来打开和关闭设备驱动,发送和接收数据块,查询设备驱动的属 性和取消已经提交的TPM 命令。 以上三个层次的关系如下:最上层的TSP 向用户的应用程序提供接口,它把来自应 用程序的参数打包传给TCS 模块,由TCS 模块提供具体的功能函数(如密钥管理);TCS 模块对来自TSP 模块的参数进行分析和操作后写成一个TPM 可以识别的字节流,通过 TDDL 传到TPM 里,TPM 接收到字节流后进行相应的操作,把结果以字节流的形式通 过TDDL 返回到TCS,TCS 对字节流进行分析后把结果传给TSP,最后由TSP 把正式的 100 第4章可信软件栈 结果返回给应用程序。 TSS 的主要设计目标如下。 (1)提供应用程序到TPM 的正确入口点; (2)提供应用程序到TPM 的层次化访问模式; (3)提供对TPM 的同步访问; (4)通过合适的字节分类和排列,隐藏指令流的构建; (5)正确管理TPM 资源。 实体可以在TSS 和TPM 上执行某些功能,通常拥有下面的一种角色。 (1)TPM 所有者(TPMOwner):该角色是平台的拥有者,一个平台只有一个TPM 所有者。 (2)TPM 用户(TPMUser): 该角色可以装载并使用TPM 对象,例如TPM 的密 钥。TPM 用户可以是能为一个对象提供授权数据的任意实体,第一个TPM 使用者由 TPM 所有者创建。 (3)平台管理员(PlatformAdministrator):是控制平台中操作系统、文件系统或数 据的实体,有可能是TPM 所有者。 (4)平台用户(PlatformUser): 是在平台管理员允许下使用平台数据或资源的实 体,有可能是TPM 用户。 (5)操作者(Operator): 能直接对平台进行操作,有可能是TPM 所有者或TPM 用 户,但不大可能是平台管理员或平台用户。 (6)公共使用者(Public): 该角色可以执行平台中那些没有身份标识和认证约束的 操作系统、文件系统或数据的任意功能,同样也能执行那些没有授权约束的TPM 功能。 根据对象划分模块的思想,TSS 各层次的功能模块划分如图4-2所示。TSP 层的模 图42TSS 功能模块 -2 TCGTPM1. 101 可信计算 块包括:上下文管理、策略管理、TPM 管理、密钥管理、PCR 管理、数据加解密、HASH 管 理和通用模块。TCS 层的模块包括:上下文管理、密钥证书管理、事件管理和参数块生 成。TDDL 模块包括TDDL 接口管理。 下面分别介绍TSS 各层TSP 、TCS 和TDDL 的功能。 1)TSP 层功能 TSP 层位于TSS 的最上层,为应用程序提供访问TPM 的服务。TSP 层和应用程序 都位于用户层,并且在用户进程空间内,为应用程序与TPM 之间的数据传输提供保护, 可以为应用程序提供TPM 安全平台的所有功能。 TSPI 采用了面向对象的思想,所有的TSPI 函数通过对一个或多个对象句柄参数的 处理实现类的特定实例。应用程序需要用到的工作对象(WorkingObject)可以分为非授 权对象和授权对象。非授权对象包括PCR 合成对象、Hash对象、可迁移数据对象、代理 簇对象和DAA 对象;授权对象包括TPM 对象、密钥对象、非易失性数据对象和加密数据 对象。TSP 层中另外两类对象是上下文对象和策略对象。图4-3描述了对象的总体 关系。 图4-3 对象的总体关系 下面对图4-3中的对象关系进行说明。 上下文管理与上下文对象的关系:一个上下文管理对应0个或多个上下文对象。因 此,上下文管理与上下文对象是1:(1,…,的关系; 0,n) 上下文对象与TPM 的关系:如果TPM 是工作对象,则上下文对象和TPM 对象是 1∶1 的关系; 上下文对象与工作对象的关系:一个上下文对象可以对应多个工作对象。如果工作 对象没有创建,则工作对象与上下文对象没有对应关系。因此,上下文对象与工作对象是 1:(0,n) 2,…,的关系; 上下文对象与策略对象的关系:一个上下文对象产生时,其就对应了一个默认策略 (与授权有关的信息), 上下文对象还可以根据需要另外再创建策略对象。因此,上下文对 象与策略对象是1:(2,…,的关系; 1,n) 策略对象与工作对象的关系:多个工作对象可能对应1个或2个策略,如果需要用 到一个具体的策略,就需要再重新创建一个策略,因此,策略对象与工作对象是(0,1,…, 102 第4章可信软件栈 2):(1,…, 0,n)的关系。 图4-4描述了非授权工作对象的关系。 图4-4 非授权工作对象的关系 下面对图4-4中的非授权工作对象关系进行说明。 上下文对象与PCR 合成工作对象的关系:一个上下文对象可以创建多个PCR 合成 工作对象,也可以不创建PCR 合成工作对象。因此,上下文对象与PCR 合成工作对象是 1:(1,…, 0,n)的关系; 上下文对象与Hash工作对象的关系:一个上下文对象可以创建多个Hash工作对 象,也可以不创建Hash工作对象。因此,上下文对象与Hash工作对象是1:(0,1,…, n)的关系; 因为PCR 合成工作对象和Hash工作对象无须授权信息,与策略对象无关,故用上 下文对象创建它们时,不用考虑它们与策略之间的联系。 图4-5描述了授权工作对象的关系。 图4-5 授权工作对象的关系 301 可信计算 下面对图4-5中的授权工作对象的关系进行说明。 用户需要为其要使用的策略提供授权数据,通过TSPI提供的Tspi_Policy_ AsignToObject()方法某一策略可被分配给一些工作对象,例如TPM工作对象、加密数 据工作对象和密钥工作对象。每个工作对象利用其获得的策略对象的内部功能处理授权 的TPM命令。 上下文对象与TPM工作对象的关系:一个上下文对象创建一个TPM工作对象,此 工作对象与TPM所有者的策略对象一一对应; 上下文对象与加密数据工作对象的关系:一个上下文对象对应0个或多个加密数据 工作对象,因此, 0,n)的关系。一个上下文 上下文对象与加密数据工作对象是1:(1,…, 对象同时与一个默认策略相对应,加密数据工作对象直接与这个默认策略对象一一对应; 上下文对象与密钥工作对象的关系:一个上下文对象可以创建多个密钥工作对象, 也可以不创建PCR合成工作对象。因此,上下文对象与密钥工作对象是1:(0,n) 1,…, 的关系。每个密钥工作对象的策略对象中的授权信息不同,上下文对象须根据需要创建 多个不同的策略与密钥工作对象相对应。 下面简要分析TSP各功能模块。 ①上下文管理 上下文管理是TSS中使用的一个特定概念,用于为TSS这个多模块多对象的耦合 软件栈提供各模块间资源使用的动态管理,并为TSP层和TCS层之间的信息交互提供 支持。因此,TSP层的上下文管理的作用,一方面是通过对内部数据对象的管理来协调 各功能模块间的资源使用,另一方面包含一些与对象执行环境相关的信息,如用户的身 份、TSS的应用环境信息,用于在和TSS其他层次(如TCS)交互时使用。 ②策略管理 TSP策略管理功能用于为不同应用程序配置相应的安全策略,以及为应用程序提供 特定的授权秘密信息的处理操作(如回调和生命周期等)。策略对象与加密数据对象、密 钥对象和TPM对象之间存在对应关系。 ③TPM管理 TSP的每个上下文环境中都包括一个TPM对象,并且该TPM对象自动与一个策 略对象相关联,用于处理TPM所有者的授权数据。此外,TPM管理模块还提供了一些 基本控制和报告的功能。 ④密钥管理 在TSS中,每个密钥对象代表密钥树中的一个具体的密钥节点。每个需授权的密钥 对象,需要对应分配一个策略对象,用于管理授权的秘密信息。在TCG规范中一共定义 了7种密钥类型,每种密钥类型都赋予一种特定的功能,所有密钥可以笼统地划分为存储 密钥和签名密钥。它们可以进一步细化为:平台密钥、身份密钥、封装密钥、凭证密钥和 遗赠密钥。对称密钥被单独划分为鉴定密钥。 ⑤数据加解密 加密数据对象用于将外部(如用户、应用程序)产生的数据与系统关联起来(与平台或 PCR绑定),或者用于为外部提供数据加密/解密服务。 104 第4章可信软件栈 ⑥PCR 管理 PCR 操作用于建立系统平台的信任级别,并且通过PCR 对象提供对TPM 内部PCR 的选择、读、写等简单操作。所有需要使用PCR 信息的API 函数,都需要使用某个PCR 对象。 ⑦HASH 管理 HASH 管理用于为数字签名操作提供密码学安全功能,哈希值代表与特定的字符集 合对应的唯一值。 除以上7类根据API 操作对象划分的功能模块外,TSP 还提供一类特定的函数用于 直接完成对象属性与关联关系的管理,在此简称为通用模块。 2)TCS 层功能 TCS 层为本地和远程使用者提供唯一资源入口,它对TPM 的有限资源进行了抽象, 可以提供更高程度的虚拟化。TCS 提供了一个公共的服务集合,可以为多个TSP 使用。 TCS 接口(TCSI)用来提供一种直接而简便的方法来请求和控制TPM 服务。可把TCS 当作一个软件TPM,通过对TPM 软件层进行抽象很大程度上弥补了TPM 的以下缺陷: ①一次只有一个操作可以执行; ②只能通过一个驱动程序与其进行串行通信; ③本地软件与它的通信很受限制; ④可使用的资源有限; ⑤速度慢。 为了保证一些并发应用程序可同时使用本地TPM 资源,将TSS 核心服务提供给 TSP,这种服务还能提供给其他远程系统上的应用程序。通过软件验证和对特定状态下 TPM 功能的控制,TPM 远程证明能实现两个远程计算机之间的验证,从而保证不同系统 上软件间通信的安全性。在这样的现实需求背景下,TCS 提供本地和远程服务。 我们使用的TCS 接口定义在TSS1.2规范一起发布的TCS.WSDL 文件中,用Web 服务描述语言(WSDL)定义TCS 通用接口,可以使TSS 具有更好的平台兼容性,让更多 的开发者使用TSS 。 定义TCS 接口需要考虑如下目标。 ①对各平台的兼容性; ②对各种工具良好的支持; ③工业界接受认可; ④基于TCP/IP; ⑤向下兼容旧版本。 TCS 主要分为以下几个功能模块。 ①TCS 上下文管理 TCS 上下文管理包括上下文抽象数据对象内存管理、权限管理等。TCS 上下文管理 提供动态管理来有效使用服务提供者和TCS 的资源,每个处理都为一组TCG 的相关操 作集提供上下文。服务提供者内的不同线程共享同一个上下文,每个服务提供者将获得 一个独立的上下文。TCS 层的上下文管理也提供动态的句柄,它主要是管理内存和密钥 105