Страницы

Поиск по вопросам

суббота, 21 декабря 2019 г.

Возможно ли получить UID / хэш от Android Fingerprint API?

#java #android #android_sdk


Здравствуйте.

Можно ли в Java получить уникальный идентификатор, или хэш (короче грубо говоря последовательность
байтов) от пальца при работе с Android Fingerprint API?
    


Ответы

Ответ 1



Не совсем согласен с предыдущим ответом, так как можно сказать, что у отпечатка пальцев в системе есть ID. Например, если вывести содержимое файла /data/system/users/0/settings_fingerprint.xml, то можно увидеть следующее: А если взглянуть на исходники fingerprintd, то можно увидеть в методе void FingerprintDaemonProxy::hal_notify_callback(const fingerprint_msg_t *msg) такой фрагмент кода. case FINGERPRINT_AUTHENTICATED: ALOGD("onAuthenticated(fid=%d, gid=%d)", msg->data.authenticated.finger.fid, msg->data.authenticated.finger.gid); if (msg->data.authenticated.finger.fid != 0) { const uint8_t* hat = reinterpret_cast(&msg->data.authenticated.hat); instance->notifyKeystore(hat, sizeof(msg->data.authenticated.hat)); } callback->onAuthenticated(device, msg->data.authenticated.finger.fid, msg->data.authenticated.finger.gid); break; UPD#1 Для желающих более подробно разобраться с механизмом работы fingerprint в Android рекомендую прочитать эту работу.

Ответ 2



Fingerprint Api в Android не отдаёт никаких данных о снятом отпечатке. Вся работа с ним происходит исключительно внутри SDK. К тому же, такого понятия, как хеш (уид) для отпечатка пальца не существует. При снятии отпечатка, он переводится в набор характерных признаков, называемых минуши (количество, характер линий, координаты, углы излома). При следующем сканировании набор этих признаков будет другим, так как мы можем сдвинуть палец, приложить его под другим углом и т.д. При сравнении наборов, ищутся соответствия признаков и если их количество превышает определённый порог, то считается, что отпечатки идентичны. Таким образом, даже если преобразовать исходный отпечаток в некий УИД, он будет бесполезен, потому что практически никогда не будет совпадать с полученным УИД при повторном сканировании.

Ответ 3



Когда вы добавляете в настройках безопасности системы новый отпечаток пальца, создаётся fingerprint key и сохраняется в хранилище. Запись в хранилище, кроме самого ключа, имеет ещё числовой идентификтор, назначаемый по порядку, и необязательное имя. Всё, что можно сделать из приложения - это запросить у системной службы Fingerprint Service есть ли в хранилище такой отпечаток, какой сейчас прижат к сканеру. Нельзя даже определить, какой из ключей хранилища соответствует прижатому в данный момент пальцу. И даже если вы сможете как-то извлечь из хранилища fingerprint key, толку вам от него немного, он пригоден только для проверки данных получаемых от сканера и только на этом же устройстве.

Комментариев нет:

Отправить комментарий