【发布时间】:2011-04-17 21:55:28
【问题描述】:
我正在编写一个需要对其数据进行加密的 iPhone 应用程序。我已经学会了如何通过设置 NSFileProtectionComplete 属性来打开文件加密。我也知道如何检查 iPhone 版本以确保它们运行的是 iOS 4.0 或更高版本。
我已经意识到,如果用户没有选择密码并且没有在“设置”>“常规”>“密码锁定”屏幕上专门启用数据保护,那么数据实际上根本没有受到保护。
我想弹出一个警告并告诉用户他们必须启用密码并打开数据保护(这需要在 4 之前的 iPhone 上进行备份和恢复),然后如果他们没有退出应用程序启用密码和数据保护。尽管如此,我还是无法弄清楚这些设置的状态。如果禁用数据保护,我发现的所有 API,例如 UIApplication 中的“protectedDataAvailable”都可以成功通过。
【问题讨论】:
-
我会假设密码锁与正在运行的应用程序无关,所以我猜它不是 SDK 的一部分。如果是,它可能是这个 API 的一部分:developer.apple.com/library/ios/#documentation/uikit/reference/…
-
它与正在运行的应用程序极为相关,因为如果没有密码,您的数据在设备上就不会受到保护。如果无法判断您的数据是否受到保护,那将是 Apple 的巨大疏忽。它使新的 iOS 4 加密对于通过应用商店销售的大多数企业应用程序几乎毫无用处。
-
大多数企业会(应该)将部署配置文件推送到公司的所有 iPhone 以要求输入密码。这不是程序问题,这是管理问题。你真的想弹出一个警告告诉用户打开他的密码吗?或者更好的是,除非它打开,否则拒绝运行?用户通常不愿意被告知如何使用他们的设备。
-
您不能为通过应用商店销售的应用提供部署配置文件。此应用程序不适用于公司管理的电话。当前的安全模型让用户感到困惑,他们很难判断他们的数据是否安全。例如,如果您有一部 iPhone 3GS,即使您已升级到 iOS 4 并打开了密码,您的数据也不会受到保护,除非您完成了完整的备份、擦除和恢复以重新格式化文件系统。唯一的判断方法是隐藏在设置菜单中的一小行文本。如果未打开,则不会显示任何内容。
-
此外,法律法规 (HIPAA) 要求数据受到保护。如果未启用数据保护,用户将无法运行应用程序。这根本不取决于用户,他是否喜欢它。似乎不幸的替代方案是从头开始实施加密。
标签: iphone core-data encryption ios4 data-protection