我有一些具有多个实现的密码学代码,在运行时根据它运行的 CPU 的特性选择哪个实现。到目前为止,移植这个很简单,Windows、Linux 和 Android 很容易。
但在 iOS 中这似乎并不容易。虽然 x86 CPU 有 cpuid
指令来检测功能,即使是在用户模式下,ARM 等价物也有特权。如果没有 OS 的配合,则无法检测 ARM 上的 CPU 特性。
在 Windows 中,IsProcessorFeaturePresent
用于检测 ARM CPU 功能。在 Linux 上,/proc/cpuinfo
是要走的路。 Android 有一个 cpufeatures
库(而且 /proc/cpuinfo
仍然有效)。 Mac OS 有 sysctlbyname
和 hw.optional.*
。
但是 iOS 呢? iOS内核和Mac OS一样有hw.optional.*
,不过是locked down在 iOS 10 中。(因此,我的问题不是 this one 的重复,因为情况已经发生了变化。)此外,获得这些列表似乎很困难 - Apple 的开源网站运行一个自动化过程来清除所有特定于 ARM 的他们公开发布的操作系统源代码,目的是让越狱者更加努力地工作。
最佳答案
你可以看看iOS Security Guide商业
显然,如果您可以获得 CPU 系列名称,您还可以从 documentation. 中推断出哪个加密组件及其工作原理。
您可能会注意到某些设备具有 Security Enclave:
The Secure Enclave is a coprocessor fabricated in the Apple T1, Apple S2, Apple S3, Apple A7, or later A-series processors.
Page 6
并且您可以推断出任何旧的 CPU 版本都没有。
Every iOS device has a dedicated AES-256 crypto engine built into the DMA path between the flash storage and main system memory [...]
On T1, S2, S3, and A9 or later A-series processors, each Secure Enclave generates its own UID (Unique ID).
Page 12
访问加密组件的方法取决于您要访问的数据或存储类型(本地数据存储/同步/家庭数据/应用程序/siri/icloud/secure note/keybag/payment/applepay/vpn/wifi密码/SSO/空投/等...)
您能否准确说明在您的用例中您需要访问加密部分的哪一部分?
关于ios - 在 iOS 上是否有检测 CPU 特性的 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43537255/