可信启动、安全启动:SGX、TrustZone、SecureEnclave

article/2025/9/21 20:30:32

最近在公众号上看到了一篇文章,算是又丰富了自己的安全方面的眼界。
最近看公众号取代了小视频、知乎这些东西。以前是真的不喜欢碎片化的东西,看什么学什么总是要找到书籍。但是这样的做法太过的极端,因为有时候有些事是两面性的。比如像安全这方面,本来有的东西和内容就很少,所以即使碎片化,也是前辈们花时间分享出来的东西,学起来还是很有价值的。

推荐一下我看的这篇文章的公众号:极术社区

原文的链接:https://mp.weixin.qq.com/s/WtF6EKUTDI01UjKv1H82Tw

下面一起来学习一下前辈的优秀blog

1、安全启动与可信启动

对于这两个概念你知道他们的区别吗?

1、安全启动

安全启动:启动过程中,前一个部件验证后一个部件的数字签名,验证通过后,运行后一个部件,否则就中止或复位系统。因此它是一个防恶意篡改的手段。

目前安全启动基本上是对安全要求比较高的场景下,芯片必备功能。

在这里插入图片描述

这里的关键词是前一个校验后一个,这里就有了一个信任链-CoT

2、可信启动

可信启动:启动过程中,前一个部件度量(计算HASH值)后一个部件(通常在后一个部件被签名校验过之后),然后把度量安全的保存下来,比如扩展到TPM的PCR中。后续接入平台后,部件的度量会上报到认证平台,认证平台会有配置一个可信白名单,如果某个部件的版本信息不在白名单里,则认为此设备是不受信任的,因为它可能使用了一个虽然有签名,但可能BUG的版本。因此它是一个可信版本的管理手段。

可信启动(Trusted Boot):也称为Measure boot,就是在启动过程中,前一个部件度量(计算HASH)后一个部件,然后把度量值安全保存下来,比如放到一个集中的部件(或云端),设备启动后的一致性(完整性)的校验由集中的部件负责完成。

在这里插入图片描述

要实现可信启动,首先需要 cpu 的支持其次还需要 TPM(Trusted Platform Module)芯片的支持,TPM 有两个作用,作用一:提供加解密算法的支持作用 二:存储对称密钥及私钥。可能部分嵌入式产品还需要 OTP(One Time Programmable)芯片。

3、小结

安全启动/可信启动 是确保系统级别的安全手段,适用于有可信诉求的整机系统,终端设备如手机、STB、路由器等,当然也适用于通用服务器设备。

可信计算组织(TCG)提出了“可信链”和“可信度量”的概念,并认为:如果信息系统由一个初始的“可信根”开始,在平台控制权每一次转换时,通过完整性度量将这种信任传递给下一个组件,则平台计算环境就始终是可信的。

TCG规范提倡采用一个单独的安全模块作为信任根,这是一个软/硬件相结合的子系统。该子系统被设计成能够度量、存储和报告系统可信赖属性的模块,是建立信任链的起始点。TCG规范旨在提供开放的、平台无关的标准,从而被应用到不同的平台设备中。TCG中的信任模型是以TPM硬件模块为基础的。TPM是一个可独立进行密钥生成、加/解密的装置,内部拥有独立的处理器和存储单元,可存储密钥和敏感数据,为各种计算平台提供完整性度量、数据安全保护和身份认证服务。但TCG只为系统引导阶段建立初始信任过程中参数的度量和报告制定了标准,但对于如何实施未作探讨。

两者的区别就在于安全启动的校验是在信任链,而可信启动是一个TPM统一校验,不过在我们实际的开发中,这两者都是交互的,可能某些过程的镜像是一个信任链,但是有的镜像或者说是模块,又负责校验了多个镜像。

以上安全启动和可信启动的概念,网上有许多专家在讨论,可以自行进一步理解。然而,如果仅从字面要求试图实施时,我们又会发现许多新的问题,举个例子:安全启动时,确实每一级都被签名校验了,但确定安全吗?某一级如操作系统1分钟前刚刚被校验过,1分钟后还是可信的吗?不见得,这个过程中,操作系统完全有可能已经被非法修改过了。

要做到相对更安全,要么能够做到Runtime的实时校验,即每次使用那一刻都要校验。 如果做不到Runtime校验,那就想办法将校验过的数据安全保存起来…相关实现方案和技术其实在有前提的情况下已具备,这是另一个课题。

这个前提是指系统需要是不开放的嵌入式系统,因为不开放,可定制,提供特定的功能/服务,因此整机系统的保护是可行的,并且方案都是很成熟的。 (但是像安卓这些其实都是很开放的系统。)

