Intel 的 SGX 技术小知识

article/2025/9/21 22:32:09

1.SGX 概述

Intel SGX (Software Guard Extensions) 是一种针对特定应用程序安全增强技术。它允许应用程序在处理机上创建受保护的执行环境,这个执行环境被称为“enclave”。这个 enclave 是一个被硬件隔离的内存区域,只有在安全条件下才可以访问。这个特性使得 SGX 成为一种强大的安全保护技术,它可以用于保护应用程序和数据不被恶意软件或攻击者所破坏或窃取

SGX 技术的核心是一个安全处理器,它被称为 Intel SGX 物理内存安全(Intel SGX Physical Memory Security)。这个处理器使用硬件扩展来创建安全的执行环境,并提供了一些硬件隔离的机制,以保护 enclave 中的代码和数据。其中最重要的是“内存加密(Memory Encryption)”和“内存隔离(Memory Isolation)”。

内存加密是指,当 enclave 中的代码和数据被写入内存时,它们会被加密。只有 enclave 内部的代码才能够解密和访问这些数据。这种加密可以有效地保护 enclave 内部的数据不被恶意软件或攻击者窃取。

内存隔离是指,在创建 enclave 时,操作系统和硬件会自动隔离 enclave 中的代码和数据,以保证它们只能被受信任的代码所访问。这种隔离可以有效地保护 enclave 内部的代码和数据不受到来自操作系统或其他应用程序的攻击。

Intel SGX 技术的实现需要特殊的硬件支持,如 Intel CPU 的第六代或更高版本。应用程序必须使用 Intel SGX SDK 进行开发,并在SGX硬件支持的计算机上运行。Intel SGX可以保护多种应用程序,包括数据库,浏览器,虚拟机等。

总之,SGX 技术为开发人员提供了一个可靠的安全平台,使得他们可以在未来开发更加安全和可靠的应用程序。

2. SGX 加密技术和隔离技术

SGX 内存加密技术是 SGX 技术中最重要的一项安全性保护措施之一。它可以将 Enclave 中的代码和数据加密,并在硬件级别上保证只有 Enclave 内部的代码可以访问和修改这些数据。

SGX 内存加密技术的原理如下:

  1. 加密密钥生成:SGX 技术中有一个特殊的硬件组件称为 Memory Encryption Engine(MEE),用于生成加密密钥。当 Enclave 启动时,MEE 会生成一个加密密钥,用于加密 Enclave 中的代码和数据。

  2. 加密内存:在加密密钥生成后,MEE 会将 Enclave 中的代码和数据加密,并将它们存储在 SGX 内存中。只有 Enclave 内部的代码可以访问和修改这些加密后的数据,对外部程序和操作系统来说,这些数据是不可读取的。

  3. 解密内存:当 Enclave 内部的代码需要访问加密数据时,它会向 MEE 发送请求,请求 MEE 解密数据。MEE 会使用之前生成的加密密钥对数据进行解密,并将解密后的数据返回给 Enclave 内部的代码。解密过程也是在硬件级别上进行的,确保解密过程中不会发生数据泄露或篡改。

  4. 内存隔离:除了加密保护,SGX 技术还提供了内存隔离功能,确保 Enclave 中的代码和数据不会被其他程序访问或修改。当 Enclave 启动时,SGX 技术会为 Enclave 分配一块 SGX 内存,只有 Enclave 内部的代码才能访问和修改这块内存。对于外部程序和操作系统来说,Enclave 中的数据是不可见的,确保了 Enclave 中数据的机密性和完整性。

总之,SGX 内存加密技术通过硬件级别的加密和隔离,保护了 Enclave 中的代码和数据,防止其被未授权的程序访问或篡改。这是 SGX 技术的核心安全性保护措施之一,为应用程序提供了强大的安全性保护。

3. SGX 内存加密引擎 MEE

由于SGX内存加密引擎的实现细节较为复杂,这里提供一个简化的原理图来说明其基本原理:

