赞
踩
《Intel_SGX_Developer_Guide》文档下载地址在 这儿。
Intel SGX分为4个部分:
几个关键技术可以参考文档《SGX技术分析》
基本准则
输入、输出
多线程
其他重要准则
英特尔SGX并没有提供一个直接的机制(例如,通过自动生成的报告字段)来区分飞地的两个(或多个)运行实例。一个飞地的两个运行实例不能仅通过它们的报告中自动生成的数据来区分。要做到这一点,必须在用来建立对底层飞地信任的协议中添加一个nonce(建议使用KEYREQUEST.KEYID字段传递一个随机数给EGETKEY指令)。
enclave变量释放时必须使用 memset_s() 函数释放变量空间,否则会向外部泄露机密信息。
将enclave从旧系统迁移到新的系统需要一个第三服务来验证旧系统和新enclave身份。不论使用何种方式,密封密钥都不能在enclave外共享。因为它可能会危及该enclave先前密封的所有数据。
由于系统信息都是在不受信任场景中收集的,所以enclave需要针对意外和不一致场景进行设计和验证。
开发人员应考虑与标准 I/O 和系统功能相关的这些指令,这些功能依赖于这些硬件指令来实现其底层。收集主机系统属性、执行 I/O 或需要更高权限级别的功能应在安全区外部执行。在某些情况下,开发人员可能有权访问受信任的替代方案,例如受信任的时间和受信任的 I/O。但是,此功能并非由英特尔 SGX 架构直接提供,目前超出了本文档的范围。
平衡应用程序在enclave中执行的时间和应用程序进入/退出enclave的频率
如果需要开启SGX的纵深防御机制,需要打开编译器的纵深防御功能。
确保所有的代码是不可写的,避免注入攻击。除了enclave处理图像需要在初始化之后重定位,所以需要代码的写权限,这就有注入攻击的风险。所以enclave不能开放基于text处理的重定位权限。
enclave不支持地址空间布局随机化。
开发人员应谨慎使用 enclave 内的 C++11 属性。 特别是 noreturn 属性可能会导致潜在的安全风险。 例如,如果受信任的函数调用 noreturn 函数,则在函数调用之后放置的任何清理代码都将被忽略。
电池管理
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。