初识机密计算
2022-04-29孔蓄
孔蓄
在云计算时代,云上数据按照数据所处状态被分为三大类,分别是:
Data in Transit,网络传输过程中的数据,传输状态;
Data at Rest,数据在磁盘和处于存储过程中的数据,存储状体;
Data in Use,处于内存中,处于计算中的数据,其为使用状态。
对于数据的安全,专家和业界在过去几十年的努力使得传输过程中的数据安全得到了保障,比如数据链路层加密,各种各样的传输协议加密的使用。对于存储中的数据安全,很多数据库,文件系统或者磁盘也是可以直接加密的。但是不管数据是在传输状态中还是在存储的时候加密,数据在最终使用的时候,在CPU和内存里都是明文。这些使用中的明文要不要保护,答案是肯定的,而且是迫切的。
针对网络和存储设备的安全威胁,越来越多的安全技术被开发出来以应对和保护,攻击者以使用中的数据为目标,机密计算就是针对这种威胁模型,来对数据在使用状态中进行保护。
随着云计算的大规模部署,机密计算旨在允许将云提供商从可信计算基础(TCB)中移除,以便只有硬件和受保护的应用程序本身在可信边界内。这使云客户可以放心、安全地把业务负载转移到公有云上。而机密计算正在迅速发展,为企业和最终用户不断提供新的工具以保护敏感数据和代码免受执行期间发生的威胁。同时机密计算解决方案提供商为机密计算开发了不同的方法,例如把应用程序的代码划分为受信任和不受信任的组件,再到几乎不做更改的情况下实现现有应用程序的迁移。这些不同的方法支持不同的应用场景,但最终目标都是希望帮助确保敏感数据、代码、工作负载的机密和完整性。
机密计算依赖硬件
实现机密计算,硬件辅助是必要的。说到机密计算,不得不先说可信执行环境(TrustExecutionEnvironment,TEE)。TEE被定义为提供一定级别的数据完整性、数据机密性和代码完整性保证的环境,具有运算和储存功能。其基本思想是:在硬件中为敏感数据单独分配一块隔离的内存,确保敏感数据的计算在这块内存中进行,并且除了经过授权的接口访问之外,硬件中的其他部分不能访问这块内存中的数据,以此来实现敏感数据的隐私计算。机密计算是通过在基于硬件的可信环境中执行计算来保护使用中的数据,对以下3个属性提供一定程度的保证。
数据机密性:未经授权的实体无法查看在TEE内使用中的数据。
数据完整性:未经授权的实体不能添加、删除或更改在TEE中使用中的数据。
代码完整性:未经授权的实体不能添加、删除或更改TEE中执行的代码。
根据具体TEE的技术实现情况,它还可以提供代码机密性、经过身份验证的启动、可编程性、可认证性和可恢复性。在机密计算定义范畴中,未经授权的实体可能包括主机上的其他应用程序、主机操作系统(Host OS)和虚拟机监控程序、系统管理员、云服务提供商、基础设施所有者或对硬件具有物理访问权限的任何其他人。
基于硬件的TEE使用硬件支持技术,为该环境中的代码执行和数据保护能够提供更高的安全保障。构建基于硬件的TEE,对其基本的硬件需求有3个方面:
①要实现基于硬件隔离的空间。隔离的目的有2个,一个是保证数据的机密性,另一个是保证数据的完整性。要保证数据不能被他人获取,同时也要保证数据不能被他人修改,而这2种目的都是靠硬件来实现的。
②隔离之后,还必须要有硬件可信根。比如在硬件出厂的时候烧录一些硬件的关键登记信息,唯一的设备密钥和相应证书,所有的安全启动和验证等过程都是从硬件可信根开始的。如果没有把信任根植入到受保护的硬件里面去,就达不到TEE的基本需求。
③验证。在做完隔离和硬件可信根之后,对于系统部署在云上的,还需要把业务负载如代码,数据等上传到云上运行,如何确保代码和数据是运行在TEE里面,需要一个基于密码学的证明方式,必须通过获取相关的证据去验证代码和数据确实是运行在TEE里的,这就是TEE验证的需求。
基于硬件的TEE技术方案
基于硬件的虚拟机隔离技术要解决的是保护来自客户机Guest对云主机host的安全威胁,而机密计算要应对的是来自云主机和基础设施对客户机Guest以及运行在上面的容器业务的安全威胁。为此,Intel开发了对应的基于硬件的技术来满足市场的需求,比如Intel虚拟化技术VT-x,应用它可以让一个物理的CPU工作起来像多个CPU在并行运行,从而使得在一台物理服务器内可以同时运行多个Guest,实现虚拟机之间的隔离。而对于基于硬件的TEE解决方案,Intel公司创新开发了Intel Software Guard Extensions(Intel SGX),Intel Trust Domain Extensions(Intel TDX)等技术。例如一个完整的机密计算容器方案,在此方案中,应用安全容器kata containers来支持容器业务的隔离,使用Intel SGX来做基于硬件的TEE并支持整个kata containers虚拟机运行其中。同时借助Intel TDX的远程验证能力做TEE的验证。本文介绍了2个基于硬件技术的TEE:Intel SGX和Intel TDX。
Intel软件防护扩展技术Intel SGX
Intel SGX的设计主旨是为用户应用程序提供可信的执行环境,使得应用程序有能力在用户地址空间中开辟一段特别的、受保护的内存空间,并对这段受保护的内存空间实行严格的访问控制和加密操作来保障数据机密性和代码完整性,确保即使是Hypervisor、BIOS,操作系统等特权应用都不能随意访问这段地址空间,这一段地址空间被称之为飞地(Enclave)。
按照文章的前部分介绍,把应用程序部署在云上,需要驗证程序确实运行在TEE里,具体更多的SGX技术细节,请参见Intel官方的技术文档以及Intel架构开发者手册。验证包括本地验证和远程验证,本地验证指在同一个平台上,让不同的Enclave互相验证Trusted Computing Base(TCB)。远程验证指让一个平台中运行的Enclave向远端的信赖凭证者Relying Party证明自己的TCB,证明自己运行在SGX TEE中,并且没有被篡改,同时证明当前的CPU SGX安全版本信息。
SGX应用程序涉及2部分:安全区和非安全区。开发者或者用户可以把涉及敏感数据的处理,Key的保护等都放在Enclave里面。从而将应用程序的代码,数据划分为受信任和不受信任的组件,因此开发者或者用户需要决定哪些组件应该置于Enclave内部,哪些置于Enclave外部。
Intel信任域扩展技术Intel TDX
Intel TDX旨在将虚拟机(VM)与平台上的虚拟机管理程序(VMM)和任何其他非信任域Trust Domain (TD)的软件隔离,以保护TD VM免受各种软件的安全威胁。TDX的设计思路是将整个虚拟机VM放在一个TEE可信执行环境里,这样不管应用在私有云还是公有云上,都不需要再对应用程序和数据做受信任和不受信任的划分和修改,只要操作系统支持就行。TDX基本思路就是引入新的CPU工作模式,然后通过对内存加密技术,将2个虚拟机用不同的key加密,同时key由CPU来直接进行管理。本质上讲,TDX是通过2种技术方式来配合实现,一种就是新的CPU模式———安全仲裁模式(Secure Arbitration Mode,SEAM),第二种是多密钥内存加密技术方式(Multi-key Total-Memory-Encryption,MKTME)。
SEAM模式使用新的指令,例如SEAMCALL,SEAMRET,SEAMOPS,TDCALL等来实现和TD OS以及Host/VMM交互。同时提供特定区域的物理内存来保护Intel TDX Module代码模块,通过Intel Authenticated Code Module(SEAMLDR)来装载。多密钥内存加密MKTME技术中,MKTME engine通过PCONFIG指令来分配和设置各个TD VM的内存加密Keys。TDX将内存分为2个部分,私有和共享内存。在TDX下还是需要在外部加固的,加固的时候需要共享内存,这部分内存外部是可以读取的,因为有些虚拟化或半虚拟化设备需要和外部通信时,是需要host操作系统有能力提供网络等服务的。当前Intel TDX认证的本质原理和SGX认证类似,也需要提供远程证明来验证其运行在TEE环境里。
Intel TDX和Intel SGX是用来解决不同问题的。TDX是把整个软件包不做修改直接放到虚拟机上就能实现安全,而SGX关注应用层面,通过对飞地Enclave来保障机密性和完整性的,用户根据业务场景需求可以选择不同的技术。
机密计算的使用场景
机密计算技术正在迅速发展,为企业和最终用户提供新的工具,保护敏感数据和代码免受数据执行期间受到安全威胁,这些威胁以前很难得到保护,尤其伴随公有云,云邊协同以及区块链的规模应用,机密计算的应用场景也越来越多,如下是几个比较常用用例:
密钥、秘密、凭证和令牌的安全存储和处理
云计算关键信息资产的存储和处理需要一个符合安全标准的硬件安全模块如Hardware Security Module(HSM),但是传统HSM硬件的专有性质增加了它们的成本,限制了它的可扩展性,并为在云计算和边缘计算环境中部署带来了成本和兼容性挑战。不管是独立软件供应商(ISV)云计算提供商(CSP),机密计算都已经在被使用,在数据中心、私有云,公共/混合云中,甚至在物联网用例的网络边缘存储和处理加密和机密信息使用标准化的计算基础设施。使得密钥管理应用程序在基于硬件的TEE中存储和处理加密密钥、机密和令牌,提供数据机密性、数据完整性和代码完整性更加灵活。
公有云
在公有云场景中,信任必须放在云提供商的多个层面上:硬件、核心和外围设备的固件;主机操作系统、虚拟机管理器程序和云编排系统本身。虽然公有云提供商在竭尽全力保护堆栈的所有层,但机密计算提供了额外的保护保证,并通过基于硬件的TEE保护正在使用的应用程序和数据,显著减少了最终用户必须信任的层数,对于未经授权的参与者来说,获得对受保护的应用程序代码和数据的访问权限变得更加困难,即使他们拥有对硬件的物理访问权限、对主机操作系统/虚拟机监控程序的root访问权限或对编排系统的特权访问权限。机密计算旨在允许将云提供商从可信计算基础中移除,以便只有硬件和受保护的应用程序本身才在攻击边界内。这使得许多工作负载能够转移到公共云上,而以前由于安全问题或法规遵从性要求,这些工作负载无法转移到公共云上。
区块链
区块链是一个共享的、不变的分类账,记录参与者网络之间的数据、数字资产或货币交换。区块链提供了记录和验证交易的基础设施,而无需集中的第三方。区块链可以为供应链活动提供透明度,促进数字资产的交换,或支持合规流程,如实名认证(Know Your Customer,KYC)。区块链的一个关键特征是,它确保应该有一段共同数据的参与者确信他们看到的是相同的东西,并且一旦进入区块链,数据是不变的。应由应用程序开发人员确保PII等敏感数据不存储在不可变的区块链上。机密计算可用于增强基于区块链的系统的实施。通过结合机密计算和区块链技术的能力,用户可以利用基于硬件的TEE提供认证和验证服务,优化可扩展性、隐私和安全性。区块链用户之间数据一致性的保证通常取决于各方独立验证所有当前数据有效性所依赖的历史数据。这需要了解这些历史数据集,这是一个潜在的可扩展性或隐私问题。用户可以在基于硬件的TEE中执行智能合约,而不是自己独立访问和验证历史数据与相关智能合约。一旦交易完成,TEE将提供认证服务,以证明交易的可靠性,这意味着后续参与者无需再次为自己进行验证。基于TEE的认证服务还可以帮助解决协商一致协议带来的计算和通信效率低下等问题。
边缘云与物联网
在家庭路由器中进行DDoS检测的情况下进行本地搜索和过滤,这些都是机密计算环境非常适合的例子。在大多数情况下,TCP/IP数据包元数据需要保密,因为可能会推断出敏感的用户行为。其他示例包括边缘机密机器学习处理,例如用于减少后端网络延迟和/或带宽的视频元数据生成;摄像头监控,机密计算技术可用于帮助缓解依赖于对设备的物理访问的攻击。