应用程序被杀死时删除钥匙串
Posted
技术标签:
【中文标题】应用程序被杀死时删除钥匙串【英文标题】:Delete Keychain when app is killed 【发布时间】:2015-04-20 08:57:21 【问题描述】:我正在使用以ios7为目标的钥匙串,我使用属性:kSecAttrAccessibleWhenUnlockedThisDeviceOnly
效果很好,设备锁定 10 秒后,钥匙串变量无法访问。
我现在想要的是在应用程序被杀死之前删除钥匙串。 applicationWillTerminate
仅在应用程序在进入后台之前被终止或系统释放应用程序时调用。如果应用程序在被用户杀死之前在后台运行了 1 分钟,我找不到清除钥匙串的方法。
当应用在后台几分钟后被用户杀死时,有什么方法可以删除钥匙串或调用函数?
【问题讨论】:
不是真的,为什么要删除? 我正在使用加密敏感数据的钥匙串,如果应用程序被用户手动杀死,我想清除所有内容。如果调用 applicationWillTerminate 我清除钥匙串,但还不够...... 另见***.com/q/3712979。 【参考方案1】:有什么办法可以删除钥匙串...
没有。在 iOS 上,只有一个钥匙串和一个共享资源。
如果有兴趣,请从数据安全的角度阅读以下内容。自 iOS 4/5 天以来没有太大变化。我认为最有趣的新事物是用于 iOS 7(或者是 6?)的NSSecureCoding Protocol 和指纹认证。
迪诺·扎维的Apple iOS 4 Security Evaluation Sogeti ESEC 的iOS 5 data protection updates Belenko 的 Blackhat 幻灯片 Evolution of iOS Data Protection and iPhone Forensics或者当应用在后台几分钟后被杀死时调用一个函数
是和不是。 -applicationWillTerminate
没有发送,尽管文献上说了什么。相反,您知道当SIGKILL
到达时您正在终止。而且你不能困住它。但是您也许可以执行快速擦除并从sighandler
返回(我从未尝试过,所以我不知道)。
当数据敏感性保证时使用的策略是在您的代表收到-applicationWillResignActive
时开始擦除数据。或者在-applicationWillResignActive
到达时启动计时器,但在-applicationWillEnterForeground
到达时取消它。如果时间过去,则开始擦拭。但两者都会造成糟糕的用户体验。
【讨论】:
确实,我在后台有一个计时器,如果应用程序在后台时间过长,我会清除钥匙串(实际上是钥匙串中的变量)。所以从你所说的来看,还没有办法捕捉到这个“应用程序在后台被用户杀死”事件? "...实际上是我钥匙串中的变量..." - 哦,那是SecItem
,你可以删除它。但是您应该在删除它之前覆盖它,因为 Apple 的安全分配器调用标准删除器(而不是安全删除器)。几年前我向他们报告了这个错误,但仍未修复。
“所以从你所说的来看,还没有办法捕捉到这个“应用程序在后台被用户杀死”事件” - 据我所知,答案是不。你会看到SIGKILL
飞过,但你不能困住它。不过,您可以执行快速擦除并从sighandler
返回。而且您也许可以在越狱设备上执行此操作(对我来说,JB 是例外而不是规则)。
好吧,我从我的研究中了解到这是不可能的,但是 *** 上的确认足以让我停止我的研究:)。非常感谢Jww!
@Pull - 没问题。请务必查看 Zavi 的论文和 Sogeti ESEC 的论文。您不会在其他地方(例如 Apple 的网站)找到该信息。它有很多你可能会感兴趣的内部工作细节。以上是关于应用程序被杀死时删除钥匙串的主要内容,如果未能解决你的问题,请参考以下文章
即使在从钥匙串访问和 App Store Connect 中删除后,重新启动 Xcode 时,已删除的 iOS 证书仍会继续显示在钥匙串中