Безопасный анклав: обновите SecAccessControlCreateFlags после создания ключа
Мне интересно, если кто-нибудь знает, возможно ли обновить флаги после создания ключа внутри 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
Всего наилучшего!
Джонни
0 ответов
Я не думаю, что это возможно. Согласно документации Apple:
... поскольку его резервное хранилище физически является частью Secure Enclave, вы никогда не сможете проверить данные ключа.
Я думаю, что лучший способ - удалить ключ SecItemDelete(_:)
а затем создать новый ключ без .userPresence
флаг.