详细介绍Intel SGX开发环境搭建和Hello Enclave程序运行

这里记录Windows10下搭建Intel SGX开发环境和编写第一个Hello World程序的过程。

总共分为两部分,第一是环境搭建,第二是hello world程序编写。每一步都有截图,希望以通俗易懂的方式跟大家分享。

1. 环境安装

  1. 需要安装visual studio 2015或者以上
  2. 安装Intel SGX JDK, 下载链接

本人的电脑win10,VS2017。上面的安装顺序不能颠倒,必须先安装VS。具体的安装就不讲了。在安装的时候会看到几个pdf文件,里面是很重要的安装和使用说明书,以后可能用得着。

安装好之后,打开VS,新建一个Intel SGX Enclave Project,默认配置,点击finsh完成。这里本人的项目名为Enclave1。
在这里插入图片描述

打开Source Files下的Enclave1.edl文件,添加内容(不是覆盖哈):

  trusted {
        /* define ECALLs here. */
		public void foo([out, size=len] char* buf, size_t len);
    };

在这里插入图片描述

打开Source Files下的Enclave1.cpp文件,添加内容(不是覆盖哈):

#include <string.h>
void foo(char *buf, size_t len)
{
    const char *secret = "Hello Enclave!";
    if (len > strlen(secret))
    {
        memcpy(buf, secret, strlen(secret) + 1);
    }
}

在这里插入图片描述
接下来配置该Enclave1项目的属性。选择项目名Enclave1,右键->属性(properties)->Debugging
在这里插入图片描述

现在我的方案(Solution)下面只有一个项目,而且是Enclave项目,下面我们在这个方案中新建一个项目。鼠标选择Solution名字,右键->增加->新建工程。注意这一步鼠标选择的是方案Solution ‘enclave1’,而不是Enclave1.

在这里插入图片描述

新建一个Empty Project,名字随便,这里起APP
在这里插入图片描述
在APP项目的Source Files下新建一个cpp文件,起名为mian,作为工程的程序入口点。就像普通项目的main函数所在的文件一样。
在这里插入图片描述
将下面的代码复制粘贴到这个新建的main文件中。会显示很多错误,先不用担心,先不管这些错误。

#include <stdio.h>
#include <tchar.h>
#include "sgx_urts.h"
#include "sample_enclave_u.h"
#define ENCLAVE_FILE _T("Enclave1.signed.dll")
#define MAX_BUF_LEN 100
int main() {
	sgx_enclave_id_t eid;
	sgx_status_t ret = SGX_SUCCESS;
	sgx_launch_token_t token = { 0 };
	int updated = 0;
	char buffer[MAX_BUF_LEN] = "Hello World!";
	// Create the Enclave with above launch token.
	ret = sgx_create_enclave(ENCLAVE_FILE, SGX_DEBUG_FLAG, &token, &updated, &eid, NULL);
	if (ret != SGX_SUCCESS) {
		printf("App: error %#x, failed to create enclave.\n", ret);
		return -1;
	}
	// An Enclave call (ECALL) will happen here.
	foo(eid, buffer, MAX_BUF_LEN);
	printf("%s", buffer);
	// Destroy the enclave when all Enclave calls finished.
	if (SGX_SUCCESS != sgx_destroy_enclave(eid))
		return -1;
	return 0;
}

按照下面图片,向APP项目中导入enclave依赖。
在这里插入图片描述

在这里插入图片描述
这时候发现main文件中的错误减少了很多。我们需要注意并根据自己的项目情况修改main文件的第四和第五行。我这里改成了下面这样。这里Enclave1是我的Solution的名字,也是我的Enclave项目的名字。Enclave1_u.h这个文件在Generated Files中,是自动生成的。

#include "Enclave1_u.h"
#define ENCLAVE_FILE _T("Enclave1.signed.dll")

修改了这个源码之后,我们再修改一下新建的APP项目的配置。
在这里插入图片描述

在这里插入图片描述
我们有一个solution,它的下面有两个项目,我们需要指定这两个项目的关系。我们希望以项目APP作为程序的入口,APP依赖项目Enclave1,所以有以下配置。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
到这里,所有的代码和配置都弄好了。我们编译一下。

在这里插入图片描述
我们把项目跑起来
在这里插入图片描述
发现出现了一个error。原因是本人的电脑的CPU不支持Intel SGX。所以,我们把图片红圈中的Debug改为Simulation。
在这里插入图片描述
最后,我们得到了下面的运行结果,表示我们成功了。
在这里插入图片描述

[sgx_create_enclave_exa_ c:\sgxwindows\src_release\windows-trunk\psw\urts\win\urts.cpp:164] Couldn’t open file with CreateFile()
App: error 0x200f, failed to create enclave.
C:\Users\media\source\repos\Enclave2\Simulation\APP.exe (process 20592) exited with code -1.
Press any key to close this window

The code execution cannot proceed because sgx_urts.dll was not found. Reinstalling the program may fix this problem.

如果您遇到了上面的错误,是因为你的配置上面出现了不一致的问题。建议按照本文的方法步骤新建和配置Intel SGX。


//////////////////////////////////////////////////更新/////////////////////////////////////////////

上面的安装步骤可以在debug模式下成功执行EnclaveSample实例代码,而RemoteAttestation实例代码不行。因为还没有安装sgx的驱动。下图的文件是在下载SDK的时候一块下载的,打开第二个pdf文档查看具体的sgx安装过程。
在这里插入图片描述
具体是这一个说明:
在这里插入图片描述
使用everything这个软件,可以查找到sgx_base.inf 和 sgx_psw.inf两个文件所在的目录。使用管理员打开一个cmd,分别进入这两个文件所在位置,输入上面的两行命令即可安装。

在这里插入图片描述

pnputil是什么?https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/pnputil

下面再次进入visual studio测试,使用debug模式,执行结果如下:

在这里插入图片描述

可以参考:

  1. 本文的源码和主要参考网页:https://software.intel.com/en-us/articles/getting-started-with-sgx-sdk-for-windows

  2. EDL文件的输入类型:https://software.intel.com/sites/default/files/managed/b2/b4/Input-Types-and-Boundary-Checking-EDL.pdf

  3. SGX编程指南:https://software.intel.com/sites/default/files/managed/48/88/329298-002.pdf

  4. SGX JDK下载: https://software.intel.com/en-us/sgx/sdk

  5. 其它参考资料:https://software.intel.com/zh-cn/SGX-Development-Guide-Part-1

  6. https://software.intel.com/zh-cn/SGX-Development-Guide-Part-2

  7. https://software.intel.com/es-es/node/701612?language=de

  8. 英特尔SGX系列教程:https://software.intel.com/zh-cn/articles/introducing-the-intel-software-guard-extensions-tutorial-series

发布了188 篇原创文章 · 获赞 390 · 访问量 74万+

猜你喜欢

转载自blog.csdn.net/liangyihuai/article/details/103620259