+-----------------+                             +----------------+
|    User Space    |                             |     Enclave    |
+-----------------+                             +----------------+
|      Plain      |                             | Encrypted Data |
|      Data       |                             |     in Enclave |
+-----------------+                             +----------------+|                                                  ||                                                  ||                                                  |
+---------------------------------------------------------------+|                                                  ||                                                  ||                                                  |
+---------------------------------------------------------------+|                                                  ||                                                  ||                                                  |
+-----------------+                             +----------------+
|    SGX Driver    |                             |    SGX CPU     |
+-----------------+                             +----------------+
|   Memory Access  |                             |   Memory Access|
|     Control      |                             |    Control     |
+-----------------+                             +----------------+|                                                  ||                                                  ||                                                  |
+---------------------------------------------------------------+|                                                  ||                                                  ||                                                  |
+-----------------+                             +----------------+
|    Physical     |                             |    Physical    |
|     Memory      |                             |    Memory      |
+-----------------+                             +----------------+

如上所示,SGX内存加密引擎的基本原理是将用户空间中的明文数据加密,并存储在SGX安全区域中,只有经过授权的程序可以访问和解密这些数据。具体实现的步骤如下:

  1. 用户空间的程序使用SGX API调用请求将数据传递给SGX驱动程序。

  2. SGX驱动程序使用内存访问控制技术(如页表)限制用户空间程序的访问权限,并将数据传递给SGX CPU。

  3. SGX CPU使用硬件加密引擎对数据进行加密,并将加密后的数据存储在SGX安全区域中的物理内存中。

  4. 只有经过授权的程序(即运行在SGX安全区域中的可信代码)可以访问和解密SGX安全区域中的数据,从而保护了用户空间中的数据不被未经授权的程序访问和篡改。

4. 可信执行路径 TEP

SGX 还提供了可信执行路径(TEP)技术,可以验证应用程序代码的完整性和安全性,从而防止应用程序被恶意软件或攻击者篡改或替换。

5.安全容器

每个 Enclave 是一个独立的安全容器,可以包含自己的代码和数据,它们可以独立运行和管理,互相之间是隔离的。因此,SGX 技术可以为不同的应用程序提供安全保护,即使这些应用程序运行在同一台计算机上也不会相互干扰。

每个 Enclave 都有自己的 Enclave 签名密钥和 Enclave 签名证书,以确保 Enclave 的身份和完整性。同时,每个 Enclave 也有自己的安全内存区域,可以保护 Enclave 中的数据不被其他 Enclave 或不安全的执行环境访问或篡改。

当创建多个 Enclave 时,SGX 还提供了 Enclave-to-Enclave(E2E)通信机制,可以在 Enclave 之间进行安全通信,确保数据传输的机密性和完整性。这些功能使得 SGX 技术在云计算、物联网和其他需要保护数据隐私和安全的领域具有广泛的应用前景。

根据 Intel 的官方文档,当前支持的最大 Enclave 数量是 496 个。这个数字可能会因为硬件升级和软件更新而有所变化。

需要注意的是,创建多个 Enclave 会占用计算机系统的资源,包括内存和 CPU 等,因此需要根据实际需求和硬件能力进行合理规划。此外,对于需要在多个 Enclave 之间共享数据的应用程序,需要采用 Enclave-to-Enclave(E2E)通信机制,保证数据传输的安全和完整性。

6.enclave 格式

SGX Enclave 有其特定的格式和组织结构,以下是 SGX Enclave 的基本格式:

    +---------------------+|    Enclave Header   |+---------------------+|      Enclave Body    |+---------------------+

其中,Enclave Header 是一个固定大小的数据结构,包含了 Enclave 的基本信息,如 Enclave 的大小、版本、安全性等级、入口地址等。Enclave Body 则是一个可变长度的数据区域,包含了 Enclave 的代码、数据、堆栈等。

在 Enclave Body 中,不同的数据区域有不同的权限和访问限制,包括只读、可写、只执行等。这些访问限制可以通过 SGX 技术中的内存类型和权限控制机制来实现。

