Я пишу очень безопасное приложение (для банка), и я сохраняю закрытый ключ в Keychain. Я держу Частной ключ, используя следующий код:iOS Keychain иногда возвращает пустую строку
+(void)savePrivatekey:(NSString *)Key
{
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"pKey" accessGroup:nil];
[keychain setObject:Key forKey:(id)kSecValueData];
[keychain release];
}
и получить секретный ключ, используя следующий код:
+(NSString *)privateKey
{
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"pKey"accessGroup:nil];
NSString *privateKey = [keychain objectForKey:(id)kSecValueData];
[keychain release];
return privateKey;
}
я не сохранить закрытый ключ в локальной переменной из соображений безопасности , , потому что каждый звонок на сервер Мне нужен секретный ключ, к которому я звоню, чтобы функционировать «GetPrivateKey» много раз. Возможно, поэтому иногда я получаю из пустой строки связки ключей. Я не могу придумать, почему это может произойти. я заметил, что в большинстве случаев это происходит, когда приложение возвращения из фона, но не только ... спасибо ...
Я открыл билет на инженеров Apple, и они ответили мне:
настраиваете ты Атрибут kSecAttrAccessible при создании элемента keychain изначально?
Я всегда создаю такой же брелок для ключей: KeychainItemWrapper * keychain = [[KeychainItemWrapper alloc] initWithIdentifier: @ "pKey" accessGroup: nil];
Кто-нибудь знает, что их намерения? спасибо ...
Ведение указателя в локальной переменной не звучит как проблема безопасности для меня ...? – faffaffaff
Я тоже, но все же инструкции не должны содержать переменную частного ключа, кроме того, в цепочке ключей .... –
не имеет особого значения, но назовение вашего метода 'get ...' не соответствует соглашениям об именах Cococa: 'Use ' get "только для методов, возвращающих объекты и значения косвенно. Вы должны использовать эту форму для методов только тогда, когда нужно вернуть несколько элементов. 'Https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html –