我使用iOS7的钥匙串作为目标,我使用属性: kSecAttrAccessibleWhenUnlockedThisDeviceOnly
它工作得很好,在设备锁定10秒后,钥匙串变量无法访问 .
我现在想要的是在应用程序被杀之前删除钥匙串 . 只有在进入后台或系统释放应用程序之前应用程序被杀死时才会调用 applicationWillTerminate
. 如果应用程序在被用户杀死之前在后台持续1分钟,我找不到如何清除钥匙串 .
是否有任何方法可以删除钥匙串或在应用程序在后台运行几分钟后被用户杀死时调用一个函数?
1 回答
没有 . 在iOS上,只有一个钥匙串及其共享资源 .
如果有兴趣,这里有一些从数据安全的角度来看 . 自iOS 4/5天以来没有太大变化 . 我认为最有趣的新东西是iOS 7的NSSecureCoding Protocol(或者它是6?)和指纹认证 .
Dino Zavi的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
到达则取消计时器 . 如果时间过去,则开始擦拭 . 但两者都可能造成糟糕的用户体验 .