问题标签 [sgx]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
130 浏览

intel - SGX 本地证明样本在模拟器中返回 0x3002

成功地按照说明在全新的 Linux 安装上正确运行 LocalAttestation 示例,我这辈子都做不到。鉴于这是在模拟模式下构建的,我会认为没有其他依赖项?

我修改了演示以提供额外的输出,这行返回 3002 SGX_ERROR_INVALID_ATTRIBUTE:

这是 linux SDK 中的示例:https ://github.com/intel/linux-sgx并且英特尔关于该功能的文档中甚至没有提到此错误的可能性:https://software.intel .com/en-us/sgx-sdk-dev-reference-sgx-create-enclave

任何帮助将不胜感激!

——亨利

0 投票
2 回答
720 浏览

docker - Docker 容器或其他非 C 程序能否作为英特尔 SGX 可信(安全区)组件运行?

我是英特尔 SGX 和 Docker 的新手。我正在尝试确定是否可以将“敏感”程序和数据放在 Docker 容器中,并将该容器作为 SGX 硬件中的受信任(飞地)组件运行。我计划使用 SGX 平台的最新 Linux 版本。

我一直在阅读 SGX 开发人员指南、参考、编程参考等,但不确定如何使用 Enclave 定义语言之类的东西来调用容器作为受信任的组件。SCONE 项目有一种技术方法,但它似乎没有使用 Enclave 定义语言、ECALLS、OCALLS、英特尔的 SDK 和安全 C 库以及我在英特尔 SGX 文档中阅读的其他指南。此外,我之前发现的关于将 SGX 与 Docker 容器结合使用的问题也很复杂。

所以,答案是:

“不,您不能使用英特尔 SGX 开发指南将 Docker 容器作为受信任的 enclave 组件运行”

“是的,您可以使用英特尔 SGX 开发指南将 Docker 容器作为受信任的 enclave 组件运行,以下是操作方法......”

相关问题:SGX 似乎只运行 C/C++ 程序。因此,像 Python(不使用 Ctypes)或 Java(不使用 JNI)这样的语言不会作为受信任的组件运行,对吧?

此外,除了 SCONE 之外,还有什么是在 SGX 中将 Docker 容器作为可信组件运行的可行示例吗?我在 StackOverflow 上看到了一个包含指向 dockerfile 的链接的答案,但该链接已损坏。谢谢你的帮助!

0 投票
1 回答
71 浏览

corda - 当 Corda 开始在 Notary 上使用 SGX 时,为什么还要将 Notary 分散到 Notary 集群中呢?

当 Corda Notaries 开始在英特尔 SGX 飞地内处理交易时,似乎即使是托管 Notary 节点的服务器的所有者/管理员也无法控制智能合约的执行或对交易数据的读取权限。因此,单个公证人所有者不能以恶意方式阻止交易按应有的方式执行。

如果这是真的,那么拥有一个由多个不同实体拥有的公证人集群对交易结果达成共识有什么好处?

0 投票
2 回答
180 浏览

tpm - SGX 能否证明两个飞地位于不同的计算机上?

想象一个云提供商向客户租用两台虚拟机。假设客户想要检查两个 VM 是否在不同的物理计算机上运行,​​尽管云提供商可能试图欺骗客户。

两台机器都提供 SGX 并启用了 TPM。

我的第一个想法是使用远程认证并比较使用的密钥,因为每台物理机器都会在工厂安装一个唯一的背书密钥。但是,新交所文档明确指出,远程证明使用组密钥来保护隐私,因此客户无法判断这两个远程证明是否由不同的硬件签名。

假设我已经在每台机器上建立了一个安全飞地。

是否可以从 enclave 中读取 EK 公钥(或其哈希),将其放入报价的数据部分,然后发送远程证明?然后远程证明将证明目标机器按照给定的方式运行代码,并且由于代码读取并返回 EK,我们也将拥有 EK。

这个相关问题表明,仅使用 TPM 是行不通的(实际上是行不通的),但让我想知道我们是否可以使用 SGX 来完成这项工作。

所以我的问题是:

1)以上真的有用吗?

2)如果是,你能帮我找到令人信服的文件来证实这是可能的吗?

3)如果没有,我还能做些什么吗?

0 投票
0 回答
129 浏览

intel - 英特尔 SGX:在 enclave 内创建证明报告

我正在使用SCONE Docker 映像在英特尔 SGX 飞地中运行我的代码。

SCONE 处理飞地的创建和最终的破坏,这让我作为程序员的生活更轻松。但是,如果我想在 enclave 内对我的代码执行本地或远程证明,我需要依赖 SCONE 的专有服务。

我想知道是否可以从当前飞地中创建一份证明报告。换句话说,在 enclave 内运行的代码必须能够创建证明报告并将其发送出去——所有这些都无需离开 enclave。

我检查了英特尔 SGX 文档和示例代码。所有对 EREPORT 函数的调用都依赖于我不知道的 Enclave ID(SCONE 代表我创建 enclave)。因此,我的问题主要是关于从其中找出飞地信息的方法。

