iOS技术问题:Secure Enclave是否与App扩展共享加密密钥?
关于Secure Enclave密钥与App扩展共享的问题
嘿,这个问题问到点子上了——毕竟Secure Enclave的核心价值就是严格的访问控制,得把权限逻辑说清楚:
默认情况下,你在主应用里创建并存储到Secure Enclave的加密密钥,只有主应用本身能访问,Siri扩展、通知中心小组件、Watch App这类App扩展是拿不到的。这是因为Secure Enclave的密钥访问和应用的代码签名、访问控制列表(ACL)强绑定,默认的ACL只会允许创建密钥的那个应用(也就是你的主应用)来读取或使用它。
不过,如果你确实需要让特定的App扩展访问这些密钥,是可以通过显式配置实现的,不同扩展类型的配置逻辑大致一致:
- Watch App(WatchKit App):它和主应用共享同一个开发者Team ID,你可以在创建密钥时,通过
SecAccessControlCreateWithFlags设置允许整个App Group的成员访问(前提是主应用和Watch App都配置了相同的App Group entitlement),或者直接把Watch App的Bundle ID加入到密钥的ACL中。 - Siri Intents扩展:同样要确保扩展和主应用的Team ID一致,然后在生成密钥时,将扩展的Bundle ID添加到ACL里,或者借助App Group权限来授权访问。
- 通知中心小组件:逻辑和上面两类扩展一样,默认无权限,必须通过配置密钥的ACL,显式允许这个扩展的身份访问。
这里要划个重点:千万不要随便放宽ACL权限,只给真正需要访问密钥的扩展授权,不然会削弱Secure Enclave的安全性。另外,所有需要访问密钥的应用/扩展,都必须拥有相同的Team ID(这是苹果的硬性要求,毕竟都是你开发的应用),并且配置对应的entitlements(比如App Groups)。
总结一下:密钥不会自动和任何App扩展共享,必须由你主动配置访问控制规则,才能让指定的扩展获取访问权限。
内容的提问来源于stack exchange,提问作者Sem
相关产品推荐
相关产品推荐

