Я создаю асимметричный ключ подписи в macOS, используя этот код:
const NSData* SignKeyTag = [@"ca.website.signRSA2048" dataUsingEncoding:NSUTF8StringEncoding];
const NSNumber* SignKeySize = @2048;
const SecKeyAlgorithm SigningAlg = kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384;
const NSString* SignKeyType = (id)kSecAttrKeyTypeRSA;
const NSString* SignKeyLabel = @"Signing Key";
NSDictionary* attributes =
@{
(id)kSecAttrKeyType: SignKeyType,
(id)kSecAttrKeySizeInBits: SignKeySize,
(id)kSecAttrLabel: SignKeyLabel,
(id)kSecAttrDescription: SignKeyLabel,
(id)kSecPrivateKeyAttrs:
@{
(id)kSecAttrIsPermanent: @YES,
(id)kSecAttrApplicationTag: SignKeyTag,
},
};
CFErrorRef error = NULL;
myPrivKeyRef = SecKeyCreateRandomKey((__bridge CFDictionaryRef)attributes, &error);
Это отлично работает, и я могу подписать и проверить без проблем. Проблема, с которой я сталкиваюсь, заключается в том, что если необходимо дать разрешение на доступ к ключу, в диалоговом окне, запрашивающем у пользователя Разрешить / Запретить / Всегда разрешать доступ к ключу, отображается имя <key>
вместо любой метки / тега / описания я даю. Также, если я редактирую ключ в Keychain Access.app, он также запрашивает у меня разрешение на изменение <key>
.
Keychain Access правильно показывает метку в списке, я не вижу <key>
нигде в ключевой информации. Также, если я перечислю атрибуты для ключа в коде, я не вижу <key>
.
Теперь я предполагаю, что ярлык, который я вижу, может быть из открытого ключа. Однако в документации сказано, что я не должен хранить открытый ключ отдельно, а просто получать его из закрытого ключа, когда это необходимо, используя SecKeyCopyPublicKey ().
Есть идеи? Спасибо!