Ios 如何检测iCloud钥匙链的更改

Ios 如何检测iCloud钥匙链的更改,ios,cocoa,icloud,keychain,Ios,Cocoa,Icloud,Keychain,当iCloud(或任何)钥匙链发生更改(项目被添加/删除/更改)时,是否有方法获得通知 类似于KVS中NSUbiquitousKeyValueStoreDidChangeExternallyNotification的内容 我想我可以在OSX上归档$HOME/Library/Keychains文件夹,但是有更好的选择吗?(这在iOS上也行吗?a钥匙链服务,不管钥匙链是本地还是iCloud钥匙链,都不会宣布更改。您应该如何使用钥匙链也使这样做很有问题 存储在钥匙链中的密码数据受到保护,因为它始终是加

当iCloud(或任何)钥匙链发生更改(项目被添加/删除/更改)时,是否有方法获得通知

类似于KVS中NSUbiquitousKeyValueStoreDidChangeExternallyNotification的内容


我想我可以在OSX上归档$HOME/Library/Keychains文件夹,但是有更好的选择吗?(这在iOS上也行吗?

a钥匙链服务,不管钥匙链是本地还是iCloud钥匙链,都不会宣布更改。您应该如何使用钥匙链也使这样做很有问题

存储在钥匙链中的密码数据受到保护,因为它始终是加密的。只有当您请求该数据时,它才会被临时解密(仅针对您),解密后的副本会传递到您的应用程序,然后被丢弃。您应该将该解密副本用于您需要的任何任务,然后将其丢弃

你为什么要抛弃它?因为在应用程序中保留它是不安全的。根进程可以转储应用程序的所有内存,该转储还将包含纯文本形式的所有缓存密码。使用iOS中的一个安全漏洞,可能是我们还不知道的漏洞,攻击者可能能够以root权限运行代码(毕竟,所有越狱都是基于这个漏洞的,所以你看,它们确实存在)


当你再次需要它的时候?然后再从钥匙链上取一次。每次需要密码时,您都应该从钥匙链中获取密码。那么,为什么需要检测更改呢?当您获取它时,您要么会得到一个结果,在这种情况下,您总是拥有存储到keychain的最新密码,无论该密码在过去几分钟内更新的频率有多高,要么您没有得到结果,因此知道keychain中没有这样的密码,因为要么从未有过密码,要么它已被删除。无论如何,你都需要在你的应用程序中处理“从未有过密码”的情况,通常你可以处理“密码被删除”的情况。这个问题很老了,但谢谢你的长时间回答。我认为这个想法是,一旦失败,您将只在一台设备上添加密码或证书,它将传播到所有设备。@hnh证书不能通过iCloud同步,只能通过密码同步。如果您需要在本地检测密码自上次尝试使用以来是否发生了更改,请记住密码的上次修改日期。此日期与安全无关,可以将其存储到NSUserDefaults,例如,它将在每次更新密码项时更新。正如我所写的,我希望推送而不必自己实现推送(如前所述,比如
NSUbiquitousKeyValueStoreDidChangeExternallyNotification
,不过我想我可以把您提到的日期写在KVS上!:-))。例如,所有设备无法与服务器同步,密码错误。您可以在一台计算机上输入密码。它通过iCloud钥匙链与其他手机同步。理想情况下,他们应该自动重试(因为他们看到某些内容已更改,值得再次尝试)并开始同步。