如果用户禁用了他们的密码,如何对 iOS 数据保护做出反应?
Posted
技术标签:
【中文标题】如果用户禁用了他们的密码,如何对 iOS 数据保护做出反应?【英文标题】:How to react with iOS Data Protection if a user disables their passcode? 【发布时间】:2016-02-05 19:48:14 【问题描述】:我有一个 ios 9 应用程序,其中有我想要保护的敏感文件目录(它们是专有视频文件)。我需要能够保护这些文件,即使是恶意用户越狱了他们的设备并试图读取文件。理想情况下,我想使用Data Protection 像这样加密文件:
NSError *protectionError;
NSDictionary *protection = @ NSFileProtectionKey : NSFileProtectionCompleteUnlessOpen ;
BOOL result = [[NSFileManager defaultManager] setAttributes:protection ofItemAtPath:contentDirectory error:&protectionError];
但是,看起来越狱用户要访问此文件所需要做的就是删除其设备上的密码,这会使数据保护变得毫无用处。在删除密码的情况下,有没有办法将文件标记为需要由操作系统删除?我认为这类似于 iPhone 和 Apple Watch 在从设备中删除密码时删除 Apple Pay 卡的方式。
【问题讨论】:
为什么不使用密钥和 AES256 加密自己加密这些文件 好吧,我在想如果我这样做,我需要将解密密钥存储在应用程序沙箱中(我们的应用程序需要离线工作)。如果我将解密密钥存储在文件中,则使用越狱设备的恶意用户可能会读取密钥并自行解密文件,因为一旦设备越狱,他们就拥有完整的目录访问权限。 我也知道我可以将密钥嵌入到我的二进制文件中,但我希望找到一种不同的方法来做到这一点,因为如果密钥被泄露,它就无法在不使任何现有的失效的情况下进行更改为我的所有用户下载文件。 实际上,数据保护可能对越狱设备毫无用处,因为似乎只要设备解锁,文件就可以访问(即使有密码)。 【参考方案1】:我现在将其发布为答案..
为什么不使用密钥和 AES256 加密自行加密这些文件。
您不必在代码中硬编码密钥,也不必将其存储在沙盒中。 您可以使用我问的这个问题中描述的方法生成它。
Random 256bit key using SecRandomCopyBytes( ) in iOS 使用 iOS 钥匙串来存储密钥。
如果您担心可以从钥匙串中获取密钥(顺便说一句,这是非常安全的),那么最好的办法是使用密码作为用户必须输入的密钥来解密文件,然后您将视频保存在内存中。您永远不会将这个密码存储在任何地方,只有当用户想看这个视频时,他必须输入它才能解密它。
【讨论】:
唯一的问题是我们试图保护内容免受拥有有效帐户访问我们数据的恶意用户的侵害。基本上我猜它就像DRM。如果他们使用我们的应用程序,我们希望允许他们访问数据,但如果他们试图窃取数据文件则不允许。具有有效帐户的用户拥有的越狱设备使密码无用(因为用户知道它们!)。同样,他们可以访问钥匙串,因为他们是用户。 然后您可以从服务器流式传输这些数据。任何事情都可以在越狱的设备上完成。以上是关于如果用户禁用了他们的密码,如何对 iOS 数据保护做出反应?的主要内容,如果未能解决你的问题,请参考以下文章