赵 军 ,王 晓
(1.张家口学院 数学与信息科学学院,河北 张家口075000;2.天津财经大学 理工学院,天津300222)
云计算环境中的信息安全问题是一个系统性的工程问题[1],以往的安全机制缺乏关联性,只是从某些方面去解决特定问题,不能构建整体性的解决方案[2]。 可信计算技术作为信息安全的有力保障[3],基于可信根构建贯穿系统各个关键部分的信任链,从信任的角度入手整合系统中的各项安全机制,为系统提供整体性的安全支撑。将国产可信计算技术[4]应用于云计算环境中,构建国产可信的云安全基础设施环境,是解决我国云安全问题的有效途径。 在最新颁布的《信息安全技术 网络安全等级保护基本要求》(等保2.0)中[5-6],加入了基于国产可信计算技术的可信验证要求,因此基于国产可信计算构建安全可信的云计算环境具有重要现实意义。
可信根作为信任的源头是可信计算技术的核心组件。 我国提出了自己的可信根可信密码模块(Trusted Cryptography Module,TCM)。 传 统 的TCM 适用于单机平台,通过TCM 可以保证单机计算系统的安全可信性,但是无法满足云计算环境中多虚拟机对可信根的使用需求。 为了使TCM 适用于云计算环境,本文提出一种TCM 虚拟化方案,构建云可信根(Cloud TCM,C-TCM)架构,为云计算节点中物理宿主机及多虚拟机提供可信根服务,为构建安全可信的云计算环境提供有力支撑。
目前针对可信根虚拟化主要有三种解决方案:基于软件的可信根虚拟化方案、基于硬件的可信根虚拟化方案和可信根半虚拟化方案。
基于软件的可信根虚拟化是指用软件模拟硬件芯片功能,虚拟可信根提供与物理可信根一致的访问接口,可实现可信根的大部分功能,只有少数对安全性要求较高的功能由物理可信根执行。 最早提出基于软件的可信根虚拟化方案的是IBM 的研究员BERGER S[7]等人,他们基于Xen 架构设计并实现了TPM 的虚拟化架构。 为了提高虚拟可信根的安全性,ANDERSON M J[8]等人和MURRAY D G[9]等人对BERGER S[7]等人的方案进行了改进,基于隔离增强安全性的思想,把 vTPM 实例运行在隔离域中。当前Xen 架构采用StubDom[10]机制,每个子域中运行一个Mini-OS[11]。 将虚拟根管理器和虚拟根实例分别放置在不同的子域中进行隔离,以增强安全性。 HE R Y[12]等人提出了基于软件的虚拟可信根的uTPM,HOSSEINZADEH S[13]等人提出了基于容器的可信根虚拟化方案。 严飞[14]等人提出了一种基于Intel 软件扩展保护(Software Guard Extension,SGX)技术的vTPM 安全增强方案(vTPM Security Enhancement,vTSE),为vTPM 实例提供了有效的安全保障。在安全性方面,基于软件的虚拟化方案的隔离性较差,密码资源缺乏硬件保护;在效率方面,软算法与硬件相比性能不足,效率较低。
基于硬件的可信根虚拟化是指对物理可信根的设计实现进行改进,在可信根物理环境中同时运行多个虚拟根实例,实现虚拟根对硬件可信根资源的共享。 刘明达[15]等人提出一种基于SR-IOV 的TCM 硬件虚拟化方案并构建了可信虚拟环境的信任链。 张伶俐[16]等人基于嵌入式系统实现了虚拟TCM 并构建了嵌入式系统中的信任链。王冠[17]等人对基于可信根服务器的虚拟TCM 密钥管理功能进行了相关研究。 段翼真[18]等人提出了一种支持多域访问的可信云终端设计,实现了TCM 的虚拟化和信任链传递机制。 与软件虚拟化方案相比该方案的安全性和执行效率更高。
可信根半虚拟化方案是指通过在虚拟机监视器层添加对底层物理可信根访问的调度机制,并对可信根内部资源进行虚拟化,实现虚拟机对物理可信根的共享。 ENGLAND P[19]等人提出了TPM 半虚化方案,通过在Hypervisor 层添加软件组件,对物理根的使用进行调度协调,实现在多个虚拟机之间安全共享一个物理TPM。 YAP J Y[20]等人提出了基于TPM2.0 规范的企业化TPM 半虚拟化架构。 该方案可为虚拟机提供物理可信根的功能,但有些功能接口会发生变化。
对各种可信根虚拟化方案的对比如表1 所示。
表1 可信根虚拟化方案对比
通过上述分析对比可知,每种虚拟化方案有各自的优势和缺点。 本文结合硬件虚拟化和半虚拟化方案的特点,提出一种云可信根(Cloud TCM,C-TCM)设计方案,对TCM 物理可信根进行扩展,并在虚拟机监视层添加管理机制,使资源有限的云可信根物理环境能同时支持多个虚拟可信根运行,在保障安全性同时,提高执行效率,从而满足云计算平台对可信根的使用需要。
针对物理TCM 无法同时为云服务器的物理宿主机和虚拟机提供可信根服务的问题, 提出一种适用于云计算环境的云可信根C-TCM 架构。 该方案结合了可信根硬件虚拟化方案和半虚拟化方案的特点,对TCM 硬件芯片的设计实现进行改进扩展,并在虚拟机监视器层部署虚拟可信根管理机制, 实现宿主机可信根和虚拟机可信根对C-TCM 硬件资源的共享, 同时满足物理宿主机及虚拟机对可信根的使用需求。 云可信根C-TCM 的总体架构如图1 所示。
C-TCM 总体架构包括位于硬件层的C-TCM 物理环境,位于宿主机操作系统层的C-TCM 物理驱动和vTCM 上下文安全存储机制,位于虚拟机监视器层的vTCM 管理机制和vTCM 后端驱动,以及位于虚拟机层的vTCM 前端驱动。
图1 C-TCM 总体架构图
在硬件层,对原有TCM 硬件芯片的设计实现进行改进和扩展,构建C-TCM 物理环境。为了同时满足物理宿主机和虚拟机的可信根使用需求,在C-TCM物理环境中分别构建为物理宿主机提供可信功能的宿主机可信根(host TCM,hTCM),以及为虚拟机提供可信功能的虚拟可信根(virtual TCM,vTCM)。由于受资源限制,C-TCM 物理环境只能为有限个vTCM 提供硬件资源支持。 当虚拟机的数量多于C-TCM 支持的vTCM 数量时,通过vTCM 调动机制对vTCM 上下文进行调度,实现虚拟根对vTCM 资源的共享,从而支持多个虚拟机的可信根使用请求。hTCM 始终位于C-TCM 内部为物理宿主机提供可信支持,不参与调度。
C-TCM 物理驱动位于宿主机操作系统层,负责接收对C-TCM 的使用及管理命令。 C-TCM 物理驱动接收三种命令,分别为:物理宿主机对可信根hTCM的使用请求、虚拟机对可信根vTCM 的使用请求以及vTCM 管理机制对C-TCM 的管理命令。 为了区分hTCM 命令及vTCM 命令,在vTCM 命令头添加vTCM 标识及发出该命令的虚拟机编号。vTCM 调度机制根据虚拟机编号确定与其关联的虚拟可信根。
vTCM 上下文中存储了vTCM 的关键信息,包括虚拟背书密钥(virtual Endorsement Key,vEK)、虚拟平台身份密钥(virtual Platform Identity Key,vPIK)、虚拟存储根密钥(virtual Storage Root Key,vSRK)、虚拟平台配置寄存器(virtual Platform Configuration Register,vPCR)值、非易失性寄存器值、各类证书以及与虚拟机保持绑定的关联信息等。 当vTCM 调度机制将vTCM 上下文从C-TCM 物理环境中调出时,通过hTCM 将其加密存储到宿主机硬盘上。 当需要重新调入到C-TCM 物理环境中时,需hTCM 对其进行解密后再调入。
受硬件资源限制,C-TCM 仅能支持数量有限的vTCM。 为了实现多虚拟机对C-TCM 的共享,在虚拟机监视器层部署vTCM 管理机制, 包括vTCM调度机制和vTCM 生命周期管理机制。
2.3.1 vTCM 调度机制
vTCM 调度机制负责接收从vTCM 后端驱动传递过来的上层虚拟机的可信根使用请求,将其传递给相应的虚拟可信根。 如果当前虚拟机对应的虚拟可信根在C-TCM 物理环境中运行,则vTCM 接收并执行请求命令,并将响应结果回传给虚拟机。 如果虚拟可信根在C-TCM 物理环境外部,则根据调度算法对安全存储在硬盘上的虚拟根上下文进行调度,将其从外存调入到C-TCM 物理环境内部,再执行虚拟机的请求命令。 在物理资源受限情况下,通过vTCM 调度机制实现vTCM 对C-TCM 硬件资源的共享,支持了多虚拟机对可信根的使用请求。
为了减少vTCM 上下文调度切换的次数,为每个vTCM 创建一个命令缓存队列,如图2 所示。 将对vTCM 的使用请求暂存在缓存队列当中,如对vTCM1的请求有A1、A2、A3。
图2 虚拟根命令缓存队列
为了提高调度效率,调度的优先级由虚拟机等待时间及缓存队列中的命令数共同决定。 设定一个等待时间阈值为ρ,当虚拟机的等待时间超过ρ 时,优先对其vTCM 上下文进行调度。 当等待时间不超过ρ 时,优先调度缓存命令数最多的vTCM 上下文。设vTCMn 缓存队列中的命令数为ωn, 则所有等待调度的vTCM 的命令数构成集合W,W=(ω1,ω2,…,ωn)。 设vTCMn 等 待 调 度 的 时 间 为τn,则 所 有vTCM等 待 调 度 的 时 间 构 成 集 合T,T=(τ1,τ2,…,τn)。 从集 合W 中 选 出 缓 存 队 列 中 最 大 值ωi=Max(ω1,ω2,…,ωn),i∈1,2,…,n。从集合T 中选出等待时间最大值φj=Max(φ1,φ2,…,φn),j ∈1,2,…,n。 具 体 调度算法如下:
//当等待调度时间没有超过阈值ρ 时
//则调度缓存队列中命令数最多的vTCMi 上下文
//否则,调度等待时间超出阈值ρ 的vTCMj 上下文
vTCM 上下文的调度优先级由等待时间和缓存命令数两个因素共同决定,既保证了虚拟机等待时间不会过长,也满足了对虚拟根使用较多的虚拟机的请求。
2.3.2 vTCM 生命周期管理机制
vTCM 生命周期管理机制负责对vTCM 生命周期中的各个阶段进行管理,包括vTCM 的创建、初始化、迁移、销毁等,从而实现vTCM 与虚拟机的绑定及生命周期同步,保证虚拟机在整个生命周期中的安全可信性。
(1)虚拟可信根创建
云计算节点接收到控制节点发出的虚拟机创建指令后,由虚拟机监视器为虚拟机分配必要的资源,包括虚拟CPU、虚拟内存、虚拟网络设备等。 vTCM生命周期管理机制在虚拟机创建之前为其创建一个空的vTCM 上下文,并分配唯一的ID 号、易失性存储空间、非易失性存储空间等资源。 通过虚拟根ID 及虚拟机ID 实现vTCM 与虚拟机的关联绑定。
(2)虚拟可信根初始化
在虚拟机启动之前,通过vTCM 调度机制将vTCM上下文调入到C-TCM 的物理环境中,对其进行初始化。 由hTCM 为vTCM 生成各类关键密钥,包括vEK、vPIK 及vSRK,并为其颁发vEK 证书。 在虚拟机首次启动时,获取启动各阶段的度量值形成度量基准值,存储在vTCM 的非易失寄存器中。
(3)虚拟可信根迁移
vTCM 生命周期管理机制截获到虚拟机迁移指令后, 首先验证迁移源平台和目标平台的可信性,并建立迁移安全通道。 通过安全通道将虚拟根数据迁移到目标平台,完成虚拟可信根的迁移。 更新源平台及目标平台上的关联列表,保证虚拟可信根和虚拟机之间的绑定关系。
(4)虚拟可信根挂起
当vTCM 生命周期管理机制拦截到虚拟机挂起指令时,需将其相应的虚拟根设置为挂起状态。 通过vTCM 调度机制将虚拟可信根上下文从C-TCM物理环境中调出,对其非易失性存储器中的虚拟根密钥信息、vPCR 值以及易失性存储器中的寄存器状态等信息进行安全存储,以备虚拟根恢复之用。
(5)虚拟可信根恢复
vTCM 生命周期管理机制拦截到虚拟机恢复运行指令时,首先恢复其虚拟根执行。 将安全存储在物理磁盘上的vTCM 上下文信息解密后调入C-TCM中,并根据挂起时保存的寄存器状态信息,恢复寄存器运行,准备为虚拟机提供安全服务。
(6)虚拟可信根销毁
vTCM 生命周期管理机制拦截到虚拟机销毁指令时,将与虚拟机绑定的虚拟根销毁。 如果虚拟根上下文在C-TCM 内部, 则首先将其调出再进行销毁删除。 如果虚拟根上下文在外部磁盘加密存储,则直接将其进行删除。
vTCM 生命周期管理机制解决了虚拟根生命周期管理问题,实现了虚拟根生命周期与虚拟机生命周期的一致性,保证了虚拟机全生命周期的安全可信性。
在客户虚拟机上运行可信应用,vTCM 前端驱动负责接收虚拟机对可信根的使用请求,并传递到虚拟机监视器层的后端驱动,进一步通过vTCM 管理机制、C-TCM 物理驱动将请求传递给虚拟可信根。 当虚拟可信根完成请求时,将结果回传给虚拟机,完成对可信根的使用。
以上为C-TCM 的总体架构,通过该架构实现TCM 的虚拟化,同时为宿主机和各个虚拟机提供基于硬件可信根的保护,保证云服务器整体的安全可信性。
本文提出一种国产可信根TCM 的虚拟化架构,为云计算平台设计了云可信根C-TCM,该方案解决了物理TCM 无法应用于云计算环境为物理宿主机和虚拟机提供可信根功能的问题,通过C-TCM 可保证物理宿主机和虚拟机启动和运行过程中的安全可信性。 目前面临的主要问题是硬件虚拟化涉及对芯片的改进和扩展,实现难度较大。 在下一步的研究中,将实现C-TCM 芯片的原型系统,对其功能和性能进行相关验证。