是的,除了因bug而没有加密的数据(如最近被发现的Email附件未加密bug),和系统不做加密的数据。
流程大致如下:
- 系统初始化时,生成伪随机「AES密钥」,保存于Flash。(此处为抽象描述,实际有多个多层密钥)
- 所有应加密数据在写入Flash前,都先通过主芯片的硬件AES引擎进行加密,密钥为上一步所生成的「AES密钥」。(注意,无论是否开启Passcode,都有上述两个步骤)
- 如果开启Passcode,则使用Passcode和其它硬件信息,生成「解锁密钥」。
- 使用和Passcode相关联的「解锁密钥」加密「AES密钥」。
- 解锁设备时
- 如未启用Passcode,则直接使用「AES密钥」解密数据(如照片)。
- 如已启用Passcode,则根据输入的Passcode实时生成「解锁密钥」,用于解密「AES密钥」,继而解密数据。(说明:即使启用,也不是作用于所有文件)
可见,启用Passcode后,数据已被AES层级密钥机制保护。其根密钥派生自实时生成的「 解锁密钥」,而「解锁密钥」派生自Passcode数值,不保存于Flash。因此,在算法层面,已加密的数据是不可获取的。
顺便说明一下,步骤1和2(数据加密存储)并未直接保护数据,因为此时的「AES密钥」是保存在Flash上的(不是明文,但可解密)。数据加密存储的目的是:
- 步骤4,能够快速启用Passcode,不必在启用时才进行数据加密。
- Find My iPhone的远程擦除,只用擦除「AES密钥」即可让数据无法使用。
这里就不使用密码学专业术语了,因此表述可能有不精确的地方。见谅。
(第2次编辑增加)
补充说明:
- 上述描述省略了很多技术细节,如Class Key、Chip OTP Key、File Key。省略的原因是为了能用一个简化的架构,回答题主的问题。
- iOS安全技术可以参考的公开文档是《iOS Security》。
- BlackBerry实现了类似的安全级别。
- Android在数据安全方面没有很好的保护。
(第3次编辑增加)
上面的表述看来还是不够清楚,所以评论中被问到几个很好的问题。这里直接引用问题和回答如下,希望问题作者不介意。
- 问:即沒有啟用Passcode 己得到手機的情況下,可通過讀取Flash 內的Key 解AES? (Tony Wong)
- 答:可以这么认为。虽然还有其它一些安全措施,但Apple自己也说明了:Since it’s stored on the device, this key is not used to maintain the confidentiality of data。
- 问:无需密码也能访问的怎么办,如桌面背景?保存在内存里吗? 以及 Siri 最近的漏洞里的 Contacts 是如何打开的……(刘闽晟)
- 答:不是所有的文件都用Passcode派生的Key来保护的,具体实现机制是用多个Class Key来加密File Key。具体实现机制可参见《iOS Security》,这里再转述可能还不如原版清晰,抱歉。
- 问:无psscode也加密会不会对性能影响很大?如果下载个电影也会加密吗(紫ylx)
- 答:
- 关于性能:加密一定会有延迟,但是AES算法的本质上是位运算,因此用硬件引擎实现会非常高效。在不很严谨的场合,我们可以称之为“瞬间”完成。
- 关于下载:iOS对下载有些特殊处理,例如Background Download是在锁屏状态进行的,此时系统并没有「解锁密钥」,因此加密方式更复杂一些,涉及到非对称算法。
- 关于电影下载:APP似乎可以设置不加密某些数据,因此下载的电影并不一定被加密。(没有iOS开发经验,此结论不一定准确)
— 完 —
本文作者:匿名用户
【知乎日报】
你都看到这啦,快来点我嘛 Σ(▼□▼メ)
此问题还有 2 个回答,查看全部。
延伸阅读:
银行密码是如果加密的?破译的可能性多大?
理论上可以通过除穷举法以外的方法破解不可逆的加密算法吗?