Secure Enclave — 是Apple设备中的专用硬件协处理器,实现了用于处理加密操作和存储机密数据的隔离安全环境。Secure Enclave在自有微处理器上运行L4微内核,不直接访问设备的主内存或外设。根据Apple Platform Security Guide,Secure Enclave使用硬件真随机数生成器TRNG和专用AES引擎在芯片级别提供加密操作。
要点
Secure Enclave(SEP — Secure Enclave Processor)— 是一个集成在Apple SoC中的专用32位RISC处理器(早期芯片为ARM Cortex-A7/A8,较新的为自有L4微内核)。它为所有需要硬件隔离的加密和生物识别操作充当安全协处理器。
Secure Enclave首次出现在A7芯片(iPhone 5S,2013)中,与Touch ID一同推出。在A7–A8中,Secure Enclave作为处理器的一部分实现。从A9(iPhone 6S,2015)开始,Secure Enclave使用独立的晶片区域,具有独立的电源和时钟。从A12(2018)开始,Secure Enclave获得了自己的真随机数生成器(TRNG)和Ed25519硬件加速器。
每个Secure Enclave都有一个在芯片生产阶段嵌入的唯一标识符(UID)。UID用作加密所有其他密钥的根密钥。即使是Apple也无法提取或恢复此标识符——它仅在Secure Enclave内部可用。
现代移动操作系统复杂且包含数百万行代码,使其容易遭受漏洞利用。即使攻击者完全控制iOS(内核级别),Secure Enclave仍然不可访问——它在物理上与主SoC分离,不接受直接命令。只有通过安全通道的加密请求才能与SEP通信。
根据Apple Platform Security(2025)的数据,在现有硬件限制下,没有记录到从锁定设备的Secure Enclave成功提取数据的案例。
Secure Enclave作为自主处理器运行:设备启动后,由其自己的引导加载程序(SEP ROM)初始化,验证L4微内核的完整性,然后通过安全邮箱(mailbox)进入等待Application Processor(AP)请求的模式。
应用处理器(AP)和Secure Enclave之间的交换通过安全邮箱进行,使用共同会话密钥加密。AP发送加密请求,SEP解密,执行操作(签名、解密、密钥生成),并以加密形式返回结果。SEP从不接受未加密的命令。
在建立会话密钥之前,AP和SEP执行使用嵌入在SEP ROM中并由Apple证书验证的组密钥(Group Key)的身份验证协议。这种机制确保只有真正的Apple设备才能与特定的Secure Enclave通信。
所有加密密钥都使用硬件TRNG在Secure Enclave内部生成。每个密钥都与设备的UID绑定,无法导出。访问密钥时,AP指定其句柄(如在Keychain中),SEP执行操作而不泄露密钥本身。
// 在Secure Enclave内部生成ECDSA密钥
@interface AppDelegate ()
- (SecKeyRef)generateSEKey;
@end
- (SecKeyRef)generateSEKey {
let attributes: [String: Any] = [
kSecAttrKeyType as String: kSecAttrKeyTypeECSECPrimeRandom,
kSecAttrKeySizeInBits as String: 256,
kSecAttrTokenID as String: kSecAttrTokenIDSecureEnclave,
kSecPrivateKeyAttrs as String: [
kSecAttrIsPermanent as String: true,
kSecAttrLabel as String: "com.app.key"
]
]
var error: Unmanaged<CFError?>?
return SecKeyCreateRandomKey(attributes as CFDictionary, &error)
}
Secure Enclave不仅仅是一个软件模块,而是晶片上的一个完整自主计算机。它包含自己的处理器、RAM、ROM、非易失性存储器和专用加密加速器。
Secure Enclave的处理器——32位ARM Cortex-A7(A7-A10)或自有L4微内核(A12+)。RAM是静态分配的(SRAM),从外部无法访问。ROM(SEP ROM)包含引导加载程序和组密钥。非易失性存储器存储UID、根证书和永久密钥。
Secure Enclave SRAM的大小有限(根据代际不同为16-64 KB)。这是一个架构限制:SEP内部只执行加密操作和生物识别模板比对。所有其他数据通过加密通道传输到AP的主内存。
Secure Enclave包含专用硬件模块:AES引擎(硬件加密/解密)、P256加速器(ECDSA、ECDH)、SHA-256/SHA-512模块、TRNG(基于环形振荡器的真随机数生成器)。这确保了在最低功耗下的高性能(千兆位AES速度)。
| 组件 | 功能 | 性能 |
|---|---|---|
| AES Engine | 硬件AES-256加密 | 3.5 GB/s(A12+) |
| P256 Accelerator | ECDSA签名/验证 | 15000次/秒 |
| TRNG | 随机数生成 | 1 Mbit/s |
| SHA-256 | 数据哈希 | 2 GB/s |
| UID(eFuse) | 芯片唯一标识符 | 256位 |
每批Secure Enclave芯片都会获得一个嵌入在SEP ROM中的组密钥(Group Key)。此密钥用于SEP对AP的身份验证以及建立加密通道。Apple发布签署组密钥的证书,从而允许在固件级别验证SEP的真实性。
iOS开发者不直接访问Secure Enclave。交互通过高级API进行:LocalAuthentication(Touch ID、Face ID)、Keychain Services(在SEP中存储密钥)、CryptoKit(使用SEP密钥进行加密操作)。
CryptoKit框架(iOS 13+)提供对Secure Enclave的直接访问,用于生成ECDSA密钥和签名数据。使用secureEnclaveKey标志创建的密钥物理地位于SEP内部。签名时,数据通过安全通道传输,操作在SEP中执行,签名返回给应用程序。
import CryptoKit
import LocalAuthentication
func signWithSecureEnclave() throws -> Data {
let context = LAContext()
let accessControl = try SecAccessControl(
protection: kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
flags: .userPresence
)
let key = try SecureEnclave.P256.SigningKey(
accessControl: accessControl
)
let dataToSign = "authenticate".data(using: .utf8)!
return try key.signature(for: dataToSign)
}
Keychain Services可以使用Secure Enclave存储加密密钥。属性kSecAttrTokenID = kSecAttrTokenIDSecureEnclave指示系统密钥应在SEP内部创建和存储。SEP中的密钥始终是EC类型(secp256r1/P-256),因为Secure Enclave不支持RSA。
Touch ID和Face ID——通过Secure Enclave实现的关键用户功能。SEP不仅存储生物识别模板,还将它们与输入数据进行比较,从而排除了指纹或面部图像被拦截的可能性。
注册指纹或面部时,传感器将图像传输到Secure Enclave,在那里转换为数学模板(而非图像!)并存储在SEP的加密内存中。原始图像被销毁。模板无法提取到外部——SEP只能将新模板与存储的模板进行比较。
Secure Enclave最多存储5个指纹或面部。所有模板都受设备UID保护。设备重启时,SEP会阻止访问模板,直到首次输入密码(锁定密码,而非生物识别)。
当用户将手指放在Touch ID上时,传感器捕获图像并通过安全通道(通过iOS中的驱动程序)传输到Secure Enclave。SEP将模板与存储的模板进行比较。匹配时,SEP向AP返回成功状态+用于解锁Keychain的临时密钥。失败尝试会被跟踪,在达到一定次数(可配置)后,SEP会阻止所有生物识别请求,直到输入密码。
import LocalAuthentication
func authenticateUser() {
let context = LAContext()
var error: NSError?
guard context.canEvaluatePolicy(
.deviceOwnerAuthenticationWithBiometrics,
error: &error
) else { return }
context.evaluatePolicy(
.deviceOwnerAuthenticationWithBiometrics,
localizedReason: "确认您的身份"
) { success, error in
if success {
// SEP确认生物识别匹配
}
}
}
设备丢失时,生物识别数据在多个级别受到保护:模板使用UID加密(在SEP外部无法读取),SEP在每次重启、48小时不活动、5次失败生物识别尝试后要求设备密码。通过Find My的丢失模式额外阻止SEP。
常见问题
在锁定设备上——不能。Secure Enclave设计为没有用户身份验证就无法访问数据。已知的攻击(checkm8针对A5-A11)无法从SEP提取数据——它们危及AP,但不会危及Secure Enclave。
ECDSA(secp256r1/P-256)——用于签名和验证。ECDH——用于密钥协商。AES-256——用于对称加密。SHA-256——用于哈希。不支持RSA。所有操作均通过硬件执行。
在Apple Silicon(M1、M2、M3)中,Secure Enclave的实现与A芯片类似,但具有增强的资源。支持更多并发密钥、更快的P256操作,并具有扩展的使用场景集(FileVault、自动填充、Safari)。
UID(唯一标识符)——是在芯片生产时嵌入Secure Enclave的256位随机标识符。UID用作加密设备上所有其他密钥的根密钥。任何组件(包括SEP本身)都无法读取它。
完全重置发生在通过恢复模式(DFU)恢复固件时。Secure Enclave重建密钥层次结构。所有Keychain数据和生物识别模板都会被删除且无法恢复——这是一个不可逆的过程。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。