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

Мне нужно безопасно хранить/извлекать элементы в связке ключей iOS.

Из документа Apple KeyChainServicesReference (https://developer.apple.com/library/ios/documentation/security/Reference/keychainservices/Reference/reference.html) Я извлекаю элементы связки ключей, используя вызов SecItemCopyMatching. Последний выводит системную подсказку для аутентификации по локальной цепочке ключей, которая позволяет использовать отпечаток пальца или, в качестве альтернативы, 4-значный код доступа к телефону.

Хотя я считаю аутентификацию по отпечатку пальца безопасной, именно этот 4-значный PIN-код снижает мою текущую безопасность. Итак, мой вопрос: есть ли способ запросить цепочку ключей только с опцией отпечатка пальца (без опции пароля, и если аутентификация по отпечатку пальца не работает, она просто терпит неудачу, без резервных копий для 4-значного кода доступа)

Я просмотрел LocalAuthentication, и хотя последний обеспечивает именно тот поток, который мне нужен, LA не дает мне доступа к цепочке ключей, и поэтому LA мне бесполезен.

Заранее большое спасибо


person Dmitry Miller    schedule 28.07.2014    source источник
comment
Apple заявила, что аутентификация по отпечатку пальца не более безопасна, чем пятизначный PIN-код. Лучше всего, если пользователь выбрал более безопасный пароль. Существует дополнительная безопасность в лимите попыток.   -  person zaph    schedule 28.07.2014


Ответы (3)


В LAContext.h:

/// Fallback button title.
/// @discussion Allows fallback button title customization. A default title "Enter      Password" is used when
///             this property is left nil. If set to empty string, the button will be hidden.
@property (nonatomic, copy) NSString *localizedFallbackTitle;

Этот код удаляет кнопку, и пользователь может либо использовать свой палец, либо отменить:

LAContext *context = [[LAContext alloc] init];
context.localizedFallbackTitle = @"";
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics ...
person daniel    schedule 26.08.2014
comment
Можно ли это реализовать в приложении Appstore? ТРЕБУЕТСЯ ли Apple запасной вариант? - person JSA986; 21.09.2014
comment
Это работает, но это не KeyChain и не так безопасно. О разнице между KeyChain и LocalAuthentication см. этот пост: cigital. com/blog/integrating-touch-id-into-ios-applications - person Ben Patch; 21.06.2016

Вы правы, в iOS 8 у вас нет возможности сохранить элемент в связке ключей и сделать его доступным только после успешной аутентификации Touch ID. Флаг управления доступом kSecAccessControlUserPresence, добавленный в iOS 8, делает элемент доступным после аутентификации Touch ID или пароля.

Но теперь это можно сделать в iOS 9. Два флага, связанных с Touch ID, kSecAccessControlTouchIDAny и kSecAccessControlTouchIDCurrentSet, добавлены.

Итак, все, что вам нужно сделать, это использовать любой из этих двух флагов при создании объекта управления доступом для элемента связки ключей (с функцией SecAccessControlCreateWithFlags) и назначить этот объект атрибуту kSecAttrAccessControl при добавлении элемента с функцией SecItemAdd.

Существует пример от Apple, демонстрирующий это; см. метод addTouchIDItemAsync.

Также см. эту публикацию для обзора. других связанных с безопасностью изменений в iOS 9.

person skozin    schedule 25.10.2015

Я еще не погружался в связку ключей iOS 8, но помните, что 4-значный пароль устанавливается пользователем. Apple рекомендует, когда пользователи включают TouchID, они также включают более сложный пароль, говоря: «Поскольку безопасность настолько безопасна, насколько безопасна ее самая слабая точка, вы можете повысить безопасность 4-значного кода доступа, используя сложный буквенно-цифровой код доступа. ." http://support.apple.com/kb/HT5949

Таким образом, пользователь по-прежнему может использовать что-то более сложное, чем четырехзначный пароль. Вы просто не можете заставить их сделать это. Если вы действительно хотите их заставить, похоже, вам придется отказаться от удобства Touch ID.

person Richard Venable    schedule 28.07.2014
comment
Более безопасный можно принудительно настроить под MDM. - person zaph; 29.07.2014
comment
Ричард. Как вы упомянули, я не могу заставить пользователей повысить надежность пароля. И я считаю, что существует другое понимание того, что здесь должно быть более безопасным, данные связки ключей, связанные с приложением, по сравнению с возможностью разблокировать телефон. - person Dmitry Miller; 29.07.2014