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