首页 能链洞察 区块链百科

SGX(Ⅱ)| 安全存放数据的“黑匣”

SGX(Ⅱ)| 安全存放数据的“黑匣”

发布时间:2020.11.08
过去的十年,为了保护敏感代码和数据,可信执行环境(TEE)发展迅速。各类CPU供应商都推出了他们的TEE方案,例如ARM TrustZone、Intel SGX和AMD SEV,以创建一个安全的执行环境。其中,Intel SGX可以说是目前TEE商用方案中使用最广泛的子集之一。本系列将聚焦介绍SGX的基本技术原理,并结合当前可信计算领域存在的安全问题,解析该技术在安全方面的优势及其应用需求。

在上一篇中,我们介绍了英特尔的Software Guard Extensions (SGX)是一系列可信计算设计的最新迭代,旨在通过利用可信硬件来解决安全的远程计算问题。

从用户和应用程序开发人员的角度来看,SGX芯片就像安全存放数据的“黑匣”,软件代码、数据和堆栈被存储在Enclave(飞地/安全容器)中,并受到硬件强制访问控制策略的保护,使其免受恶意实体的攻击。

而创建一个启用SGX的应用程序,
离不开三个关键环节:飞地,认证和密封。

一、建立飞地

Enclave(飞地)就像一个被保护的安全容器,
用于存放应用程序敏感数据和代码。

英特尔SGX要求应用设计分成两个组件:可信组件,即Enclave,它是应用程序代码及其缓存数据/内存运行的地方;不可信组件,是保存应用程序及其它模块的剩余部分。

在应用程序设计期间,确定应用程序的哪一部分需要在Enclaves中运行是非常重要的。

一方面,选择放入受信任组件的代码与应用程序的其余部分是隔离的。初始化Enclave并将代码加载到内存后,就不能从不受信任的组件读取或更改该代码。另一方面,应用程序可以设有多个受信任组件,并且可信组件应尽可能小,以减少攻击面。



二、认证协议

很多时候,Enclave需要与同一平台上的其他Enclave协作。例如,如果Enclave太小而不能容纳所有信息,则需要进行数据交换。因此,双方必须向对方证明自己是可信任的。

另外,当启用SGX的ISV客户端请求机密信息时,例如密码管理服务,那么客户端必须向服务器证明,客户端应用程序运行在可安全地处理机密信息的受信任平台上。这两个条件都需要有安全执行环境的证明。英特尔SGX将此证明过程称为认证。

针对上述两种场景,分别有两种类型的认证:本地认证,即发生在同一平台上的两个Enclave相互进行身份验证时;远程认证,则是平台间的远程认证, 用于远程的认证者认证enclave的身份信息。例如为ISV提供这种客户端到服务器的验证。

换句话说,基于SGX硬件的认证保证了“这是在正确的平台上执行的正确的应用程序”



三、密封数据

通常,当电脑进入睡眠、关机或者应用程序退出时,Enclave中的数据会被销毁或丢失。但是,如果这些机密数据需要被保存以供将来在Enclave中使用,则必须在其关闭之前将数据存储在Enclave边界之外。

为了将机密数据保存到不可信的介质中并保证数据的隐私性,就需要Intel SGX的数据密封功能。这其实类似加密和解密操作,并有两种密钥策略可被选择:

基于Enclave的独有密钥:此方法使用EGETKEY指令将当前Enclave MRENCLAVE绑定到密封密钥。因此,只有具有相同MRENCLAVE的Enclave才能生成解封数据的密钥。如果Enclave相关的任何属性已更改,则MRENCLAVE也将更改,密封的数据则无法解密。简单来说,就是只有同一台电脑的同一个Enclave才可以解封数据。

基于Enclave的授权密钥:此方法使用EGETKEY指令将Enclave标识(初始化时存储在MRSIGNER)绑定到由根密钥派生的密封密钥中;Enclave的产品ID也绑定到派生的密封密钥。因此,只有具有相同MRSIGNER测量和相同产品ID的Enclave才能检索密封密钥并解密数据。但MRSIGNER允许旧版本应用程序密封的数据被新版本应用程序或者其他版本的应用程序解封读取。因此,两个不同的应用程序的两个不同的Enclave亦可共享数据。

由此,英特尔SGX通过可信硬件实现安全计算,也为区块链领域应对安全计算等挑战提供全新的解决方案。

*本文图片来源于网络,仅供学习交流使用,不具任何商业用途,图片版权归原作者所有,如有侵权还请联系我们,谢谢!