如何防止钥匙串项目不会添加到备份中?

Posted

技术标签:

【中文标题】如何防止钥匙串项目不会添加到备份中?【英文标题】:How to prevent that keychain items will not be added to the backup? 【发布时间】:2016-02-24 06:52:26 【问题描述】:

如何防止钥匙串项不会添加到备份中?以及加密备份? 当 keychain (SecItem) item 配置如下图,那么这个 keychain item 可以备份和恢复到另一个设备。

let query = [
    String(kSecClass) : kSecClassGenericPassword,
    String(kSecAttrService) : "SecAttrService",
    String(kSecAttrAccount) : "SecAttrAccount",
    String(kSecValueData) : mobileId,
]

那么,如何防止那个keychain item不被备份呢?

【问题讨论】:

是否要备份?因为该问题表明您的项目未添加到备份中,并且您希望防止这种情况发生。但我认为你真正想要的是“不备份” 【参考方案1】:

使用“ThisDeviceOnly”可访问性常量,最好是 kSecAttrAccessibleWhenUnlockedThisDeviceOnly :

https://developer.apple.com/library/ios/documentation/Security/Reference/keychainservices/#//apple_ref/doc/constant_group/Keychain_Item_Accessibility_Constants

【讨论】:

如果我理解正确,我们无法阻止备份项目。它们将被备份,但只会恢复到同一设备。 是的;从安全的角度来看,它几乎与“未备份”相同,因为没有设备(具有解锁备份所需的唯一密钥)就无法从备份中提取内容。【参考方案2】:

只要不在app目录下的数据就不会备份这些数据,也有可以在文件夹中设置不备份的标志,类似下面试试

Can I add the Do not Back up for the "Document Directory" for iCloud

iOS - Flag entire Document directory as do not backup

【讨论】:

感谢您的回答,但您的回答不包括钥匙串项目备份。

以上是关于如何防止钥匙串项目不会添加到备份中?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以更新钥匙串项目的 kSecAttrAccessible 值?

sh 将git密码短语添加到钥匙串中,这样就不会再次询问密码了

iOS:新设备或恢复设备上的钥匙串

如何在 OS X 中成功从钥匙串中删除项目?

钥匙串:项目报告为 errSecItemNotFound,但在添加时收到 errSecDuplicateItem

iOS 钥匙串替代方案,无法在另一台设备上恢复