Компонента аутентификации и шифрования с помощью биометрической информации для Андроид

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

В мобильных приложениях часто бывает необходимо хранить секретную информацию, например пароли. Если записывать ее в базу данных, всегда нужно учитывать риск утери устройства и, соответственно, возможность доступа к ней посторонних лиц. В мобильных операционных системах существуют механизмы защиты ключей шифрования паролями, порождаемыми биометрическими сканерами. Если подробнее, информация шифруется ключом с паролем из хеша, полученного из сканера. Для расшифровки извлеченный из хранилища ключ должен быть "подписан" тем же отпечатком. Данная компонента позволяет воспользоваться такими механизмами ОС Андроид.

Стандартный диалог запроса биометрии введен в 28-ю версию Андроид, именно для этой или более высокой версии предназначена компонента. В меньших версиях она загружается, но метод Подключить возвращает Ложь. Использование стандартного диалога гарантирует поддержку других средств аутентификации (например сканера сетчатки или лица), которые появятся в Андроид позже.

Примечание: Начиная с 23й версии, Андроид имеет другой набор классов для использования сканера отпечатка — fingerprint. Он не содержит визуальных элементов, чтобы им воспользоваться, необходимо самостоятельно делать активность (или форму 1С). Автор этой статьи, его клиенты и коллеги уже два года успешно используют компоненту, выполненную на основе этого, ныне устаревшего, механизма.

Примечание: В 15-й версии платформы 1С объявила о внедрении биометрии в мобильной платформе, но мне не удалось найти способы ее использования и узнать "идеологию" работы ни в справочной информации, ни на сайте ИТС. Возможно, я не проявил необходимой настойчивости в поиске.

Компонента реализована как устройство ввода из данного стандарта. Имя объекта — BiometricDialog:

ПодключитьВнешнююКомпоненту("ОбщийМакет.Компонента", "IKSoftWare", ТипВнешнейКомпоненты.Native);
Компонента = Новый("AddIn.IKSoftWare.BiometricDialog");

Она имеет следующие параметры:

  • KeyName — строка без пробелов. Должен быть обязательно установлен. Он определяет имя контейнера ключа. Если Вы зашифровали информацию с определенным именем ключа, для ее расшифровки необходимо использовать точно такое же имя. Конечно же, вы можете использовать сколько угодно ключей.
  • Action — целое число равное 0 для шифрования или 1 для расшифровки
  • Data — данные для шифрования (строка) или для расшифровки
  • DecodeKey — открытый ключ для расшифровки. Параметр необходимо задать, если Action = 1. Он возвращается во внешнем событии после успешного шифрования (см. ниже)
  • DialogTitle — строка-заголовок диалога, необходимо обязательно установить
  • CancelText — текст на кнопке отмены, необходимо обязательно установить
  • DialogSubtitle — строка-подзаголовок диалога
  • DialogDescription — строка описания, отображаемая на диалоге

После подключения и инициализации параметров, необходимо вызвать метод Подключить. Если все условия вывода диалога выполнены (кроме соответствующего релиза ОС необходима регистрация в системе хотя бы одного отпечатка), он вернет Истину и отобразит всплывающий диалог:

Его закрытие вызывает в платформе такие внешние события:

  • DriverError — ошибка драйвера, аргумент события "Данные" содержит текст описания ошибки
  • AuthenticationFailed — ошибка проверки (приложен чужой или другой палец). Данные пустые.
  • AuthenticationHelp — прочие ошибки распознавания, "Данные" содержит текст
  • AuthenticationCanceled — отмена
  • BiometricData — успешное распознавание. Данные содержат строку xml следующей структуры:
<BiometricTouch>
<Data>...</Data>
<DecodeKey>...</DecodeKey>
</BiometricTouch>

Тэг Data содержит зашифрованную строку при шифровании или результат расшифровки, а DecodeKey — открытый ключ в кодировке base64.

Компонента предназначена для релиза мобильной платформы 8.3.15.62.

2 Comments

  1. McLer

    На iOS нет такой?

    Начиная с 23й версии, Андроид имеет другой набор классов для использования сканера отпечатка — fingerprint.

    планируете ли обновлять компоненту?

    Reply
  2. IgorKissil

    (1)

    На iOS нет такой?

    На iOS пока нет

    (1)

    планируете ли обновлять компоненту?

    Непонятно про обновление. Если Вы прочитали, компонента, использующая fingerprint у меня есть. Она отдельная с этой никак не связана. Выкладывать в общий доступ не планирую.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *