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

news2024/12/24 2:34:33

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

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

原文的链接: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://www.coloradmin.cn/o/99805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SD nand与SD卡 SPI模式驱动

SD nand 与 SD卡的SPI模式驱动 文章目录SD nand 与 SD卡的SPI模式驱动1. 概述2. SPI接口模式与SD接口模式区别2.1 接口模式区别2.2 硬件引脚2.3 注意事项3. SD接口协议3.1 命令3.1.1 命令格式3.1.2 命令类型3.2 响应3.2.1 响应格式4. SD nand(SD卡)结构描…

小程序01/ 小程序 模板语法—条件渲染方式、小程序 模板语法-列表循环渲染方式

模板语法—条件渲染方式 1.wx:if 语法: 单分支: wx:if" 条件 " 双分支: wx:else 多分支: wx:elif" 条件 " 作用: 根据条件渲染 如果条件不满足 则该元素不会添加到DOM数 注意: wx:else前面必须要有 wx:if 或 wx:elif 2.hidden 语法: hidden&qu…

Vue Router安装与基本使用

Vue Router安装与基本使用(入门使用) 一、安装 npm install vue-router4在package.json 会配置一行 “vue-router”: “^4.1.6” 二、基本使用 2.1、新建路由器 新建 router文件夹 1个index.js文件 //1.定义路由组件 import Home from ../views/Home.vue import About from ..…

[附源码]Python计算机毕业设计Django学生社团信息管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

QtCreator同时运行多个程序

更多精彩内容👉个人内容分类汇总 👈👉Qt开发经验 👈 QtCreator同时运行多个程序 在Windows下QtCreator默认只能运行一个程序,再次编译运行就会自动关闭之前运行的程序; 有时候我们想运行多个程序时&#x…

【电力系统】考虑储能优化的微网能量管理双层模型附matlab代码

​✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法…

一篇文章带你了解HBase、Zookeeper的安装部署

第 2 章 HBase 快速入门2.1 HBase 安装部署2.1.1 Zookeeper 正常部署2.1.2 Hadoop 正常部署2.1.3 HBase 的解压2.1.4 HBase 的配置文件2.1.5 HBase 远程发送到其他集群2.1.6 HBase 服务的启动2.1.7 查看 HBase 页面2.1.8 高可用(可选)2.2 HBase Shell 操…

「地表最强」C++核心编程(四)类和对象—对象初始化和清理

环境: 编译器:CLion2021.3;操作系统:macOS Ventura 13.0.1 文章目录一、构造函数和析构函数1.1 构造函数1.2 析构函数1.3 示例二、构造函数的分类及调用1.1 构造函数的分类1.2 构造函数的调用三、拷贝构造函数调用时机3.1 调用时机…

黑*头条_第1章_环境搭建、SpringCloud微服务(注册发现、服务调用、网关)(新版)

黑*头条_第1章_环境搭建、SpringCloud微服务(注册发现、服务调用、网关)(新版) 文章目录黑*头条_第1章_环境搭建、SpringCloud微服务(注册发现、服务调用、网关)(新版)1)课程对比2)项目概述2.1)能让你收获什么2.2)项目课程大纲2.3…

计算机毕业设计——基于HTML仿淘宝电商项目的设计与实现管理系统论文源码(21页)

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

毕业设计 stm32便携用电功率统计系统 -物联网 嵌入式 单片机

文章目录0 前言1 简介2 主要器件3 实现效果4 设计原理4.1 降压电路4.2 接口部分4.3 主控4.4 OLED模块5 部分核心代码5 最后0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的…

小黑被劝退了,生活学习依然继续的leetcode之旅:572. 另一棵树的子树

小黑代码 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def isSubtree(self, root: Optional[TreeNode],…

PyTorch~cpp_extension

还是pytorch哈~~ 结合 Python 与 C 各自的优点,在 PyTorch 中加入 C / CUDA的扩展,详细解释C/CUDA 算子实现和调用全流程 代码来源:MMCV, PyTorch。 https://github.com/open-mmlab/mmcv https://github.com/pytorch/pytorch 注&#xff1a…

python 编程 函数的返回值

作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.函数 1.函数的返回值介绍 2.函数的返回值定义 例子: 3.函…

【图像去噪】均值+中值滤波图像去噪(含PNSR)【含GUI Matlab源码 372期】

⛄一、图像去噪及滤波简介 1 图像去噪 1.1 图像噪声定义 噪声是干扰图像视觉效果的重要因素,图像去噪是指减少图像中噪声的过程。噪声分类有三种:加性噪声,乘性噪声和量化噪声。我们用f(x,y)表示图像,g(x,y&#xff0…

面试题:进程 线程 协程

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位 通俗的讲:进程可以理解为我们在电脑上正在运行的一个个应用,例如:QQ,微信,LOL…

数据结构---寻找一个整数所有数字全排列的下一个数

寻找一个整数所有数字全排列的下一个数储备知识第一步第二步第三步JAVA实现给出一个正整数,找出这个正整数所有数字全排列的下一个数。说通俗点就是在一个整数所包含数字的全部组合中,找到一个大于且仅大于原数的新整数。 例子: 如果输入123…

【翻译】GPT-3是如何工作的

前排提示 这是我补充的内容,仅代表个人观点,和作者本人无关。 主要是意译我的补充,想看原文表达的拖到最底下有链接。 原文翻译 在科技界我们可以看到很多关于GPT-3的新闻。大型语言模型(比如GPT-3)已经展示出让我们惊…

[附源码]Python计算机毕业设计Django现代诗歌交流平台

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

一篇ThreadLocal走天下

尺有所短,寸有所长;不忘初心,方得始终。 请关注公众号:星河之码 在面试的时候经常会有人文ThreadLocal是啥,首先明确的一点是:虽然ThreadLocal提供了一种解决多线程环境下成员变量的问题,但是Th…