jjzjj

隐私计算中可信执行环境的一知半解

曹洪伟 2023-03-28 原文
隐私计算是使数据“可用不可见”的技术,它包括了密码学、人工智能、安全硬件等众多领域交叉的学科体系。对于隐私计算而言,业界通常分为三大路径技术:以安全多方计算为代表的密码学路径、以可信任执行环境为代表的硬件路径和以联邦学习为代表的人工智能路径。

可信执行环境

可信执行环境的核心思想是构建一个独立于操作系统而存在的可信的、隔离的机密空间,数据计算仅在 该安全环境内进行,通过依赖可信硬件来保障其安全。可信执行环境的概念源于 Open Mobile TerminalPlatform( OMTP) 于 2006 年提出的一种保护移动设备上敏感信息安全的双系统解决方案,在传统系统运行环境( Rich Execution Environment,REE) 之外,提供一个隔离的安全系统用于处理敏感数据。2010 年 7 月,Global Platform( 致力于安全芯片的跨行业国际标准组织,简称 GP) 起草制定了一整套可信执行环境系统的体系标准,成为当前许多商业或开源产品定义其各种功能接口的规范参考。

根据全球平台国际标准组织 (GlobalPlatform)的定义,一个可信执行环境体系主要包括 :

(1)普通执行环境(REE)。普通执行环境是指那些有着丰富功能的环境,如 Android、Windows、iOS 等。这些系统由于广泛使用,功能不断增加,结构也越来越复杂,相应地导致安全性普遍不高。

(2)可信执行环境(TEE)。可信执行环境主要指那些与普通执行环境相隔离,用于执行高安全性操作的环境。与普通执行环境相比,可信执行环境的功能相对较少,只保留一些与安全相关的机制,如密钥管理等,同时提供一些必要的系统功能。 

(3)客户端应用(CA)。所有运行在普通执行环境中的应用都被称作客户端应用,其中一些可能需要与可信执行环境通信并要求服务。 

(4)可信应用(TA)。可信应用是指那些运行在可信执行环境里的应用。这些应用一般用来为客户端应用提供特定的安全服务,或处理一些安全任务,如密钥生成和密钥管理等。

可信执行环境体系结构的构建方法有多种,总体可以归结为 3 种 :扩展协处理器、嵌入式协处理器和处理器安全环境。扩展协处理器和嵌入式协处理器都需要额外的处理器作为安全核来处理安全和完整性保护任 务,不同之处在于扩展协处理器将安全核放置在片外,不与主处理器共享任何资源,而嵌入式协处理器将安全核嵌入片内,一般与主处理器共享部分资源。

可信执行环境的最本质属性是隔离,通过芯片等 硬件技术并与上层软件协同对数据进行保护,且同时 保留与系统运行环境之间的算力共享。目前,可信执行环境的代表性硬件产品主要有 Intel 的 TXT、ARM 的 TrustZone 等,由此也诞生了很多基于以上产品的商 业化实现方案,如百度 MesaTEE、华为 iTrustee 等。下图为基于可信执行环境的数据计算平台技术架构。 

严格来讲,可信执行环境并不属于“数据可用不可见”,但其通用性高、开发难度低,在通用计算、复杂算法的实现上更为灵活,使得其在数据保护要求不是特别严苛的场景下仍有很多发挥价值的空间。 

Intel 的可信执行技术

可信执行技术(Trusted Execute Technology,TXT)是Intel公司的可信计算技术,主要通过改造芯片组和CPU,增加安全特性,通过结合一个基于硬件的安全设备—可信平台模块(Trusted Platform Module,TPM),提供完整性度量、密封存储、受保护的I/O、以及受保护的显示缓冲等功能,主要用于解决启动进程完整性验证和提供更好的数据保护。

英特尔称,TXT技术具备以下保护功能:处理器执行内存、处理器事件处理、系统内存、内存和芯片组路径、存储子系统、人为输入设备和显卡输出等。

可信执行技术给硬件平台增加了许多关键功 能‚这些功能包括: 

(1) 程序执行保护:保护程序执行和存放敏感 数据的内存空间。这项特性允许某个应用程序在一个相对独立的环境中运行,与平台上的其他程序不 能互相干扰。没有任何其他程序能够监视或读取在 保护环境中运行的程序数据。每个运行在保护环境 中的程序将从处理器和芯片组那里获得独立的系统 资源。 

(2) 加密存储:密封的存储密钥和其他在使用 和存储中易受攻击的数据。TPM 芯片将可以把密 钥加密并存储在硬件中。而集成了 TPM 芯片的系 统将具备解密密钥的能力。任何企图从 TPM 系统 中未经授权的拷贝操作都只能得到一堆毫无意义的 乱码。 

(3) 证明系统能够正确调用可信执行技术‚同 时也确保一个运行在保护空间的软件的校验值。 

(4) 减少由于改进的服务而所需的技术支持费 用;支持分散或远程计算;鉴别有更高级别保证的平 台配置。 

