Безопасный анклав: обновите 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 флаг.

Другие вопросы по тегам