回归产品

2、现状-回归产品(我觉得这点很重要-为什么有了trustzone?)

下一次想想为什么需要安全?

对于通用计算设备比如服务器产品是个什么样的情况呢?基本上就是这么个事实:

1、系统“全局保护”越来越难以实现,且不切实际

原因是当前开源共享,并且是自由的大环境。操作系统开源,应用开源,用户自由地选择不同版本的操作系统和应用,一切都不在设备厂商的控制中。

2、“全局保护”不可行,那就将保护范围缩小到应用的部分片段

这就是Intel SGX或ARM TrustZone的由来

因此,Intel SGX或ARM TrustZone是传统的系统保护手段不可行,通用系统设备的保护方案无法借鉴嵌入式系统的方案后,安全技术工作者转变思路后的产物。

3、技术

1、Intel SGX

网上有相当多的材料,并且都有一个特点:短小精悍。于是我们就看到了非常经典的一个图,足以说明SGX应用的工作原理:

在这里插入图片描述

  • 应用在设计时,需要考虑所谓的trusted和untrusted两部分,trusted即为处理敏感数据的实现部分
  • 实现应用,对于trusted部分,需要使用Enclave定义语言(EDL)来实现需要的逻辑。通过EDL实现的内容,将被执行在安全区域(Enclave)
  • Enclave中的实现可被untrusted的代码调用,当被调用时,命令会通过底层驱动传递Enclave中;
  • Enclave中的数据对外部不可见,也禁止外界的访问(包括系统高权限的代码也不可访问)
  • 处理完之后,返回结果,但过程数据仍然在Enclave中;
  • 获得返回后,应用的untrusted部分按即定的过程继续执行。

安全执行环境(Secure Execution Environment)是宿主进程的一部分,这意味着:

  • 该应用程序包含其自己的代码,数据和安全区域;
  • Enclave也包含自己的代码和数据。
  • SGX保护飞地代码和数据的机密性和完整性;
  • Enclave进入点是在编译时预定义的;
  • 支持多线程(但实现起来并不容易);
  • 一个安全区可以访问其应用程序的内存,但不能相反

在这里插入图片描述
我们可以再看一下EDL的使用示例,这样可以了解应用开发的难易程度:

在这里插入图片描述

可以看到,EDL并不是要求用户掌握学习一门新的语言,它的代码仍然是类POSIX API,C/C++库构成的,它也可以快速的将已有的实现迁移到Enclave中。

小结
SGX Enclave完全使用了CPU的隔离能力,不可操作外设、中断等。EDL定义片段属于普通App的一部分,因此多核 、多线程都可以支持。EDL随时随地定义,部署非常灵活方便。但是EDL是定义在代码中的,通过版本的逆向工程,对于数据的处理逻辑,是有可能被窥探的。 (最安全的还是在硬件中保护)

2、ARM TrustZone

TrustZone是标准TEE实现的一种方案,GP的TEE架构和规范标准都是由ARM TrustZone 贡献。当我们讲TrustZone时,可以理解为是在讲GP TEE。则于标准规范,就导致了与SGX不一样的情况,TEE实现有大量的资料可以参考。以下是TEE应用实现的原理:

在这里插入图片描述

  • 基础设施:与SGX不同的,TEE的功能,依赖于安全OS,首先要确保设备上已经部署了安全OS,并且要确保其是可信的;

  • 设计应用,对于需要可信保护的处理过程,需要实现在单独的可应用中(TA);APP以及TA需要分别开发,物理上他们是两个程序;

    • APP执行到安全处理部分时,它通过TEE标准接口向TA发消息;
    • 调用需要进入内核态,通过驱动将消息送到TEE侧;
    • TA收到消息后,来执行即定的数据处理逻辑。
    • 最后将结果返回到APP,但过程数据仍然在TEE侧。

TrustZone 利用的是CPU时间片切换来模拟了安全世界,这两个世界可以将它理解成一个CPU上处理的两个进程,它们通过上下文切换来将CPU的时间片占满以利用CPU。从安全角度,仅仅分时复用或拟化,是不足以确保安全的,因此ARM另外定义了安全框架,从硬件级别两个世界,包括Timer、TRNG、TZPC、MMU、Cache等相关设备,不同的芯片厂商会有自己的考虑,这个设备可能是双份的,或者是动态切换以达到隔离目的。同时,安全侧也需要有一个可信操作系统执行应用。从原理上,REE侧和TEE侧是对等的,因此并不会性能的差异。应用程序的开发,除了使用TEE定义的标准接口,依赖的都POSIX API,使用标准的开发语言。

在部署应用时,SGX只需要在代码中定义即可,在TrustZone中侧需要单独开发部署TA。一般设置厂商都会提供给应用开发者自行部署TA的方法,与SGX相比稍有一点不同,但并不是不可接受(个人观点),这也确实是SGX很明显的一个优势,于是乎,ARM后面有了Newmore这样一个概念。

但也正因为TA与APP是分离的,并且TEE侧是不可查看的,因此数据的处理过程很难以被窥探。(我倒是认为这样的解耦其实是有点,同时TA需要签名,安全的特性会进一步的得到保证。)

最后,还有一点,网上还有一种声音,认为SGX和TrustZone“没有什么用”,观点的理由是:

“且不说传统的攻击,如SQL注入、溢出攻击,使得攻击者可以直接控制非安全应用,进而通过定义的接口取得数据,即使没有这些漏洞,恶意软件通过其他途径入侵到了OS里面,它是不是可以远程注入一段代码到APP,然后调用接口获取数据?”

这里必须要反驳一下,之所有这个观点,是他没有理解SGX或TrustZone的真正的使用场景。正确的处理方式其实上面的过程描述中我们已经提到了:

  • “处理完之后,返回结果,但过程数据仍然在Enclave中”
  • “最后将结果返回到APP,但过程数据仍然在TEE侧”

一个有价值的安全应用,并不会支持将敏感数据通过接口调用返回到非安全侧。

应用的安全与否,无论是SGX还是TrustZone应用,确实很大程度上是依赖开发者的意识。SGX或者TrustZone,**它们的价值在于是隐匿敏感数据本身,以及尽可能的隐藏处理敏感数据的处理过程。**只有以这个导向,在应用开发时才能有意识地向这个方向去努力。

我们拿媒体数据举例,一看就会明白应该如何正确使用SGX或TrustZone—

高价值的媒体内容在网络传输时,它通常是被DRM加密保护的,只有凭证的订户才可以解密播放。盗版者本身可能就是个订户,在没有SGX、TrustZone等保护时,通过拷贝内存等手段就很容易实现盗版。但有这些技术后,加密的媒体流并不会在非安全侧解密,而是送往安全侧。注意,在SGX、TrustZone解完密之后的媒体,也并不会返回到安全侧,而是使用底层安全驱动,直接送往解码播放了,媒体数据直接在安全侧消费了。 (这部分的解码是硬件实现的,将数据和秘钥直接放到硬件的槽位,硬件解密之后直接送到player显示。)

以上是从应用开发者角度来比较SGX与TrustZone的差异。但事实上,两者完全不是一个层面的东西,SGX更适合拿AMD的SEV来比较,因为这两种技术类似,都是基于所谓的realm技术(局部保护)来实现。ARM有最新的newmore方案,但目前还在验证的概念阶段,预计在2023年以后才可能产品化,这个世界变化太快,两年的时间实太是太久,暂不便讨论。

3、Apple Secure Enclave

在没有使用 Intel SGX 和 Arm Trustzone 技术的情况下, Apple另辟蹊径提出了自己的安全协处理器方式的 Secure Enclave 方案。

  • 密钥数据在Secure Enclave片上系统(SoC)中进行了加密,该系统包括一个随机数生成器。

  • 即使设备内核遭到破坏,Secure Enclave也会保持其加密操作的完整性。通过将安全区域与应用处理器之间的通信隔离到中断驱动的邮箱和共享内存数据缓冲区,可以对其进行严格控制。

在这里插入图片描述
Secure Enclave是一个安全协处理器,其中包括基于硬件的密钥管理器,该密钥管理器与主处理器隔离,以提供额外的安全性。Secure Enclave是某些版本的iPhone,iPad,Mac,Apple TV,Apple Watch和HomePod的硬件功能,即:

  • iPhone 5s(或更高版本)
  • iPad Air(或更高版本)
  • 包含T1芯片或Apple T2安全芯片的Mac计算机
  • Apple TV 4代(或更高版本)
  • Apple Watch Series 1(或更高版本)
  • HomePod

参考链接:
Intel SGX/ARM TrustZone/Apple SecureEnclave浅析:https://mp.weixin.qq.com/s/WtF6EKUTDI01UjKv1H82Tw
谈谈汽车芯片信息安全:http://www.360doc.com/content/20/1210/21/68188258_950683861.shtml


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

相关文章

Intel SGX 技术初探

最近公司需要开发一款使用intel 的移动终端,需要用到SGX技术,特此将调研和整理的相关资料放置于下,欢迎交流。 一、SGX技术背景 1.1 SGX技术定义 SGX全称Intel Software Guard Extensions,顾名思义,其是对因特尔体系…

Intel SGX入门(二)——SGX应用篇

大概了解SGX以后,SGX应用有哪些? 第一种,SGX应用于服务器端,云端 这一类个人觉得很需要结合代码、它们所描述的行业需求和以前的行业产品去考虑问题,毕竟是应用,不然可能体会不到精髓。 我对SGX应用的理解…

Intel SGX Explained

文章目录 SGX新增Abstract第一章 概括1.1 SGX简介1.2 大纲和问题发现 第二章 Intel体系架构背景知识2.1 Overview2.2 计算模型2.3 软件权限级别2.4 地址空间2.5 地址转换2.5.1 地址转换概念2.5.2 地址转换和虚拟化2.5.3 页表属性 2.6 执行上下文2.7 段寄存器2.8 特权级别转换2.…

sgx使用记录(Windows开发环境搭建以及sgx的简单介绍)1

sgx使用记录 相关代码仓库 ##sgx-sdk https://github.com/apache/incubator-teaclave-sgx-sdk.git##Teaclave:通用安全计算平台 https://github.com/apache/incubator-teaclave检测sgx运行环境是否支持 ##或使用cpuid命令 cpuid |grep -i sgx##或使用脚本测试 下…

Windows10下使用Intel SGX功能(一):环境搭建

文章目录 参考文献系统要求一、安装Open Enclave SDK 环境(一)什么是Open Enclave SDK(二)启动SGX功能方法一: BIOS启动方法二:软件方式启动 (三)安装必要环境(1&#xf…

Intel SGX 功能如何开启

Intel SGX 功能如何开启 我本身是 Windows10 系统, BIOS 是 ASUS 的,在想装 Ubuntu 双系统的时候,在启动 Ubuntu 安装 ISO 的时候提示说电脑的 SGX 没有开启,安装失败,安装界面都没有进去。 之后搜了下如何开启 SGX&a…

SGX的内部组件概述

导语:SGX是Intel开发的新的处理器技术,可以在计算平台上提供一个可信的空间,保障用户关键代码和数据的机密性和完整性。SGX全称Intel Software Guard Extensions,顾名思义,其是对因特尔体系(IA)…

SGX入门

如何设计SGX程序: SGX分为可信部分和不可信部分,可信部分由enclave组成(一个应用程序可以拥有一个或多个enclave),enclave存储在加密的内存中,受SGX保护,enclave一旦被建立就不能更改,所以通常…

SGX Enable

根据INTEl的官方建议, 目前的电脑主板在BIOS设置上只保留了Disabled和Software Controlled来开启和关闭SGX扩展 使用Software Controlled开关的原因官方文档有阐述,如下: 开启SGX扩展,首先需要满足以下要求: CPU具有…

Intel SGX技术详细解释(非常棒)

http://www.jos.org.cn/html/2018/9/5594.htm#b18 随着信息技术的迅速发展与广泛应用, 人类社会已经进入了一个崭新的互联网时代.一方面, 人们享受着互联网科技带来的便利; 另一方面, 由网络和信息系统构成的网络空间也面临着日益严峻的安全问题.信任是网络空间中安全交互的基…

SGX问答

0 前言 有些问题比较常见,在这里直接将问答内容贴出来,方便大家搜索。有空再重新组织文字。 (我会避免泄露私人信息) 1 内存地址翻译全部交给os,那中间经过cache也是全部交给os是嘛?这个cache这部分&…

小谈Intel SGX

目录 Intel SGX简介 背景 为什么要Intel SGX? Intel SGX尚处于学术讨论 Intel SGX和可信启动什么关系? 开发者眼中SGX长什么样子? SGX访问控制是什么? MEE与SGX EPC内存加密 CPU里面SGX长什么样子? 有Enclav…

SGX技术与SGX攻击

2013年, Intel推出SGX(software guard extensions)指令集扩展, 旨在以硬件安全为强制性保障, 不依赖于固件和软件的安全状态, 提供用户空间的可信执行环境, 通过一组新的指令集扩展与访问控制机制, 实现不同程序间的隔离运行, 保障用户关键代码和数据的机密性与完整性不受恶意软…

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

一些概念 SGX(Software Guard eXtensions)软件保护扩展:是一组CPU指令扩展,能够创造出一个可信执行环境来保护代码和数据,即使使用root 权限也无法访问。通过这个硬件设施,应用程序可以隔离代码和数据来达…

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…