目录

  • 一、背景
  • 二、苹果Secure Enclave在系统中的位置
  • 三、苹果Secure Enclave系统组件介绍
    • 1、安全隔区处理器
    • 2、内存保护引擎
    • 3、安全隔区 Boot ROM
    • 4、安全隔区启动监视器
    • 5、真随机数生成器
    • 6、根加密密钥
    • 7、安全隔区 AES 引擎
    • 8、AES 引擎
    • 9、公钥加速器
    • 10、安全非易失性存储器
    • 11、安全神经网络引擎
    • 12、功耗和时钟监视器
  • 四、苹果各个芯片Secure Enclave功能汇总

一、背景

2020 年秋天,苹果突然升级设备中的 A12、A13 以及 S5 芯片,这次升级比较反常,因为这些芯片是在生产中迎来了升级。根据苹果官方支持页面,苹果在 2020 年秋天推出了第二代安全隔区(Secure Enclave)。苹果表示,早期的 A12、A13 和 S5 芯片还是第一代安全隔区,但在 2020 年秋天开始,新生产的芯片已经升级为第二代安全隔区。

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


安全隔区是一个独立于主处理器外的安全协处理器,其中包括基于硬件的密钥管理器,可提供额外的安全性保护。安全隔区是部分版本的 iPhone、iPad、Mac、Apple TV、Apple Watch 和 HomePod 的硬件功能。

安全隔区还会维护其加密操作的完整性,即使在设备内核遭到入侵的情况下,安全隔区与应用程序处理器之间的通信受到严格的控制,方法是将其隔离到一个中断驱动的邮箱以及共享的内存数据缓冲区。

苹果突然升级安全隔区,与2019年出现的 GrayKey 密码破解设备有关系。GrayKey 一次可以连接两台 iPhone,插入 iPhone 后,需要等待 2分钟安装专门的软件,并可以实现 iPhone 解锁。当软件安装完成后,GrayKey 开始破解密码,这个过程可能耗费几小时,如果密码是6位的,也有可能花费几天的时间。GrayKey 属于暴力破解,通过漏洞可以无限次尝试密码,直到密码准确。

二、苹果Secure Enclave在系统中的位置

安全隔区是集成到 Apple 片上系统 (SoC) 的专用安全子系统。安全隔区独立于主处理器,可提供额外的安全保护,即使应用程序处理器内核遭到入侵,也可保护敏感用户数据的安全。其遵循与 SoC 相同的设计准则:Boot ROM 用于建立硬件信任根,AES 引擎用于高效安全的加密操作以及内存受保护。虽然安全隔区不含储存设备,但它拥有一套将信息安全储存在所连接储存设备上的机制,该储存设备与应用程序处理器和操作系统使用的 NAND 闪存互相独立。

三、苹果Secure Enclave系统组件介绍

1、安全隔区处理器

安全隔区处理器为安全隔区提供了主要的计算能力。为了提供最高级别的隔离,安全隔区处理器专供安全隔区使用。这可帮助阻止旁路攻击的发生,这种攻击依赖于恶意软件使用与被攻击目标软件相同的执行核。

安全隔区处理器运行 Apple 定制版的 L4 微内核。安全隔区处理器设计为以较低时钟速度高效运行,这有助于防范时钟攻击和功耗攻击。从 A11 和 S4 开始,安全隔区处理器包括内存受保护的引擎和具备反重放功能的加密内存、安全启动、专用的随机数生成器和独有的 AES 引擎。

2、内存保护引擎

安全隔区从设备 DRAM 内存的专用区域运行。多层保护将由安全隔区保护的内存与应用程序处理器隔离。

