Безопасный анклав: обновите SecAccessControlCreateFlags после создания ключа - PullRequest
0 голосов
/ 15 декабря 2018

Мне интересно, кто-нибудь знает, возможно ли обновить флаги после создания ключа внутри 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

Всего наилучшего!

Джонни

1 Ответ

0 голосов
/ 21 марта 2019

Я не думаю, что это возможно.Согласно документации Apple :

... поскольку его резервное хранилище физически является частью Secure Enclave, вы никогда не сможете проверить данные ключа.

Я думаю, что лучший способ - удалить ключ с помощью SecItemDelete(_:), а затем создать новый ключ без флага .userPresence.

...