真的有可能吗?

0 投票
1 回答
678 浏览

c++ - g++ - 链接阶段(-L 标志)不起作用

我是 C++ 新手,正在尝试找出我的错误在编译过程中的位置。抱歉,如果这个问题不清楚,我不确定要提供什么信息。

参考信息:目录“mbedtls/lib/”包含两个.a(归档)文件,“libmbedtls_SGX_t.a”和“libmbedtls_SGX_u.a”。

我正在使用 Makefile,它按顺序运行以下命令。这些命令似乎没有错误地运行:

运行这些命令后,它运行以下命令:

但是,此命令会产生错误:

我不知道为什么会产生这个错误。我的最后一个命令包含一个标志-Lmbedtls/lib/,它应该通过将存档文件(特别是 libmbedtls_SGX_u.a)链接到可执行文件来解决这些未定义的引用。然而,显然这并没有发生。

我需要在编译过程的早期链接存档文件吗?即-而不是在最终的 g++ 命令中使用标志-Lmbedtls/lib/,我应该在前面的两个 g++ 命令中都使用它吗?

更新:将标志添加-Lmbedtls/lib/到之前的 2 个 g++ 命令(生成 App.o 和 sgx_utils.o 的命令)并没有改变任何内容。错误仍然存​​在。

0 投票
0 回答
1209 浏览

sgx - 如何安装英特尔 SGX 平台软件?

我曾多次尝试在我的 Windows 机器上安装平台软件 (PSW),但都失败了。

我尝试在以下操作系统版本上安装它(所有 64 位)

根据发行说明,PSW 应该支持以下操作系统

错误是

“不支持“Windows 10 Home 10.0.17134”操作系统”或“不支持“Windows 10 Pro xxxxxx is”操作系统”</p>

我的处理器是 8700k,我使用的是支持 SGX 的技嘉 Z370 Aorus Ultra Gaming F4 bios。我打开了 bios 选项并通过 SGX-test.c 验证

这是非常令人沮丧的,因为我为此目的建造了整台机器。我错过了什么吗?

0 投票
1 回答
48 浏览

visual-studio - 飞地字段不工作,但没有错误

我正在尝试让简单的代码调用一个 enclave 字段,然后添加 1。

我参考了这个网站:https ://software.intel.com/en-us/articles/getting-started-with-sgx-sdk-f ...

完成后,没有错误,但 enclave 代码不起作用。

这是我在 Visual Studio 2017 中的 project.zip 代码 https://drive.google.com/open?id=13trTAamhNWaz2Q2BRDtUFP5qCX8Syyuc

应用程序.cpp

飞地1.edl

飞地{从“sgx_tstdc.edl”导入*;

};

飞地1.cpp

我希望它打印出来:

43971、43972、43973、43974……

但结果是:

1、1、1、…………

我错过了什么?

0 投票
1 回答
261 浏览

c++ - 英特尔 SGX 将 c++ 类/结构作为 void* 传递给 enclave 并将其转换回

注意:- 这个问题非常类似于Passing C++ struct to enclave from app in Intel SGX。我再次发布它,因为该帖子已经快 1 年了,希望可能有一些解决方案。如果您认为这是重复的,请删除它。

我正在开发一个英特尔 SGX 应用程序。在我的不受信任的应用程序中,我有一个类(称为SkipList),其中有一个结构(称为node )。我正在尝试将此结构作为具有 **[user_check]属性的 *void**** 传递到飞地中。

一旦我在飞地内收到它,我就会将它转换为如下的结构类型。

当我开始调试时,我看到转换后的“head”地址是正确的(我也在应用程序端检查了这个地址,两个地址相同),并且“forward”成员的地址也是正确的。但是当我尝试查看“前进”的元素时,我只能看到 1 个元素。实际上应该有更多的15个元素。

有人可以告诉我这是否是向量的 SGX STL 实现的问题?为什么我无法按预期看到它?

0 投票
1 回答
66 浏览

sgx - 英特尔 SGX 在远程机器上运行可执行文件

我一直在将一些代码移植到 Linux 中的 SGX,最后我想在远程服务器上运行。
我观察到,如果我构建程序,然后使用相同的可执行文件在不同的机器上运行 SGX 内的程序,与使用 SGX SDK 构建程序的机器不同,代码仍然可以正常运行,没有任何问题。

现在,如果我在构建过程中查看 MRENCLAVE 值,我发现如果我在不同的机器上构建相同的代码,该值是不同的。如果我将机器 A 上的可执行构建发送到机器 B 并且不在机器 B 上再次构建它,那么 MRENCLAVE 值就是我在机器 A 上构建它得到的值。问题是如果我构建这个值是不同的机器 B 本身的代码。如果我想在机器 B 上验证代码但不想在机器 B 上重建项目而是使用机器 A 的构建,这不会导致任何问题吗?