0

我想知道是否有人知道在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

一切顺利!

约翰尼

4

1 回答 1

0

我不认为这是可能的。根据苹果的文档

...因为它的后备存储在物理上是 Secure Enclave 的一部分,所以您永远无法检查密钥的数据。

我认为最好的方法是删除你的密钥,SecItemDelete(_:)然后创建没有.userPresence标志的新密钥。

于 2019-03-21T14:47:52.943 回答