Fingerprint Scanner: реализация в Android приложении

Дата публикации:

Большая часть смартфонов, выпущенных после 2013 года, имеет сканер отпечатков пальцев (Fingerprint scanner). Он стал настолько популярным, что уже практически любое действие, требующее подтверждения, полагается на эту функцию.

Ситуация не вызывает удивления. Ведь сканеры отпечатков действительно безопасны и уникальны. Они намного удобнее громоздких паролей, поскольку существенно ускоряют все онлайн-транзакции. Поэтому давайте будем объективными: Fingerprint scanner реально может повысить надежность, безопасность и юзабельность любого проекта. Наша сегодняшняя статья — о сканерах отпечатков пальцев. Мы расскажем об основах работы с функционалом и продемонстрируем его реализацию в обычном Android приложении.

Начинаем работу с Fingerprint API

В Android 6.0 для аутентификации пользователя посредством отпечатка пальца был введен Fingerprint API. Благодаря этой функции, пользователь лишается сомнительного удовольствия тратить время на ввод пароля. Вместо него у нас появился сенсор.

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

Пользовательские данные будут храниться в зашифрованном виде. Для этого нам понадобится:

  • шифратор, с помощью которого пароль, собственно, шифруется и расшифровывается пароль
  • криптографический ключ
  • хранилище для криптографических ключей.

Вот и все.

Проверка сенсора

Для начала стоит указать разрешение на использование сенсора в манифесте. Оно совершенно безопасно, так как не требует проверки при работе приложения. Д

<uses-permission android_name=»android.permission.USE_FINGERPRINT» />

Для работы с сенсором API имеет классы FingerprintManager и FingerprintManagerCompat. Заметим, что при использовании FingerprintManagerCompat оборудование, сканирующее отпечаток пальца, может быть не найдено на устройстве, так как реализация этого класса проверяет системное свойство FEATURE_FINGERPRINT. А производители телефонов его не всегда указывают.

Давайте создадим FingerprintManager:

FingerprintManager fingerprintManager = (FingerprintManager) context.getSystemService(FINGERPRINT_SERVICE);

Проверить устройство на наличие сенсора:

fingerprintManager.isHardwareDetected()

Теперь проверяем зарегистрированы ли отпечатки пальцев:

fingerprintManager.hasEnrolledFingerprints()

И защищено ли устройство паролем:

KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);

keymanger.isKeyguardSecure()

Android Keystore

Для криптографических ключей Android предоставляет замечательное  хранилище — KeyStore. Оно довольно успешно предотвращает утечку информацию из устройства. Однако важно помнить, что в KeyStore следует хранить только криптографические ключи. Паролям и приватным данным — там не место.

Так происходит инициализация KeyStore:

FingerprintManager fingerprintManager = (FingerprintManager) context.getSystemService(FINGERPRINT_SERVICE);

Проверить устройство на наличие сенсора:

fingerprintManager.isHardwareDetected()

Теперь проверяем зарегистрированы ли отпечатки пальцев:

fingerprintManager.hasEnrolledFingerprints()

И защищено ли устройство паролем:

KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);

keymanger.isKeyguardSecure()

Для криптографических ключей Android предоставляет замечательное  хранилище — KeyStore. Оно довольно успешно предотвращает утечку информацию из устройства. Однако важно помнить, что в KeyStore следует хранить только криптографические ключи. Паролям и приватным данным — там не место.

Так происходит инициализация KeyStore:

Следующим шагом мы реализуем криптоключи. Здесь у нас имеются варианты:

  • Симметричный ключ — KeyGenerator
  • Пара из приватного и публичного ключа — KeyPairGenerator

Так как мы шифруем пароль при первом входе пользователя, а расшифровываем — при вводе отпечатка, нам понадобится пара из публичного и приватного ключа. С помощью публичного ключа будет производится шифрование пароля при первом входе, а расшифровка пароля при сканировании отпечатка будет осуществляться с помощью приватного ключа.

Проинициализируем KeyPairGenerator:

sKeyPairGenerator = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, KEY_STORE);

KeyProperties.KEY_ALGORITHM_RSA — алгоритм шифрования, для которого предназначен ключ

KEY_STORE— название хранилища ключей

Воспользуемся KeyPairGenerator  для создания пары ключей:

KEY_ALIAS — псевдоним ключа

KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT — используем ключ для шифровки и расшифровки

KeyProperties.ENCRYPTION_PADDING_RSA_OAEPдополнение.

.setUserAuthenticationRequired(true)подтверждаем отпечаток пальца при работе с ключом.

Для проверки существования ключа используем:

sKeyStore.containsAlias(KEY_ALIAS)

Реализация шифратора

Для шифровки и дешифровки воспользуемся классом Cipher:

sCipher = Cipher.getInstance(«RSA/ECB/OAEPWithSHA-256AndMGF1Padding»);

RSA — алгоритм шифрования

ECB— режим смешивания

OAEPWithSHA-256AndMGF1Padding — дополнение

Инициализация:

При использовании шифратора в режиме шифрования текста (Cipher.ENCRYPT_MODE) нам нужен публичный ключ. А он требует подтверждение пользователя. Поэтому мы используем слепок ключа.

Для расшифровки (Cipher.DECRYPT_MODE) мы используем приватный ключ, который требует подтверждения отпечатком пальца.

Методы шифровки и расшифровки:

Реализация Fingerprint sensor

Для использования сенсора воспользуемся методом:

voiid authenticate(CryptoObject crypto, CancellationSignal cancel, int flags, AuthenticationCallback callback, Handler handler)

CancellationSignal — позволяет отменить процесс ввода отпечатка