当设备启动时,安全隔区 Boot ROM 会为内存保护引擎生成随机临时内存保护密钥。每当安全隔区写入到其专用内存区域时,内存保护引擎就会在 Mac XEX (xor-encrypt-xor) 模式中使用 AES 加密内存块,并为内存计算基于密码的消息认证码 (CMAC) 认证标签。内存保护引擎会将认证标签与加密内存一同储存。当安全隔区读取内存时,内存保护引擎会验证认证标签。如果认证标签匹配,内存保护引擎就会解密内存块。如果标签不匹配,内存保护引擎会向安全隔区报告错误。发生内存认证错误后,在系统重新启动前安全隔区会停止接受请求。

从 Apple A11 和 S4 SoC 开始,内存保护引擎为安全隔区内存增加了重放保护。为了帮助防止重放安全性要求极高的数据,内存保护引擎会将内存块的随机数与认证标签一同储存。随机数为 CMAC 认证标签提供了额外保护。所有内存块的随机数受植根于安全隔区内专用 SRAM 中完整性树的保护。发生写入操作时,内存保护引擎会更新随机数以及完整性树自 SRAM 起向下的的每一层。发生读取操作时,内存保护引擎会验证随机数以及完整性树自 SRAM 起向下的的每一层。随机数不匹配的处理方法与认证标签不匹配的处理方法类似。

在 Apple A14、M1 及后续型号的 SoC 上,内存保护引擎支持两组临时内存保护密钥。第一组密钥用于安全隔区独有的数据,第二组密钥用于与安全神经网络引擎共享的数据。

内存保护引擎以内联方式运行且对安全隔区透明。安全隔区将内存当作普通的未加密 DRAM 一样进行读取和写入,而安全隔区外的观察程序只能看到加密和认证版本的内存。这样做的结果是既提供了强大的内存保护,又未牺牲性能或增加软件复杂度。

3、安全隔区 Boot ROM

安全隔区包括一个专用的安全隔区 Boot ROM。与应用程序处理器 Boot ROM 类似,安全隔区 Boot ROM 也是不可更改的代码,用于为安全隔区建立硬件信任根。

系统启动时,iBoot 会给安全隔区分配一个专用的内存区域。在使用内存前,安全隔区 Boot ROM 就会初始化内存保护引擎,为由安全隔区保护的内存提供加密保护。

应用程序处理器随后将 sepOS 映像发送给安全隔区 Boot ROM。将 sepOS 映像拷贝到由安全隔区保护的内存后,安全隔区 Boot ROM 会检查映像的加密哈希值和签名,以验证 sepOS 已获授权来在设备上运行。如果 sepOS 映像已正确签名以在设备上运行,安全隔区 Boot ROM 会将控制转移给 sepOS。如果签名无效,安全隔区 Boot ROM 会设计为在下一次芯片还原前阻止进一步使用安全隔区。

在 Apple A10 及后续型号的 SoC 上,安全隔区 Boot ROM 将 sepOS 的哈希值锁定到专用于此目的的寄存器。公钥加速器会为操作系统绑定 (OS-bound) 密钥使用此哈希值。

4、安全隔区启动监视器

在 Apple A13 及后续型号的 SoC 上,安全隔区包括一个启动监视器,旨在确保所启动 sepOS 的哈希值具有更强的完整性。

系统启动时,安全隔区处理器的系统协处理器完整性保护 (SCIP) 配置会帮助阻止安全隔区处理器执行安全隔区 Boot ROM 以外的任何其他代码。启动监视器会帮助阻止安全隔区直接修改 SCIP 配置。为了使加载的 sepOS 具有可执行性,安全隔区 Boot ROM 会向启动监视器发送一个包含所加载 sepOS 的地址和大小的请求。启动监视器在收到请求后会重设安全隔区处理器、对加载的 sepOS 执行哈希算法、更新 SCIP 设置以允许执行加载的 sepOS,并在新加载的代码内开始执行。随着系统继续启动,只要有可供执行的新代码,就会使用这一相同过程。启动监视器每次都会更新启动过程的运行哈希值。启动监视器还会在运行哈希值中包括关键的安全性参数。

