我想知道是否有人可能会在 Secure Enclave 内部创建密钥之后 后更新标志? 这是我创建密钥的方法:
let access = SecAccessControlCreateWithFlags(kCFAllocatorDefault,
kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
[SecAccessControlCreateFlags.userPresence,
SecAccessControlCreateFlags.privateKeyUsage],
nil)!
let attributes: [String: Any] = [
kSecAttrKeyType as String: kSecAttrKeyTypeECSECPrimeRandom,
kSecAttrKeySizeInBits as String: 256,
kSecAttrTokenID as String: kSecAttrTokenIDSecureEnclave,
kSecPrivateKeyAttrs as String: [
kSecAttrIsPermanent as String: true,
kSecAttrApplicationTag as String: "stacksometimesoverflow",
kSecAttrAccessControl as String: access
]
]
var error: Unmanaged<CFError>?
guard SecKeyCreateRandomKey(attributes as CFDictionary, &error) != nil else {
throw error!.takeRetainedValue() as Error
}
如您所见,密钥是使用
创建的SecAccessControlCreateFlags.userPresence, SecAccessControlCreateFlags.privateKeyUsage
我的问题是,是否可以更新密钥(相同密钥)的访问标志,说我想删除 SecAccessControlCreateFlags.userPresence
祝一切顺利!
Johnny
答案 0 :(得分:0)
我认为不可能。根据{{3}}:
...由于其后备存储实际上是Secure Enclave的一部分,因此您永远无法检查密钥的数据。
我认为最好的方法是使用SecItemDelete(_:)
删除密钥,然后创建没有.userPresence
标志的新密钥。