需要注意的是,SGX Enclave 的代码和数据必须经过编译、加密和签名才能被加载和执行。在加载 Enclave 时,SGX 驱动程序会验证 Enclave 的签名和完整性,以确保 Enclave 的安全性和可信度。同时,SGX 技术中还提供了 Enclave-to-Enclave(E2E)通信机制,以便不同的 Enclave 之间安全地进行通信和数据共享。

 

7.其他平台上可以利用相应的安全机制实现 SGX 效果吗?

本质上,SGX 依赖于:

  • 内存加密引擎:加密 enclave,并生成对应密钥信任根;
  • 内存隔离引擎:隔离 enclave,让 enclave 独立运行;
  • enclave 执行器:enclave 加载后,负责执行enclave代码执行。

那么,可以在 Arm +Trustzone + Crypto Island 上根据 SGX 的思路实现软件防护扩展

  • Crypto Island 实现enclave加密,生成对应的信任根密钥;
  • 内存隔离引擎:Trustzone + MPU,使用 Trustzone 对内存进行一级隔离,使用 MPU 对enclave间内存进行二级隔离;
  • enclave 执行器:enclave 运行在 S-EL1 模式,EL3 负责对enclave的管理。

可以在 LPC55S6 上根据 SGX 的思路实现软件防护扩展

  • 使用 BEE 实现enclave 加密,生成对应的信任根密钥;
  • 内存隔离引擎:Trustzone + MPU,使用 Trustzone 对内存进行一级隔离;
  • enclave 执行器:enclave 运行在 Privilege 模式,REE task 实现enclave上下文管理。

所以,SGX 只是一个技术思路~

皮格马利翁效应心理学指出,赞美、赞同能够产生奇迹,越具体,效果越好~
“收藏夹吃灰”是学“器”练“术”非常聪明的方法,帮助我们避免日常低效的勤奋~

http://chatgpt.dhexx.cn/article/vWl2aNDs.shtml

相关文章

新手学编程必会的100个代码

前言 我记得刚开始接触编程的时候,觉得太难了。 也很好奇,写代码的那些人也太厉害了吧?全是英文的,他们的英文水平一定很好吧? 他们是怎么记住这么多代码格式的?而且错了一个标点符号,整个程…

适用于编程开发自学的学习网站

今天为大家分享几个编程开发自学的学习网站 1.C语言网 该网站有很多C语言相关的教程、资源、博客和练手习题,同时也有很多题库和比赛,比较实用。 网址:https://www.dotcpp.com/ 2.cppreference cppreference是一个免费网站,上面…

初学者必会的100个编程代码

这是本文的目录 前言1、for循环中的else条件2、数字求和3、随机数生成4、将列表中的所有元素作为参数传递给函数5、获取列表的所有中间元素6、使用一行代码赋值多个变量7、Python清空列表8、通过Enum枚举同一标签或一系列常量的集合9、重复字符串10、计算每个月天数11、输出指定…

程序员初学者应该如何自学编程

在你要进入学习殿堂之前,先问你自己100遍:“我能坚持多久?”不要认为这样做很无聊,你要是真的试了,你会有不同的一番感受的,不信你试试看。如果你越问越没信心的话,那说明你心理上还没有准备好&#xff1b…

编程在哪学,可以免费自学编程的10个网站

编程学习 很多人包括一些企业家,和市场营销人员都认为学习编程对一个人走向成功十分有帮助。在过去的一年里,我一直在学习编程。它有助我成为一个更好的创业者,我甚至可以提供一些帮助,当我的团队需要解决一些bug的时候。 现在&a…

编程入门: 自学编程从哪里开始? [初学参考]

自学编程,先学python、java还是C/C? ——大四学生对于初学者的一点建议 摘要: 自学编程,先学什么语言呢?实际上,编程能做的事太多了,首先明确自己想要用代码做什么,再明确自己的学…

想自学编程?这么多编程自学网站,总有一个适合你吧!

小伙伴们周末快乐。 今天分享一波适用于编程开发学习的自学网站,主要涉及编程学习和练手 、 提问交流 、 计算机公开课 、 在线刷题 、以及 问题搜索 等几个方面,希望能有帮助。 C语言网 该网站有很多C语言相关的教程、资源、博客和练手习题&#xff0c…

