Intel SGX开发者参考书(五)—— Intel SGX SDK示例代码(二)

@Intel SGX 读书笔记…

密封的数据

Intel SGX SDK提供API来加密和完整性保护Enclave机密,将它们存储在Enclave之外,如磁盘上。Intel SGX平台SW为ISV Enclave提供单调计数器和可信时间服务。单调计数器可用于实现重放保护策略,可信时间可用于实施基于时间的策略。它们都是密封的数据。重放保护的数据blob和基于时间的策略数据blob的要求非常微妙。Intel SGX SDK将提供参考代码,以帮助ISV正确实现它们。

重放保护策略
在企业权限管理(ERM)类型的使用中,企业可能需要维护脱机活动日志并定期对其进行审计,例如,这取决于秘密文档是否和/或脱机查看或打印的次数。如果脱机活动日志被篡改或删除,ERM应用程序将禁用脱机使用功能。功能性的安全文档查看ERM应用程序非常复杂,涉及凭证验证、文档密钥提供、安全文档呈现、安全显示和许多其他安全流程。
重放受保护的策略示例代码不会实现完整的安全文档查看功能,相反,它将演示:

  • 初始化一个重放保护策略,创建一个离线活动日志和一个秘密,由单调计数器保护。
  • 验证和更新重放保护策略,以验证和更新活动日志之前的秘密可以用来执行一个功能。
  • 删除重放保护策略,在秘密失效后删除活动日志和相关的单调计数器。

初始化策略

  1. Enclave使用sgx_create_monotonic_counter创建一个新的单调计数器
  2. Enclave使用示例使用秘密和数据、单调Counter_UUID和sgx_create_monotonic_counter返回的单调Counter_Value来填充活动日志。
  3. Enclave使用sgx_seal_data将活动日志密封到密封数据中。

验证策略

  1. Enclave用sgx_unseal_data验证和解密密封的数据
  2. Enclave使用sgx_read_monotonic_counter检索关联单调计数器的当前单调计数器值。如果失败,则终止操作。
  3. Enclave验证sgx_read_monotonic_counter返回的单调Counter_Value与活动日志中的单调Counter_Value相同。
  4. Enclave释放秘密来执行功能

更新策略

  1. Enclave验证活动日志
  2. Enclave检查活动日志中的秘密和使用数据是否无效或过期,例如,通过将活动日志中的使用计数与预先确定的阙值进行比较。如果该秘密无效或武器,则不会呈现需要该秘密的函数。
  3. Enclave使用sgx_increment_monotonic_counter来增加关联MC的单调计数值。如果失败,则中止操作。
  4. Enclave验证sgx_increment_monotonic_counter中返回的单调计数器值等于先前sgx_read_monotonic_counter返回值加1.
  5. Encalve更新活动日志和单调的Counter_Value。
  6. Enclave再使用sgx_seal_data将活动日志密封到密封数据中。
  7. Enclave释放秘密来执行功能

删除策略

  1. Enclave遵循更新受重放保护的活动日志的过程,以便在最后一次发布秘密之前将使用计数器设置为允许的最大使用数
  2. 用户连接网络以上传活动日志,并收到一个新秘密
  3. Enclave使用sgx_destroy_monotonic_counter删除活动日志和相关的单调计数器。如果被攻击者阻止,则关联的活动日志不允许释放秘密,因为活动日志中的秘密已失效或国企。

基于事件的策略
示例代码以离线数字版权管理(DRM)密钥的形式演示了基于事件的策略的正确实现,该密钥在一段时间后国企。示例代码不会实现完整的DRM功能。相反,它演示:

  • 使用DRM密钥、时间戳和过期策略创建离线密封数据。
  • 在释放密钥执行功能之前,验证DRM密钥尚未过期。

初始化策略

  1. Enclave使用sgx_get_trusted_time检索时间引用和时间源nonce
  2. Enclave使用示例示例使用机密、时间策略、时间引用和sgx_get_trusted_time返回的时间源nonce来填充策略结构
  3. Enclave使用sgx_seal_data将策略结构密封到密封数据中

验证策略

  1. Enclave使用sgx_unseal_data验证和加密密封的数据
  2. Enclave使用sgx_get_trusted_time检索当前的时间
  3. Enclave验证sgx_get_trusted_time返回的时间源nonce与策略结构中的时间源nonce相同。如果没有,则终止操作
  4. 计算时间
  5. 验证策略。如果时限已过,中止操作
  6. Enclave释放秘密来执行功能

Intel SGX2 Enclave

Sgx2Enclave项目演示了如何为Intel SGX 2.0硬件平台创建和使用Intel®SGX 2.0 Enclave动态内存管理(Intel®SGX EDMM) Enclave,它利用了Intel®SGX SDK提供的sgx_tedmm库。
该项目展示了如何通过链接sgx_tedmm库和导入sgx_tedmm来选择加入Intel®SGX 2.0行为。edl文件。它还演示了Intel®SGX 2.0 API的使用。

Switchless

Switchless示例旨在说明Intel SGX Switchless调用的使用和潜在的性能优势。它演示了sgx_create_enclave_ex的用法和无切换调用配置。无切换示例EDL定义了常规和无切换ECALLs,以及常规和无切换OCALLs。示例应用程序在循环中调用示例ECALLs/OCALLs,并比较常规调用和无切换调用的执行时间。

受保护的代码加载程序

比较SampleEnclavePCL文件夹中的示例代码与SampleEnclave中的示例代码,演示了如何将Inte SGX 受保护代码加载程序(Intel SGX PCL)集成到现有的ISV intel SGX项目中。

通用Windows平台(UMP)示例代码

SampleEnclaveUwp 项目是一个使用Intel SGX SDK的示例UWP应用程序。该项目是SampleEnclave 项目的一个端口,该端口与Intel SGX SDK一起提供给UWP,基于VS向导生成的BlankAppUWP C++项目。要使用这个项目,您应该熟悉SampleEnclave桌面或者Win32版本。
要调试此示例,可以参考附加到正在运行的通用Windows应用程序中的Encalve并对其进行调试。

SampleSGXEnable

SampleSGXEnable项目是一个在Enclave外部执行的示例应用程序。他的主要作用是:

  1. 查询Intel SGX设备的状态
  2. 启用Intel SGX设备,如果他被设置为软件控制的BIOS中。

注意:此示例代码应在APP安装程序内部使用,以便在安装期间查询和启用Intel®SGX设备。

如有误,请指正!感激!

你可能感兴趣的:(sgx)