kSecAttrSynchronizable 需要 iCloud 钥匙串吗?

Posted

技术标签:

【中文标题】kSecAttrSynchronizable 需要 iCloud 钥匙串吗?【英文标题】:iCloud Keychain required for kSecAttrSynchronizable? 【发布时间】:2015-02-11 01:58:14 【问题描述】:

我已经使用 kSecAttrSynchronizable 使用 SecKeychain API 在我的应用程序中实现了同步钥匙串存储。我是否认为必须启用 iCloud 钥匙串(ios 设置 > iCloud > iCloud 钥匙串)才能正常工作?

如果是这样,有什么方法可以判断它是否启用?

【问题讨论】:

是的,你是对的。不要以为有公共 API 可以检查 iCloud 钥匙串的状态 【参考方案1】:

您的应用使用kSecAttrSynchronizable 属性来告诉钥匙串是否需要将此钥匙串条目同步到该用户的其他 Apple 设备。

您为什么希望同步项目?例如。用户不希望它被同步,因为他想在他的 iPhone 和他的 iPad 上使用不同的密码;所以你可能想提供一个偏好,让用户选择他是否希望同步这个密码。或者同步这个密码根本没有意义,例如它是一个密码,用于加密应用程序的本地数据,本地数据将仅存在于当前设备上,因此此密码对其他设备没有用,它们缺少用于解密的数据。

但是,您的应用只能表达您的项目被同步的愿望,是否同步完全取决于用户。用户决定他是否想要密码同步,毕竟密码同步需要将密码存储在 Apple 的服务器上。它们是加密存储的,甚至 Apple 自己也无法访问密码数据,但是当互联网上的公共服务器上散布着这种信息时,一些用户仍然没有很好的感觉。因此,除非用户启用同步,否则不会同步密码。

为什么您需要知道用户是否启用了它?告诉用户密码不会同步,除非他启用密码同步?听起来有点像告诉用户房间很暗,除非他打开灯。如果没有打开,用户可能是故意这样选择的,你不知道他有没有,对吗?如果您在应用程序偏好设置中提供密码同步选项并且用户启用,则只需在下方显示信息文本,说明此功能需要启用 iCloud 钥匙串同步,否则将无效。

除此之外,如果您不提供这样的选项,那么对于所有用户来说,当您的应用承诺“现在支持 iCloud 钥匙串同步”时,该功能仅在“iCloud 钥匙串同步”时才有效。已启用,你不觉得吗?所以据我所知,没有 API 可以直接告诉你。可以通过其他方式间接检测到,但我不推荐这种黑客,它们非常脆弱,迟早会因更新而中断。

【讨论】:

我存储的不是密码,而是其他允许应用程序连接到特定设备的秘密数据。如果未启用 iCloud 钥匙串,用户将无法理解为什么它没有在设备之间同步数据。我认为大多数用户不会理解“iCloud 钥匙串”是什么以及它为何与此相关,尤其是当它关闭时我无法清楚地传达这一点。

以上是关于kSecAttrSynchronizable 需要 iCloud 钥匙串吗?的主要内容,如果未能解决你的问题,请参考以下文章

为啥需要urlEncode

我需要做一个android新闻客户端需要哪些知识

测试在公司和哪些人员来对接,需要看哪些文档,需要写哪些东西

如果其他模块需要,根 composer 文件中是不是需要 phpunit?

微信小程序需要啥知识

需要人陪