Proxyee-down – 百度网盘全平台满速下载神器,还带有IDM的全网嗅探功能!(替代PanDownload)

百度云网盘是目前最流行的在线文件分享途径,但它对免费用户的限速实在是严苛,即便是100M的宽带,常常也会遇到仅有几十KB/秒的速度,一个大文件要下载到天荒地老。 知道君曾分享过一些百度云网盘限速的解决办法,比如使用…

http proxy 代理

配合webpack 和 webpack-dev-server处理 安装 // 安装 cnpm html-webpack-plugin --save -D cnpm install webpack webpack-cli webpack-dev-server --save -D新建src文件夹 新建文件 index.html 和 index.js在index.js 发送一个请求 import axios from axiosaxios.get(htt…

Proxyee-down 3.x的下载与安装

本篇博客将持续更新 因为软件的作者MonkeyWei在3.x版本的软件更新中,并未发布3.x版本的exe文件只在github中发布了jar包(需要java环境)笔者本来是想将源代码生成exe文件,方便大家的下载与安装。奈何笔者水平有限,找了…

JS Proxy (代理)

Proxy 对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)。 语法: const p new Proxy(target, handler) 参数: target : 要使用 Proxy 包装的目标对象&…

Vue proxy代理

proxy代理是解决开发环境中的跨域问题,正式环境的跨域需要使用nginx反向代理或者是后端解决 在vue中实现proxy代理的步骤 在vue中使用proxy进行跨域的原理是:将域名发送给本地的服务器(启动vue项目的服务,比如loclahost:8080)&a…

Proxyee-down的下载与安装教程

Proxyee-down是monkeyWie在Github上的一个开源项目,向作者致敬。 最新版的Proxyee-down为3.12(2018.10更新),因为作者在3.x后的版本中并未发布exe版本,只发布了jar包 所以我们需要在计算机中安装Java环境才能使用Prox…

Proxyee Down简介

以前写过一篇用Proxyee下载百度网盘大文件的文章,后来一直没在用过,现在发现Proxyee出了新版,功能也增加了,所以重新来介绍一下。现在它的Github地址也变了,现在的地址是:https://github.com/proxyee-down-…

C语言 ~运算和运算

读CH378的一些源码&#xff0c;里面有用&~和&两种运算&#xff0c;这里记录一下这两种运算的结果 程序源码 /* C语言测试程序 */#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h>int main() {uint16_t m 10…

c语言中!与~的区别

编译器信息还不知道怎么看。 在我电脑和手机的GCC环境中 !: 代表值得取反&#xff0c;对于整形变量&#xff0c;只要不为0&#xff0c;使用 ! 取反都是0&#xff0c;0取反就是1。就像 bool 只有真假一样。 ~: 代表位的取反&#xff0c;对于整形变量&#xff0c;对每一个二进制…

C语言标识符之——“~“

"~" : 对一个数的二进制按位取反 例如&#xff1a; a 0时&#xff0c;~a -1&#xff1b; a的原码 &#xff1a;00000000000000000000000000000000 ~a的补码 &#xff1a;11111111 11111111 11111111 11111111 - 补码 ~a的反码 &#xff1a;11111111111111111…

情人节必备表白代码

效果图 放大后满满的"我爱你"! 代码 pip3 install Pillow #安装依赖包Pillowfrom PIL import Image, ImageDraw, ImageFont import sys #判断参数个数&#xff0c;可以不要 import os #判断文件是否存在&#xff0c;可以不要image_path "test.jpg" fo…

520之表白代码

版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/qq_42680327 今天是一个好日子,2019年5月20日,表白的最佳时机,今天突然之间闲来无事,写了个告白程序,或许是内心的躁动吧,自己虽然是用不上了,但是还是希望与众多的单身族分享一下。废话不…

520表白代码

女朋友生日快乐代码—>>>html生日快乐代码 html表白代码大全—>>>html表白代码大全 个人主页地址&#xff1a;皮小孩的个人主页 很多朋友想几个代码组合在一起&#xff0c;于是我做了这个效果。中间是爱心包围的照片&#xff08;照片可以换多张&#xff09;…