我的问题与 iOS(iPhone、iPad 等)中的钥匙串(keychain)有关。我认为(但不确定)在 Mac OS X 下实现钥匙串(keychain)会引发相同的问题和相同的答案。
iOS 提供了五种类型(类)的钥匙串(keychain)项。您必须为键 kSecClass
选择这五个值之一来确定类型:
kSecClassGenericPassword used to store a generic password
kSecClassInternetPassword used to store an internet password
kSecClassCertificate used to store a certificate
kSecClassKey used to store a kryptographic key
kSecClassIdentity used to store an identity (certificate + private key)
在长时间阅读苹果文档、博客和论坛条目后,我发现 kSecClassGenericPassword
类型的钥匙串(keychain)项从属性 kSecAttrAccessGroup
获得其唯一性,kSecAttrAccount
和 kSecAttrService
.
如果请求 1 中的这三个属性与请求 2 中的相同,那么无论其他属性如何,您都会收到相同的通用密码钥匙串(keychain)项。如果这个属性中的一个(或两个或全部)改变了它的值,那么你会得到不同的项目。
但 kSecAttrService
仅适用于 kSecClassGenericPassword
类型的项目,因此它不能成为任何其他类型项目的“唯一键”的一部分,并且似乎没有文档清楚地指出哪些属性唯一地确定了钥匙串(keychain)项。
“GenericKeychain”的“KeychainItemWrapper”类中的示例代码使用属性kSecAttrGeneric
使项目唯一,但这是一个错误。此示例中的两个条目仅存储为两个不同的条目,因为它们的 kSecAttrAccessGroup
是不同的(一个具有访问组集,另一个让它自由)。如果您尝试使用 Apple 的 KeychainItemWrapper
添加没有访问组的第二个密码,您将失败。
那么,请回答我的问题:
kSecAttrAccessGroup
、kSecAttrAccount
和kSecAttrService
的组合是不是真的是kSecClass为的keychain item的“唯一键” kSecClassGenericPassword
? kSecClass
不是 kSecClassGenericPassword
,哪些属性使钥匙串(keychain)项独一无二?最佳答案
主键如下(源自Apple的开源文件,参见Schema.m4、KeySchema.m4和SecItem.cpp):
kSecClassGenericPassword
类的钥匙串(keychain)项,主键是
kSecAttrAccount
和 kSecAttrService
.kSecClassInternetPassword
类的keychain项,主键是kSecAttrAccount
、kSecAttrSecurityDomain
、kSecAttrServer
的组合>、kSecAttrProtocol
、kSecAttrAuthenticationType
、kSecAttrPort
和 kSecAttrPath
。kSecClassCertificate
类的keychain项,主键是kSecAttrCertificateType
、kSecAttrIssuer
和kSecAttrSerialNumber
的组合>.kSecClassKey
类的keychain项,主键是kSecAttrApplicationLabel
、kSecAttrApplicationTag
、kSecAttrKeyType
的组合>,
kSecAttrKeySizeInBits
、kSecAttrEffectiveKeySize
以及SecItem尚未公开的创建者、开始日期和结束日期。kSecClassIdentity
类的钥匙串(keychain)项,我没有在开源文件中找到有关主键字段的信息,但作为身份是私钥和证书的组合,我假设主键是 kSecClassKey
和 kSecClassCertificate
的主键字段的组合。由于每个钥匙串(keychain)项都属于一个钥匙串(keychain)访问组,感觉就像钥匙串(keychain)访问组(字段kSecAttrAccessGroup
)是所有这些主键的附加字段。
https://stackoverflow.com/questions/11614047/
相关文章:
objective-c - 以编程方式在 UINavigationController 中设置 UI
ios - UICollectionView 的 cellForItemAtIndexPath 没有
objective-c - 如何摆脱 Xcode 中的 "unused variable"警告?
objective-c - 有没有办法强制在 NSArray、NSMutableArray 等上输入
ios - 无法在模拟器中运行应用程序 : An error was encountered whi
ios - 如何删除 UIWebView 的所有 cookie?
java - Java接口(interface)和Objective-C协议(protocol)的区