启动完成时,启动监视器会确定最终的运行哈希值,并将它发送到公钥加速器以用于操作系统绑定密钥。此过程旨在确保即使安全隔区 Boot ROM 中存在漏洞,也不可绕过操作系统密钥绑定。

5、真随机数生成器

真随机数生成器 (TRNG) 用于生成安全的随机数据。安全隔区在每次生成随机加密密钥、随机密钥种子或其他熵时都会使用 TRNG。TRNG 基于多个环形振荡器并经过 CTR_DRBG(基于计数器模式中块密码的算法)后处理。

6、根加密密钥

安全隔区包括一个唯一 ID (UID) 根加密密钥。UID 对于每台设备来说都是唯一的,且与设备上的任何其他标识符都无关。

随机生成的 UID 在制造过程中便被固化到 SoC 中。从 A9 SoC 开始,UID 在制造过程中由安全隔区 TRNG 生成,并使用完全在安全隔区中运行的软件进程写入到熔丝中。这一过程可以防止 UID 在制造过程中于设备之外可见,因此不可被 Apple 或其任何供应商访问或储存。

sepOS 使用 UID 来保护设备特定的密钥。有了 UID,就可以通过加密方式将数据与特定设备捆绑起来。例如,用于保护文件系统的密钥层级就包括 UID,因此如果将内置 SSD 储存设备从一台设备整个移至另一台设备,文件将不可访问。其他受保护的设备特定密钥包括触控 ID 或面容 ID 数据。在 Mac 上,只有链接到 AES 引擎的完全内置储存设备才会获得这个级别的加密。例如,通过 USB 连接的外置储存设备或者添加到 2019 年款 Mac Pro 的基于 PCIe 的储存设备都无法获得这种方式的加密。

安全隔区还有设备组 ID (GID),它是使用特定 SoC 的所有设备共用的 ID(例如,所有使用 Apple A14 SoC 的设备共用同一个 GID)。

UID 和 GID 不可以通过联合测试行动小组 (JTAG) 或其他调试接口使用。

7、安全隔区 AES 引擎

安全隔区 AES 引擎是一个硬件块,用于基于 AES 密码来执行对称加密。AES 引擎设计用于防范通过时序和静态功耗分析 (SPA) 泄露信息。从 A9 SoC 开始,AES 引擎还包括动态功耗分析 (DPA) 对策。

AES 引擎支持硬件密钥和软件密钥。硬件密钥派生自安全隔区 UID 或 GID。这些密钥保存在 AES 引擎内,即使对 sepOS 软件也不可见。虽然软件可以请求通过硬件密钥进行加密和解密操作,但不能提取密钥。

在 Apple A10 及后续型号的 SoC 上,AES 引擎包括可锁定的种子位,它可使派生自 UID 或 GID 的密钥多样化。这允许基于设备的操作模式有条件地访问数据。例如,可锁定的种子位用于从设备固件更新 (DFU) 模式启动时拒绝对受密码保护的数据进行访问。有关更多信息,请参阅密码。

8、AES 引擎

每台包含安全隔区的 Apple 设备还具有专用的 AES256 加密引擎(“AES 引擎”),它内置于 NAND(非易失性)闪存与主系统内存之间的直接内存访问 (DMA) 路径中,可以实现高效的文件加密。在 A9 或后续型号的 A 系列处理器上,闪存子系统位于隔离的总线上,该总线被授权只能通过 DMA 加密引擎访问包含用户数据的内存。

启动时,sepOS 会使用 TRNG 生成一个临时封装密钥。安全隔区使用专用线将此密钥传输到 AES 引擎,旨在防止它被安全隔区外的任何软件访问。sepOS 随后可以使用临时封装密钥来封装文件密钥,供应用程序处理器文件系统驱动程序使用。当文件系统驱动程序读取或写入文件时,它会将封装的密钥发送到 AES 引擎以解封密钥。AES 引擎绝不会将未封装的密钥透露给软件。

