Intel SGX初步学习理解笔记(持续更新)

article/2025/9/21 9:41:06

一些概念 

  • SGX(Software Guard eXtensions)软件保护扩展:是一组CPU指令扩展,能够创造出一个可信执行环境来保护代码和数据,即使使用root 权限也无法访问。通过这个硬件设施,应用程序可以隔离代码和数据来达到安全,大多应用于分布式系统中。SGX的实现需要处理器、内存管理部件、BIOS、驱动程序、运行时环境等软硬件协同完成。除了提供内存隔离与保护安全属性,SGX架构还支持远程认证和密封的功能,可用于安全软件应用和交互协议的设计。
  •  sgx整体内存抽象模型(下图)包括了内存的管理、布局与组织。PRM(Preserved Random Memory)是动态内存DRAM中一段用于SGX的保留区域,这段连续的内存空间处于最低的BIOS层而不能被任何软件访问。EPC(Enclave Page Cache)是PRM中操作系统分配的装载应用程序数据和代码的4KB大小内存的集合。EPCM(EPC Metadata)是维护EPC的入口地址,并且包含CPU跟踪EPC内存页元数据的状态表。它来保证每个EPC(4kb page)由一个Enclave独享。

    preview

  • 可信执行环境(TEE):Trusted execution environment 的缩写,应用于安全智能设备,安全支付等领域。是主处理器内的安全区域。它运行在一个独立的环境中且与操作系统并行运行。它确保在TEE中加载的代码和数据的机密性和完整性都得到保护。通过同时使用硬件和软件来保护数据和代码,这个并行系统比传统系统(即REE,富执行环境)更加安全。在TEE中运行的受信任应用程序可以访问设备主处理器和内存的全部功能,而硬件隔离保护这些组件不受主操作系统中运行的用户安装应用程序的影响。TEE中的软件和加密隔离相互保护不同的受信任应用程序。可以安全地处理密码和私钥等私密信息,并保障信息绝对不会泄漏给节点或者其他人,同时还能证明数据未经篡改
  • 分布式系统:是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。
  • Enclave:是一个被保护的内容容器,是sgx的核心技术,是在用于存放应用程序敏感数据和代码。当应用程序需要保护的部分加载到enclave后, SGX保护它们不被外部软件所访问。所有的enclave都驻留在EPC(enclave page cache)中。

  • EPC(enclave page cache):这是系统内一块被保护的物理内存区域, 用来存放enclave和SGX数据结构。EPC布局由平台具体实现决定,如果CPU支持SGX架构并在加密保护的DRAM (dynamic random access memory)中实现EPC,那么它也支持BIOS保留一段叫PRM(processor reserved memory)的内存范围。BIOS通过配置一组范围寄存器分配PRM。具体的PRM和EPC布局和平台有关。并取决于BIOS设置。(下图为PRM、EPC、Enclave布局示意图)

SGX

        SGX的保护方式是将合法软件的安全操作(代码、数据等)封装在一个enclave中,保护其不受恶意软件的攻击。而且执行SGX的权限非常高,特权或者非特权的软件都无法访问enclave,也就是说,一旦软件和数据位于enclave中,即便操作系统管理员和VMM(Hypervisor)也无法影响enclave里面的代码和数据。Enclave的安全边界只包含CPU和它自身。

主机应用虚拟内存视图(abort page即为prm区域)

enclave应用虚拟内存视图(Enclave中映射到EPC页的虚拟内存称为(enclave linear address range)ELRANGE)


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

相关文章

Intel 的 SGX 技术小知识

1.SGX 概述 Intel SGX (Software Guard Extensions) 是一种针对特定应用程序的安全增强技术。它允许应用程序在处理机上创建受保护的执行环境,这个执行环境被称为“enclave”。这个 enclave 是一个被硬件隔离的内存区域,只有在安全条件下才可以访问。这…

新手学编程必会的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日,表白的最佳时机,今天突然之间闲来无事,写了个告白程序,或许是内心的躁动吧,自己虽然是用不上了,但是还是希望与众多的单身族分享一下。废话不…