iOS: добавление закрытого ключа к устройствам KeyChain

У меня есть проект, где я получаю зашифрованный закрытый ключ RSA для пользователя с сервера. Используя информацию, предоставленную пользователем, я могу дешифровать данные обратно в ожидаемый формат. Однако я не могу понять, как загрузить закрытый ключ в iOS Keychain для использования в криптографических функциях RSA.

В настоящее время у меня есть следующий код, который я объединил из разных примеров. Этот код работает для добавления открытого ключа, но, похоже, не работает вообще для добавления закрытого ключа.

[peerPublicKeyAttr setObject:(__bridge id)kSecClassKey forKey:(__bridge id)kSecClass]; [peerPublicKeyAttr setObject:(__bridge id)kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType]; [peerPublicKeyAttr setObject:peerTag forKey:(__bridge id)kSecAttrApplicationTag]; [peerPublicKeyAttr setObject:privateKeyData forKey:(__bridge id)kSecValueData]; [peerPublicKeyAttr setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnRef]; sanityCheck = SecItemDelete((__bridge CFDictionaryRef) peerPublicKeyAttr) ; sanityCheck = SecItemAdd((__bridge CFDictionaryRef) peerPublicKeyAttr, (CFTypeRef *)&privateKey); 

Когда я запускаю этот код с данными секретного ключа (декодируется в формат DER), переменная privateKey устанавливается в NULL SecItemAdd() . Однако переменная sanityCheck указывает «No Error». Я в недоумении за то, что мне не хватает.

Что мне нужно сделать, чтобы получить секретный ключ для успешной загрузки в цепочку ключей?

Официальным ответом Apple на этот точный вопрос было то, что он не поддерживался. Единственный поддерживаемый способ получения секретных ключей в Keychain был через файлы PKCS # 12.

Interesting Posts
Давайте будем гением компьютера.