【注】AES 引擎是一个独立于安全隔区和安全隔区 AES 引擎的组件,但其操作与安全隔区紧密相连,具体如下所示。

9、公钥加速器

公钥加速器 (PKA) 是一个硬件块,用于执行非对称加密操作。PKA 支持 RSA 和 ECC(椭圆曲线加密)签名和加密算法。PKA 设计用于防范使用时序攻击及 SPA 和 DPA 等旁路攻击来泄露信息。

PKA 支持软件密钥和硬件密钥。硬件密钥派生自安全隔区 UID 或 GID。这些密钥保存在 PKA 内,即使对 sepOS 软件也不可见。

从 A13 SoC 开始,PKA 的加密实现方法已通过形式化验证技术被证明在数学方面是正确的。

在 Apple A10 及后续型号的 SoC 上,PKA 支持操作系统绑定密钥,也称为密封密钥保护 (SKP)。这些密钥基于设备 UID 和设备上所运行 sepOS 的哈希值组合生成。哈希值由安全隔区 Boot ROM 提供,在 Apple A13 及后续型号的 SoC 上,则由安全隔区启动监视器提供。这些密钥还用于在请求特定 Apple 服务时验证 sepOS 版本,以及用于在系统发生重大更改而未获得用户授权时通过协助阻止访问密钥材料来提高受密码保护数据的安全性。

10、安全非易失性存储器

安全隔区配备了专用的安全非易失性存储器设备。安全非易失性存储器通过专用的 I2C 总线与安全隔区连接,因此它仅可被安全隔区访问。所有用户数据加密密钥植根于储存在安全隔区非易失性存储器中的熵内。

搭载 A12、S4 及后续型号 SoC 的设备并用了安全隔区与安全储存组件来储存熵。安全储存组件本身设计为使用不可更改的 ROM 代码、硬件随机数生成器、每个设备唯一的加密密钥、加密引擎和物理篡改检测。安全隔区和安全储存组件使用加密且认证的协议通信以提供对熵的独有访问权限。

2020 年秋季或之后首次发布的设备配备了第二代安全储存组件。第二代安全储存组件增加了计数器加密箱。每个计数器加密箱储存一个 128 位盐、一个 128 位密码验证器、一个 8 位计数器,以及一个 8 位最大尝试值。对计数器加密箱的访问通过加密且认证的协议来实现。

计数器加密箱中含有所需用于解锁受密码保护用户数据的熵。若要访问用户数据,配对的安全隔区必须从用户的密码和安全隔区的 UID 中派生出正确的密码熵值。从除配对安全隔区之外其他来源发送的解锁尝试均无法获知用户的密码。如果密码的尝试次数超过限制(例如,在 iPhone 上为 10 次),安全储存组件就会完全抹掉受密码保护的数据。

为了创建计数器加密箱,安全隔区会向安全储存组件发送密码熵值和最大尝试次数值。安全储存组件会使用其随机数生成器生成盐值。之后通过提供的密码熵、安全储存组件的唯一加密密钥和盐值派生出密码验证器值和加密箱熵值。安全储存组件使用计数 0、提供的最大尝试次数值、派生的密码验证器值和盐值来初始化计数器加密箱。之后安全储存组件将生成的加密箱熵值返回到安全隔区。

为了稍后从计数器加密箱中取回加密箱熵值,安全隔区会向安全储存组件发送密码熵。安全储存组件会先为加密箱递增计数器。如果递增后的计数器超过最大尝试次数值,安全储存组件就会完全抹掉计数器加密箱。如果尚未达到最大尝试次数,安全储存组件会尝试通过与用于创建计数器加密箱相同的算法来派生出密码验证器值和加密箱熵值。如果派生的密码验证器值匹配所储存的密码验证器值,安全储存组件会将加密箱熵值返回到安全隔区并将计数器重设为 0。

