安全区域:在密钥创建后更新SecAccessControlCreateFlags

时间:2018-12-15 18:47:47

标签: ios swift enclave

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

1 个答案:

答案 0 :(得分:0)

我认为不可能。根据{{​​3}}:

  

...由于其后备存储实际上是Secure Enclave的一部分,因此您永远无法检查密钥的数据。

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