TEE 临时
TEE的工作原理可以分为以下几个步骤:
隔离:TEE在处理器内部创建一个独立的执行环境,与其他应用程序和操作系统隔离。
加密:TEE通过硬件加密技术来保护数据和代码的安全。在数据和代码进入TEE之前,它们会被加密;在数据和代码离开TEE时,它们会被解密。这样,即使攻击者能够窃取数据或代码,也无法破解其内容。
完整性检查:TEE通过完整性检查来确保代码和数据在执行过程中没有被篡改。这通常是通过数字签名和哈希算法来实现的。
远程认证:TEE支持远程认证,允许用户通过安全通道验证TEE的真实性和完整性。
功能与优势
TEE具有以下功能和优势:
数据保护:TEE可以保护敏感数据的安全,防止数据泄露和窃取。
代码保护:TEE可以保护代码的安全,防止代码被篡改或者窃取。
抵抗攻击:TEE可以抵抗来自操作系统、硬件和其他应用程序的攻击。
简化安全设计:通过使用TEE,开发人员可以将安全功能集成到应用程序中,而无需依赖复杂的软件和硬件安全机制。
TEE应用场景
TEE在以下场景中具有广泛的应用价值:
金融服务:TEE可以保护金融交易数据的安全,防止数据泄露和窃取。
物联网(IoT)安全:TEE可以保护IoT设备的固件和数据安全,防止设备被篡改或者攻击。
云计算:TEE可以为云计算提供安全的计算环境,保护用户数据和代码的安全。
数字版权保护:TEE可以保护数字内容的版权,防止未经授权的复制和分发。
身份认证:TEE可以提供安全的身份认证服务,保护用户的隐私和安全。
区块链:TEE可以为区块链提供安全的智能合约执行环境,保护链上数据和代码的安全。
TEE技术实现
目前,市场上主要有两种TEE技术实现:英特尔的SGX(Software Guard eXtensions)和ARM的TrustZone。
4.1 英特尔SGX
英特尔SGX是一种基于x86架构的TEE技术,它通过创建称为“安全内存执行(Secure Memory
Execution,SME)”的硬件隔离区域来实现安全计算环境。英特尔SGX支持软件定义的内存保护区域(enclaves),这些区域可以由应用程序创建和管理。
4.2 ARM TrustZone
ARM TrustZone是一种基于ARM处理器的TEE技术,它通过将处理器划分为“安全世界(Secure World)”和“非安全世界(Non-
secure
World)”来实现安全计算环境。安全世界包含一个名为“可信执行环境(TEE)”的专用操作系统,专门用于运行安全应用程序。非安全世界则运行正常的操作系统和应用程序。
TEE挑战与未来发展
尽管TEE技术具有巨大的潜力,但仍面临一些挑战:
跨平台兼容性:目前,不同处理器厂商的TEE实现并不完全兼容。这对开发人员和用户来说可能会带来额外的成本和学习曲线。
资源限制:TEE通常在处理器内部运行,可能受到处理能力和内存资源的限制。这可能导致性能下降和资源竞争。
侧信道攻击:TEE可能仍然受到侧信道攻击的威胁,例如通过分析功耗和电磁泄漏来窃取敏感信息。
标准化:TEE技术尚未完全标准化,这可能影响其广泛应用和发展。
尽管存在挑战,但TEE技术的未来发展仍非常广阔。随着技术的不断成熟和标准化,我们可以期待TEE将在更多场景中发挥重要作用,为保护数据和代码安全提供可靠的支持。
TEE当前的标准。
GlobalPlatform(全球最主要的智能卡多应用管理规范的组织,简称为GP)从2011年起开始起草制定相关的TEE规范标准,并联合一些公司共同开发基于GP TEE标准的可信操作系统。因此,如今大多数基于TEE技术的Trust OS都遵循了GP的标准规范。
开发 enclave 程序
你想在你的电脑上进行enclave的开发/使用,需要经过下面的步骤:
作为enclave的开发者,你首先需要生成一组RSA3072公私钥对,私钥自己保存好用于后面对enclave程序的签名。公钥提交给Intel官方申请加入一个白名单。之后,开发者拿出设计好的程序代码,用RSA3072私钥对源代码hash,配置文件(包括产品ID,序列号等)进行签名,再将签名、RSA3072公钥和上述源代码,配置文件等打包到一起,这样就得到了一个enclave文件。注意enclave支持的程序功能有限,如不支持I/O。用户在设计程序代码时应当参考Intel官方说明书以确定范围。
此时的enclave文件不能直接被加载,还需要一个授权文件:开发者向Intel提交白名单申请一段时间后会收到一个授权文件,该文件是和开发者的RSA3072公钥绑定的。之后,开发者将签过名的enclave文件连同授权文件以及其他相关东西打包到一起,统称为安装包。安装包可以发给任何用户,并可以任何一台装有SGX的电脑上加载enclave文件。
作为一个enclave的用户,只要获得完整的安装包(主要包括enclave文件以及授权文件)后就可以开始加载enclave。首先,程序源代码会被加载到SGX受保护的内存里面,但不做任何执行。然后SGX判断程序的hash值是否与enclave文件里附带的hash值匹配,用公钥验证签名是否合法,以及验证授权文件是否合法。其整个判断过程都是写死在CPU电路里的,可以认为难以被篡改。一旦验证通过则enclave程序加载完毕,无法再作修改。即使对于拥有私钥的开发者而言,一旦部署完毕后想要修改SGX代码,也只有重新签名并初始化一个新的enclave。
SGX的交互
我们已知 SGX 的内存只有enclave内部方法能够访问,那么我们该如何使用这些方法来实现SGX内部和外部的交互呢?这依赖于两种特殊的方法类型,ecall和ocall。
一个enclave内部方法类型为ecall,如果它能够被enclave外部程序(即不可信环境)调用。换言之,ecall方法为enclave外部访问enclave内部的唯一通道,但其执行过程是受可信环境保护的。所有未声明为ecall的方法都无法在enclave外部进行调用。
用户在事先构建动态库时可以任意指定哪些方法为ecall。同时用户在这一步应当确保ecall函数的返回值不会造成任何隐私泄露。
ocall是enclave内部调用enclave外部方法的类型。由于所调用ocall方法是运行在不可信的环境中,用户要特别小心其中存在窃取信息的可能。Intel推荐尽可能少的声明ocall方法。
不难发现,两个enclave之间可以通过外部内存来进行交互: 通过调用第一个enclave的ecall方法将欲发送的信息写入外部内存,然后第二个enclave调用ocall方法将外部内存对应位置的信息写入enclave里面。然而此次交互涉及到了不可信环境(外部内存),可能会造成信息被篡改。
Intel提供了一套直接让同一平台中两个enclave进行数据交互的手段,称作local attestation。其包含认证交互双方身份(均属于enclave)的过程,交换数据的过程,同时能获取交互双方enclave的hash值。该过程能可以保证全程交互数据外部不可见,且不依赖于外部内存的安全性(事实上,其原理用到了密码学中的ECDH秘钥交换,具有更高级别的安全性)。
更进一步的,Intel提供跨平台的enclave间数据交互,称作remote attestation。该过程也能达到和local attestation同样的目的,但每次进行remote attestation要求和Intel官方服务器进行一次交互,即每次交互都依赖于联网以及Intel官方服务器的可信性。