Почему криптообъект необходим для проверки подлинности отпечатков?

Я просмотрел образец отпечатка пальца на Android, предоставленный Google.

https://github.com/googlesamples/android-FingerprintDialog

Поскольку я новичок в стандартах безопасности, я не могу понять следующее.

  1. Почему нам нужно использовать Keystore, ключ, CryptoObject... и т.д.? Это может быть как запросить у менеджера отпечатков пальцев аутентификацию пользователя, и он может просто вернуть статус (успешно/не удалось)
  2. Нужно ли генерировать новый ключ каждый раз при каждой аутентификации?

Ответ 1

  Почему нам нужно использовать Keystore, ключ, CryptoObject... и т.д.? Просто мог быть, попросите менеджер отпечатков пальцев для аутентификации пользователя, и он может просто верните статус (успешно/не удалось)

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

только использует CryptoObject в контексте аутентификации по отпечатку пальца, чтобы узнать, был ли добавлен новый отпечаток с момента последней аутентификации пользователя по отпечатку пальца.

Нужно ли генерировать новый ключ каждый раз при каждой аутентификации?

Если добавлен новый fingerprint, вам потребуется ввести пароль для проверки личности пользователя, а затем сгенерировать новые ключи (поскольку они стали недействительными при добавлении нового отпечатка пальца).

Опять же, вам не придется связываться с ними, если вы пройдете null CryptoObject

Вопрос точки зрения

Аутентификация по отпечатку пальца не требует CryptoObject, на самом деле это совсем наоборот.

При выполнении криптографических операций на Android вы можете использовать один из следующих объектов: Шифр , Подпись, Mac (и другие). Один из этих трех можно использовать для создания CryptoObject.

Когда вы генерируете ключи для этих объектов, существует метод, названный setUserAuthenticationRequired(boolean), который позволяет получить ключи действительными только, если пользователь прошел аутентификацию с помощью отпечатка пальца ранее.

Таким образом, например, в случае связи клиент-сервер, если клиент может использовать ключи, это означает, что он прошел аутентификацию по отпечатку пальца и его личность известна.

Тем не менее, вы можете проверить мою библиотеку, которая делает все это намного проще:

https://github.com/OmarAflak/Fingerprint

Ответ 2

  Почему нам нужно использовать Keystore, ключ, CryptoObject... и т.д.? Это просто> может быть так, попросить менеджер отпечатков пальцев аутентифицировать пользователя, и он может> просто вернуть статус (успешно/не удалось)

Я тоже самое думал, когда впервые прочитал про отпечатки пальцев для андроида. Благодаря моему исследованию, я думаю, что могу обобщить CryptoObject для вас на простом английском языке, который вы ищете, потому что технические описания не помогают в понимании концепций:

CryptoObject создается с помощью ключа в вашем хранилище ключей Android, который по своей природе считается "безопасным" [1]. Таким образом, передача CryptoObject в диспетчер отпечатков пальцев позволяет менеджеру иметь привязку, которая подтверждает, что результаты аутентификации отпечатков пальцев не были подделаны, что теоретически возможно [2].

Подумайте об этом так, если вы передадите ноль, менеджер отпечатков пальцев вслепую доверяет результатам, полученным в результате сопоставления отпечатков пальцев. если вы передадите криптообъект, который создается ключом, к которому только ваше приложение может получить доступ из-за хранилища ключей, то возвращающиеся результаты, вероятно, будут иметь этот криптообъект, который может успешно идентифицировать только ваше приложение. Вот еще одна цитата, которая имеет более здравый смысл.

"CryptoObject делает процесс более безопасным, потому что, если этот объект не поддерживается KeyStore, он всегда будет терпеть неудачу". [3]

Картинка в ссылке [4] также дает вам представление.

[1] https://developer.android.com/training/articles/keystore

[2] https://docs.microsoft.com/en-us/xamarin/android/platform/fingerprint-authentication/creating-a-cryptoobject

[3]https://medium.com/@manuelvicnt/android-fingerprint-authentication-f8c7c76c50f8

[4]https://infinum.co/the-capsized-eight/android-fingerprint-security

Ответ 3

Отвечая на один из ваших вопросов,

Мы создадим ключ с псевдонимом и используем псевдоним для извлечения ключа. псевдоним - это ключ ключа. Там будет список псевдонимов, сохраненных для песочницы приложений. Он извлекает ключ при последующих попытках сгенерировать ключ с тем же псевдонимом.