iOS: добавление приватного ключа на устройства KeyChain - PullRequest
5 голосов
/ 29 марта 2012

У меня есть проект, в котором я получаю зашифрованный закрытый ключ RSA для пользователя с сервера. Используя информацию, предоставленную пользователем, я могу расшифровать данные обратно в ожидаемый формат. Однако я не могу понять, как загрузить закрытый ключ в связку ключей iOS для использования в криптографических функциях 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 указывает «Нет ошибок». Я в растерянности из-за того, что мне не хватает.

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

Ответы [ 2 ]

2 голосов
/ 02 апреля 2012

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

0 голосов
/ 02 апреля 2012

Я не могу проверить это прямо сейчас ... некоторые ссылки с более подробной информацией / примером источника и т. Д.:

...