Ios 应用程序被终止时删除密钥链

Ios 应用程序被终止时删除密钥链,ios,objective-c,iphone,ios7,keychain,Ios,Objective C,Iphone,Ios7,Keychain,我使用iOS7作为目标的钥匙链,我使用属性:ksecataccessible when unlocked this device only 这是伟大的工作,10秒后,当设备被锁定的钥匙链变量是不可访问的 我现在想要的是在应用程序被杀死之前删除钥匙链applicationWillTerminate仅在进入后台之前关闭应用程序或系统释放应用程序时调用。如果应用程序在被用户杀死之前在后台运行了大约1分钟,我找不到如何清除钥匙链 当应用程序在后台运行几分钟后被用户杀死时,有没有办法删除钥匙链或调用某个函

我使用iOS7作为目标的钥匙链,我使用属性:
ksecataccessible when unlocked this device only

这是伟大的工作,10秒后,当设备被锁定的钥匙链变量是不可访问的

我现在想要的是在应用程序被杀死之前删除钥匙链
applicationWillTerminate
仅在进入后台之前关闭应用程序或系统释放应用程序时调用。如果应用程序在被用户杀死之前在后台运行了大约1分钟,我找不到如何清除钥匙链

当应用程序在后台运行几分钟后被用户杀死时,有没有办法删除钥匙链或调用某个函数

有没有办法删除钥匙链

不。在iOS上,只有一个钥匙链,它是一个共享资源

如果有兴趣,这里有一些从数据安全角度的阅读。自iOS推出4/5天以来,变化不大。我认为最有趣的新事物是iOS 7(或者是iOS 6?)和指纹认证

  • 迪诺·扎维
  • Sogeti ESEC's
  • 贝伦科黑帽滑梯
或者,当应用程序在后台运行几分钟后被终止时,调用一个函数

是和否。
-应用程序将终止
不会发送,不管文献上怎么说。相反,当
SIGKILL
到达时,您知道您正在终止。你不能把它困住。但是,您可能可以执行快速擦拭,然后从
sighandler
返回(我从未尝试过,所以我不知道)


当数据敏感度保证时使用的策略是,当您的代理收到
-applicationWillResignActive
时开始擦除数据。或者在
-applicationWillResignActive
到达时启动计时器,但如果
-applicationWillEnterForeground
到达则取消计时器。如果时间流逝,则开始擦拭。但两者都会造成糟糕的用户体验。

不太好,为什么需要删除?我使用的是加密敏感数据的钥匙链,如果用户手动杀死应用程序,我想清除所有内容。如果调用applicationWillTerminate,我会清除钥匙链,但这还不够…另请参见。实际上,我在后台有一个计时器,如果应用程序在后台太长,我会清除钥匙链(实际上是钥匙链中的变量)。所以从你所说的来看,没有办法捕捉到这个“应用程序在后台被用户杀死”事件吗?…事实上,我的钥匙链中的变量…-哦,这是一个
SecItem
,你可以删除它。但您应该在删除它之前覆盖它,因为苹果的安全分配器调用标准的删除器(而不是安全的删除器)。我在几年前就向他们报告了这个bug,但它仍然没有被修复。”所以从你所说的,还没有办法捕捉到这个“被用户在后台杀死的应用程序”事件——据我所知,答案是否定的。你会看到
SIGKILL
飞过,但你无法捕捉它。不过,您可以执行快速擦拭,然后从
sighandler
返回。你可以在越狱设备上完成(对我来说,JB是例外,而不是规则)。好吧,我从我的研究中了解到这是不可能的,但对Stackoverflow的确认足以让我停止我的研究:)。非常感谢你,Jww@拉-没问题。一定要查看Zavi的论文和Sogeti ESEC的论文。你在其他地方找不到这些信息(比如苹果的网站)。它有很多你可能会感兴趣的内部工作细节。