iOS keychain 笔记
以下内容,总结自 苹果官方文档
如果错误,感谢提出!
-
keychain 是文件系统中的一个数据库
-
iOS设备上所有app都只有同一个 keychain 可访问;除此之后还有一个iCloud keychain, 可以通过设置 keychain item(看第5点)的键 kSecAttrAccessible为kSecAttrSynchronizable,就可以被放置在 iCloud keychain 中,通过网络在不同设备中共享。
-
keychian service API 可以通过一个接口的调用从keychain中获取或存储信息
-
keychain的锁是跟设备被锁同步的;例如手机关闭,keychain 上锁,手机解锁 keychain 解锁
-
keychain由keychain item组成,keychain item 由数据和一系列相关属性组成。而这些属性和 keychain item的类别有关。有些属性是所有 item 类别共有的,例如创建时间和标签(label),有些属性是各个类别特有的
-
属性跟数据不同,属性是非加密的,可以随时访问,即使keychain 被锁
-
每个 app 都只能访问自己的 keychain item,或者处于同一个 access group(需要做额外的工作) 中的其他 app 的 keychain item
-
通过 access group 可以在不同应用之前共享 keychain item,
access group 包含 Keychain Access Groups(需要开启), The Application Identifier(TeamID + BundleID), Application Groups.(iOS8及以后,需要开启)。 -
keychain item 访问的严格程度可以通过设置 kSecAttrAccessible 被控制的,
1)When Passcode Set
2)When Unlocked
3)After First Unlock
4)Always
总结:可以这么理解,keychain 就是磁盘中的数据库,每个keychain item都是数据库里面的表的一个记录,每个记录都有相关的属性,也就是表的字段。keychain service API 就是操作这个数据库的接口









网友评论