13

我有一些具有多种实现的密码学代码,在运行时根据它运行的 CPU 的特性选择哪个实现。到目前为止,移植它一直很简单,Windows、Linux 和 Android 都很容易。

但在 iOS 中,这似乎并不容易。尽管 x86 CPU 具有cpuid检测功能的指令,即使是在用户模式下,ARM 等效项也具有特权。如果没有操作系统的合作,就无法检测 ARM 上的 CPU 功能。

在 Windows 中,IsProcessorFeaturePresent用于检测 ARM CPU 功能。在 Linux 上,/proc/cpuinfo这是要走的路。Android 有一个cpufeatures库(并且/proc/cpuinfo仍然可以使用)。Mac OSsysctlbyname带有hw.optional.*.

但是iOS呢?iOS 内核hw.optional.*与 Mac OS 类似,但它在 iOS 10 中被锁定。(因此,我的问题不是这个问题的重复因为情况已经发生了变化。)此外,获取这些内核似乎很困难 - Apple 的开源网站运行一个自动化流程,从他们公开提供的操作系统源中清除所有 ARM 特定代码,以使越狱者更加努力。

4

2 回答 2

0

您可以查看适用于企业的iOS 安全指南

显然,如果您可以获得 CPU 系列名称,您还可以从文档中推断出哪个加密组件以及它是如何工作的。

您可能会注意到某些设备具有 Security Enclave:

Secure Enclave 是在 Apple T1、Apple S2、Apple S3、Apple A7 或更高版本的 A 系列处理器中制造的协处理器。

第 6 页

您可能会推断出任何较旧的 CPU 版本都没有。

每个 iOS 设备都在闪存和主系统内存之间的 DMA 路径中内置了一个专用的 AES-256 加密引擎 [...]

在 T1、S2、S3 和 A9 或更高版本的 A 系列处理器上,每个 Secure Enclave 都会生成自己的 UID(唯一 ID)。

第 12 页

访问加密组件的方法取决于您要访问的数据或存储类型(本地数据存储/同步/家庭数据/应用程序/siri/icloud/安全笔记/密钥包/支付/applepay/vpn/wifi密码/ SSO / 空投 / 等等...)

您能否确定在您的用例中需要访问加密部分的哪一部分?

您还可以查看此处此处 以获取有关 iOS 原生安全和加密 API 的更多信息。

于 2018-03-16T14:03:18.807 回答
-2

iOS 屏蔽某些硬件信息的原因很简单。请阅读有关Apple A11 处理器的信息。里面有很多东西,也有很多东西,永远不会被记录在案。

Apple 根本不希望开发人员知道并使用它。我不希望在这个话题上取得任何进展。

目前唯一的出路是绕过操作系统直接与硬件对话。您会惊讶于里面的东西以及它的反应速度!

于 2018-03-14T19:22:32.810 回答