keychain 中的概念理解

kSecAttrAccessible

这个属性控制Keychain中的一个Item什么时候可以被访问,可选值有:kSecAttrAccessibleWhenUnlocked, kSecAttrAccessibleAfterFirstUnlock, kSecAttrAccessibleAlways, kSecAttrAccessibleWhenUnlockedThisDeviceOnly,kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly,kSecAttrAccessibleAlwaysThisDeviceOnly。

带有ThisDeviceOnly的意思是如果手机使用其他device的备份restore了后这些item就不在了。

kSecAttrAccessGroup

如果希望这个keychain的item可以被多个应用share,可以给这个item设置这个属性,类型是CFStringRef。应用程序在被编译时,可以在entitlement中指定自己的accessgroup,如果应用的accessgroup名字和keychain item的accessgroup名字一致,那这个应用就可以访问这个item,不过这个设计并不是很好,因为应用的accessgroup是由应用开发者指定的,它可以故意跟其他应用的accessgroup一样,从而访问其他应用的item,更可怕的是还支持wildcard,比如keychain-dumper将自己的accessgroup指定为*,从而可以把keychain中的所有item都dump出来。

原文地址:https://www.cnblogs.com/whyandinside/p/3303108.html