我有一些具有多个实现的加密代码,根据运行的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.*
,但在iOS 10中为locked down。(因此,我的问题不是this one的重复,因为情况已经发生变化。)此外,获取这些列表似乎很难 - Apple的开源网站运行一个自动化流程,从公开发布的操作系统源中清除所有特定于ARM的代码,以使越狱者更加努力。
答案 0 :(得分:0)
您可以查看iOS Security Guide的商家
显然,如果您可以获得CPU系列名称,您还可以从documentation.
中推断出哪个加密组件及其工作原理。您可能会注意到某些设备有安全区:
Secure Enclave是一款在Apple T1 Apple中制造的协处理器 S2,Apple S3,Apple A7或更高版本的A系列处理器。
第6页
你可以推断出任何旧的CPU版本都没有。
每个iOS设备都内置了专用的AES-256加密引擎 闪存存储器和主系统存储器之间的DMA路径 [...]
在T1,S2,S3和A9或更高版本的A系列处理器上,每个Secure Enclave 生成自己的UID(唯一ID)。
第12页
访问加密组件的方法取决于您可以访问哪种数据或存储(本地数据存储/同步/家庭数据/ app / siri / icloud / secure note / keybag / payment / applepay / vpn / wifi密码/ SSO /空投/等...)
您能否确定在您的用例中需要访问哪个加密部分?
答案 1 :(得分:-1)
iOS阻止某些硬件信息的原因非常简单。请阅读Apple A11 processor。其中有很多东西,也有东西,永远不会被记录下来。
Apple根本不希望开发人员意识到并使用它。我不希望在这个主题上取得任何进展。
此时唯一的出路是绕过操作系统并直接与硬件对话。你会惊讶于里面的东西以及它的响应速度!
答案 2 :(得分:-2)
不,那是因为每个应用程序都在一个单独的容器中运行。使用沙盒原则是因为Apples的理念是每个应用程序都必须拥有一个非常封闭的生态系统。他们唯一允许的是使用外部服务,他们非常谨慎地控制和维护。