(5) 内存保护:能够加强系统资源的保护‚增强 了数据机密性和完整性‚改进了数据传输的安全性 和敏感数据的保护性。

TXT 技术的这些特性使计算平台在遇到越来越频繁和越来越复杂的软件攻击时更安全。为了实现可信执行技术‚计算平台需要一些硬 件组成部分‚主要的硬件元件有:处理器‚芯片集‚键 盘和鼠标‚图形设备‚TPM 设备。IA-32架构处理器的扩展允许创建多操作环境‚ 比如标准区域和保护区域的并存‚这样应用软件就 可以独立的被允许在一个受隔离的保护区域。扩展的芯片组加强内存保护机制‚加强了访问内存的数据保护‚保护图形设备和 I/O 设备的通道‚并提供了 TPM 的接口。

此外,Intel TXT 需要系统内建 Trusted Computing Group 定义的 TPM v1.2 和特定软件满足供部分用途,在部分国家的供货可能受到当地法规限制。

ARM 的Trust Zone

TrustZone 技术的主要方法是将设备的硬件和软件资源全部划分成安全区域和非安全区域,两个区域之间不能随意进行数据交换,非安全区域的进程禁止访问安全区域,以保证存储在安全区域的资源不被窃取。下面从硬件和软件两个层面进行分析。

在硬件层面上,TrustZone 将物理处理器核虚拟成两个核,一个称为非安全核(Non-secure,NS),另一个称为安全核(Secure,S),通过 CP15 的 SCR 寄存器中的 NS 位来表明当前所处的状态。非安全核只能访问自己的系统资源,安全核可以访问所有资源 。在安全核和非安全核之间切换的机制称为监视器模 式。非安全核的进程可以通过 SMC 指令或者硬件异常机制进入监视器模式,由此获得安全核的服务。需要注意的是,非安全核的进程只能获得安全核的服务,并不能访问安全核的数据。此外,TrustZone 技术在虚拟内存管理、Cache、外围总线等方面 都做了努力来保证安全核的数据信息不被泄露。

在软件层面上,TrustZone 实现了安全可信启动,即在引导加载过程中先启动安全区域并对启动状态做完整性验证,验证无误后再启动非安全区域,这样能够保证系统启动过程的安全。

目前市面上存在一些基于 TrustZone 的安全技术,如华为 Mate7 手机中使 用的 指 纹识 别 技 术、 苹果 公司的Secure Enclave 技术、三星公司的 Knox 系统等。但到目前为止,这些技术并没有挖掘出 TrustZone 的全部潜力,原因在于 :

(1)结构简单,导致功能比较单一,难以扩展 ;

(2)平台并不开源,很多开发者不能基于这些安全平台设计新的可信应用。

因此,搭建一个基于 TrustZone 技术的完善的可信执行环境对于平台和应用的开发和研究都是非常有利的 。

小结

信任机制是隐私计算广泛应用的关键,隐私计算技术自诞生以来的重要使命便是保证隐私数据在被利用的过程中不被泄露,以 TEE 为代表 的可信硬件也主要应用于个人移动用户的数据安全保护中。基于 ARM TrustZone 实现的可信执行环境是一种硬件隔离安全机制,以物理方式将系统划分为安全和非安全组件,确保在正常操作下的软件无法直接访问安全区域的数据; 而基于 Intel TXT 实现 的可信执行环境是一种算力和内存隔离的安全机制。而从开源的视角来看,隐私计算的开源项目还是大多集中在联邦学习领域。

有关隐私计算中可信执行环境的一知半解的更多相关文章

  1. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

  2. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  3. ruby - Chef 执行非顺序配方 - 2

    我遵循了教程http://gettingstartedwithchef.com/,第1章。我的运行list是"run_list":["recipe[apt]","recipe[phpap]"]我的phpapRecipe默认Recipeinclude_recipe"apache2"include_recipe"build-essential"include_recipe"openssl"include_recipe"mysql::client"include_recipe"mysql::server"include_recipe"php"include_recipe"php::modul

  4. ruby - 为什么 Ruby 的 each 迭代器先执行? - 2

    我在用Ruby执行简单任务时遇到了一件奇怪的事情。我只想用每个方法迭代字母表,但迭代在执行中先进行:alfawit=("a".."z")puts"That'sanalphabet:\n\n#{alfawit.each{|litera|putslitera}}"这段代码的结果是:(缩写)abc⋮xyzThat'sanalphabet:a..z知道为什么它会这样工作或者我做错了什么吗?提前致谢。 最佳答案 因为您的each调用被插入到在固定字符串之前执行的字符串文字中。此外,each返回一个Enumerable,实际上您甚至打印它。试试

  5. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  6. ruby - 检查是否通过 require 执行或导入了 Ruby 程序 - 2

    如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby​​文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否

  7. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  8. postman——集合——执行集合——测试脚本——pm对象简单示例02 - 2

    //1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json

  9. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  10. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

随机推荐