AuthenticationCallback — интерфейс, возвращающий результаты считывания отпечатка

Для обработки результатов отпечатка пальцев реализуем AuthenticationCallback:

Yes! Мы сделали это!

GroundedEqualChafer-size_restricted

Вывод

Интеграция отпечатков пальцев значительно упрощает взаимодействие пользователя с приложением. Везде, где раньше требовалось ввести пароль, вы теперь можете приложить палец к сенсору и вуаля. Это экономит время, нервы и делает опыт работы с приложением приятным. Не забываем: user friendly — наше все!

Полный код проекта здесь.

Для лучшего понимания стоит ознакомится с примером использования сканера отпечатков от Google

 

Мы Крым Диджитал

С 2015 года мы предоставляем полный цикл услуг мобильной и веб-разработки клиентам из различных отраслей и разных стран.

Подпишись
на наши новости

Контакты пресс-службы

+ 7 (926) 118-80-32

WhatsApp, Viber, Telegram

Давайте обсудим Ваш проект

или свяжитесь с нами по почте projects@crimeadigital.ru

Нажимая кнопку «Отправить», вы даете согласие на обработку персональных данных

Прошел день карьеры в СевГУ

Резидент технопарка, компания Крым Диджитал, приняла участие в Дне Карьеры в СевГУ, который прошел 17 мая. Мероприятие длилось 3 часа. Компанией заинтересовались  более 35 студентов, которым была важна информация о прохождении практики, бесплатные курсы Академии и вакансии, не требующие опыта работы. Руководитель разработки компании выступил с презентацией и ответил на все вопросы, которые так волнуют студентов — как начать свою карьеру в ИТ? Есть ли возможность совмещать учебу с работой? Кем я смогу стать? Как понять, кем я хочу работать? И многие другие.

Резидент технопарка, компания Крым Диджитал, приняла участие в Дне Карьеры в СевГУ, который прошел 17 мая.

Мероприятие длилось 3 часа. Компанией заинтересовались  более 35 студентов, которым была важна информация о прохождении практики, бесплатные курсы Академии и вакансии, не требующие опыта работы.

Руководитель разработки компании выступил с презентацией и ответил на все вопросы, которые так волнуют студентов - как начать свою карьеру в ИТ?

Есть ли возможность совмещать учебу с работой?

Кем я смогу стать?

Как понять, кем я хочу работать?

И многие другие.

Завершен набор студентов на летнюю практику

Крым Диджитал завершила набор студентов на летнюю практику. В июле придут 14 человек. Это студенты второго и третьего курсов кафедр Программная инженерия, Информатика и вычислительная техника, Информационные системы и технологии и Управление в технических системах. Все ребята будут ходить в офис и будут заняты реальным проектом, который они должны реализовать до конца практики. Каждый выбрал для себя то направление, в котором хотел бы развиваться — front-end и back-end-разработка, дизайн. Руководить практикой будет Head of Engineering.
Крым Диджитал завершила набор студентов на летнюю практику. В июле придут 14 человек. Это студенты второго и третьего курсов кафедр Программная инженерия, Информатика и вычислительная техника, Информационные системы и технологии и Управление в технических системах. Все ребята будут ходить в офис и будут заняты реальным проектом, который они должны реализовать до конца практики. Каждый выбрал для себя то направление, в котором хотел бы развиваться - front-end и back-end-разработка, дизайн. Руководить практикой будет Head of Engineering.

Крым Диджитал приняла участие в стратегической сессии

Руководители Крым Диджитал приняли участие в стратегической сессии, которая прошла на базе СевГУ 10 июня. Вместе с Правительством Севастополя, Институтом информационных технологий и управления в технических системах СевГУ и приглашенными ИТ-компаниями города обсудили перспективу развития системы высшего образования в Севастополе.Представители бизнеса, власти и образовательной системы выступали со своим видением будущих потребностей региона в кадрах, поднимали насущные вопросы обучения студентов, прохождения практики и дальнейшего трудоустройства. Крым Диджитал является амбассадором идеи образования и взращивания молодых кадров, развивает образовательные проекты и на протяжении 5 последних лет ведет активную работу в направлении поддержки и развития молодых специалистов ИТ-отрасли Крыма.

Руководители Крым Диджитал приняли участие в стратегической сессии, которая прошла на базе СевГУ 10 июня.

Вместе с Правительством Севастополя, Институтом информационных технологий и управления в технических системах СевГУ и приглашенными ИТ-компаниями города обсудили перспективу развития системы высшего образования в Севастополе.
Представители бизнеса, власти и образовательной системы выступали со своим видением будущих потребностей региона в кадрах, поднимали насущные вопросы обучения студентов, прохождения практики и дальнейшего трудоустройства.

Крым Диджитал является амбассадором идеи образования и взращивания молодых кадров, развивает образовательные проекты и на протяжении 5 последних лет ведет активную работу в направлении поддержки и развития молодых специалистов ИТ-отрасли Крыма.

Выпуск курса Software Testing

Мы поздравляем выпускников нашего первого в этом году курса Крым Диджитал Академии по Software Testing! Всего курс успешно завершили 13 человек. В течение 2 месяцев несмотря на теплую погоду и манящее море ребята ответственно посещали занятия 2 раза в неделю, делали домашние задания и проверочные работы. Трое начинающих специалистов теперь стажеры нашей компании. Следующий курс намечен на август. Не пропусти анонс записи!

Мы поздравляем выпускников нашего первого в этом году курса Крым Диджитал Академии по Software Testing!

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

Следующий курс намечен на август. Не пропусти анонс записи!