用于访问受密码保护数据的密钥植根于计数器加密箱所储存的熵中。

安全隔区中的所有反重放服务均使用了安全非易失性存储器。安全隔区上的反重放服务用于在发生以下标记反重放边界的事件时撤销数据,这些事件包括但不限于:

  • 更改密码
  • 启用或停用触控 ID 或面容 ID
  • 添加或移除触控 ID 指纹或面容 ID 面容
  • 重设触控 ID 或面容 ID
  • 添加或移除 Apple Pay 卡片
  • 抹掉所有内容和设置

在未配备安全储存组件的架构上,EEPROM(电可擦除可编程只读存储器)被用于为安全隔区提供安全储存服务。跟安全储存组件类似,EEPROM 连接到安全隔区并仅可从安全隔区访问,但其不包含专用的硬件安全性功能,不能确保对熵的独有访问权限(除了其物理连接特性),也不具备计数器加密箱功能。

11、安全神经网络引擎

在配备面容 ID 的设备上,安全神经网络引擎将 2D 图像和深度图转化为用户脸部的数学表达式。

在 A11 到 A13 SoC 上,安全神经网络引擎已集成到安全隔区中。安全神经网络引擎采用直接内存访问 (DMA) 以实现高性能。由 sepOS 内核控制的输入输出内存管理单元 (IOMMU) 将此直接访问的范围限制在经授权的内存区域。

从 A14 和 M1 开始,安全神经网络引擎在应用程序处理器的神经网络引擎中作为安全模式实现。一个专用的硬件安全性控制器会在应用程序处理器和安全隔区的任务间切换,每次转换时神经网络引擎状态均会被重设以保持面容 ID 数据的安全。一个专用的引擎会应用内存加密、认证和访问控制。同时,它使用单独的加密密钥和内存范围,以将安全神经网络引擎限制在经授权的内存区域。

12、功耗和时钟监视器

所有的电子设备都被设计为在一定的电压和频率包络内运行。如果在此包络外运行,电子设备可能会发生故障,然后安全性控制就可能被绕过。为了帮助确保电压和频率保持在安全的范围内,安全隔区中设计了监视电路。这些监视电路被设计为具有比安全隔区其余部分更大的运行包络。如果监视器检测到非法运行点,安全隔区中的时钟会自动停止,在下一次 SoC 重设前不会重新开始运行。

四、苹果各个芯片Secure Enclave功能汇总

【注】2020 年秋季首次发布的 A12、A13、S4 和 S5 产品搭载了第二代安全储存组件,而基于这些 SoC 的更旧款产品搭载了第一代安全储存组件。

苹果芯片安全隔区 “Apple Secure Enclave” 分析笔记相关推荐

  1. iOS Secure Enclave

    一.概述 可能对于大多数 iOS开发而已,对于 Secure Enclave 很陌生,Secure Enclave 翻译成中文是 "安全区域" 的意思.在iOS安全白皮书中对于 S ...

  2. 苹果屏幕自动变暗_iOS版小程序、睡眠功能、苹果芯片:WWDC2020这些看点值得关注...

    北京时间6月23日凌晨一点,万众瞩目的WWDC2020开发者大会正式举办,和往常不同的是,这一次的WWDC2020将是苹果首次线上举办的发布会.不过尽管是线上发布,但是该有的东西一个都不少,包括iOS ...

  3. 全员“拉踩”苹果,入局一年多的苹果芯片已成“行业标杆”?

    还记得上周英特尔号称造出了"世界最快的移动处理器.世界最好的移动平台"吗?彼时为证明这一说法,英特尔甚至直接官方下场与苹果 M1 Max 进行性能对比,看似取得了"碾压式 ...

  4. 「镁客早报」恒大健康称首款电动汽车拟6月投产;产业链透露苹果正悄悄准备Apple Car...

    通过入股和收购等战略行为,恒大健康已经构建起新能源汽车产业链. 1.美媒:Waymo自动驾驶出租车仍有提升空间,有时会逆行 据美国科技媒体The Information网站报道,谷歌母公司Alphab ...

  5. 「镁客早报」恒大健康称首款电动汽车拟6月投产;产业链透露苹果正悄悄准备Apple Car... 1

    通过入股和收购等战略行为,恒大健康已经构建起新能源汽车产业链. 1.美媒:Waymo自动驾驶出租车仍有提升空间,有时会逆行 据美国科技媒体The Information网站报道,谷歌母公司Alphab ...

  6. 苹果手机主板芯片_团结来到苹果芯片

    苹果手机主板芯片 At WWDC, Apple announced the next evolution of the Mac. To ensure your games are future-pro ...

  7. MPB:上海交大肖湘组分享基于基因芯片的海洋微生物转录组学分析技术

    为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议点击文末阅读原文 ...

  8. 苹果芯片工程师又被挖!这次是微软,要自研Azure服务器芯片

    丰色 发自 凹非寺 量子位 | 公众号 QbitAI 苹果芯片部门又被挖墙脚了. 据彭博社报道,在苹果工作了近3年的高级工程师Mike Filippo已入职微软担任首席架构师,负责Azure服务器芯片 ...

  9. 苹果芯片团队又遭挖人,重量级芯片设计师被微软挖走

    1月13日消息,据国外媒体报道,在M1开发团队的领导者杰夫·威尔科克斯(Jeff Wilcox)被英特尔挖走之后不到一周,又出现了苹果芯片团队又一重要设计师被微软挖走的消息. 外媒是援引知情人士的透露 ...

最新文章

  1. 怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...
  2. MySQL数据库启动报The server quit without updating PID file
  3. hdu 4768 Flyer 二分
  4. java 数据分析库_超级好用的 Java 数据可视化库:Tablesaw
  5. USACO 3.2 Stringsobits
  6. 使用Jupyter notebook,为什么按下ctrl+enter后,没有输出,也没有报错,而是一直出现“*”呢?
  7. 10万人的大场馆如何“画座位”?
  8. 扩展GridView控件——为内容项添加拖放及分组功能
  9. LeetCode 1360. 日期之间隔几天(闰年判断)
  10. 学术会议墙报_中国化学会第十四届全国电分析化学学术会议在南京顺利召开
  11. 面向项目(十)—— 头文件、源文件的组织
  12. HAProxy安装与配置(一)
  13. 【Python实例第4讲】填补缺失值
  14. Unity之UGUI初探—按钮动画
  15. Angular服务器端渲染
  16. 公司小规模纳税人税务零申报操作说明
  17. android微信朋友圈相册背景,微信朋友圈相册背景多大尺寸合适
  18. 搜狗公众号爬虫学习系列一公众号的biz
  19. linux基础-自查
  20. IT视频课程集(包含各类Oracle、DB2、Linux、Mysql、Nosql、Hadoop、BI、云计算、编程开发、网络、大数据、虚拟化

热门文章

  1. 动漫中各式各样的服饰怎么绘画?有什么技巧嘛?
  2. html5 video视频自适应手机大小
  3. java实现快速排序,冒泡排序,插入排序,选择排序,堆排序等经典排序
  4. 某程序员哀叹:辛辛苦苦写几年代码,做了些业务,有了点成就感,但回头一看80%都没用,没法写到简历上!...
  5. Mybatis-Plus之连表查询的基本实现
  6. php去掉excel看不见的空格,如何批量去除Excel中无法看不见的空格?
  7. Linux 查看进程、杀死进程
  8. 【图像去噪】基于matlab全变分算法(TV)图像去噪【含Matlab源码 625期】
  9. 道闸系统服务器内存不足,五大道闸系统常见故障以及解决方案
  10. QQ电脑管家和Qplus(Q+)加速版提取