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

Объем данных


Не смотря на то, что мы живем в век BigData, на сегодняшний день мы не можем обеспечить авторизацию по биометрическим показателям через бэкенд сервис. Первая причина банальна — объем данных. Дело в том, что стандартная связка логин-пароль занимает порядка 30-60 символов, и для передачи по сети это ничтожный объем. В то же время, для передачи качественного скана пальца нам придется отправлять фактически изображение приличного размера. Если провести аналогию с черно-белыми картинками, изображение 1024*1024 пикселя с глубиной скажем, в 8 бит, будет занимать на порядки больше места, чем стандартная связка логин-пароль. А при авторизации по скану лица, объем вырастает еще в порядки.

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

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

Нечеткое сравнение


Все дело в том, что при авторизации по паролю мы должны в точности этот пароль воспроизвести. Данные при этом будут передаваться и храниться в виде хеша этого пароля (пояснение — это такая строка, которую можно получить из пароля, но технически очень сложно сделать обратное — это обеспечивает защищенность конфиденциальных данных). В связи с тем, что одно из ключевых правил хеша — затруднительность дешифровки, даже очень похожие пароли будут выдавать совершенно разные хеши. Например, вот несколько хешей для очень похожей комбинации символов(алгоритм SHA512):

password — b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86
passwor — cc28edf8bd1e768a03fd79cb48230dd13e082da4ff260526ad7a00b28f5f82a8624a05997040bb6ae501cbfeb7e089778de36f1fd4e56efb9356b02b675a9db8
Password — e6c83b282aeb2e022844595721cc00bbda47cb24537c1779f9bb84f04039e1676e6ba8573e588da1052510e3aa0a32a9e55879ae22b0c2d62136fc0a3e85f8bb
Рassword — 4846ee019bb2f83122c6aeaf92e61e9b5dcab8f4be0ffcaaa024cc1f992b7543b0dc1cc32bb68d29fca86753667b3a0cf7c712255907b1b8aeba2085dca74d6b

В последних двух парах в слове Password латинская буква P заменена на русскую Р. Как мы видим, строки получаются абсолютно разные, и при вводе пароля мы не сможем сравнить даже практически не различающиеся символосочетания.

Биометрические сканеры не позволяют считывать данные со 100% точностью. Прикладывая палец, смещение на доли миллиметров, изменения силы нажатия, травмы и другие побочные действия всегда слегка изменят получившийся рисунок, и сканы одного и того же пальца или лица всегда будут немного (или значительно) различаться.

Мы научились распознавать ключевые элементы и производить сравнение по наличию и размещению этих ключевых элементов.

Apple обещает распознавание до 30 000 ключевых точек по технологии face ID. Однако это совсем не значит, что все эти точки должны однозначно совпадать.

Как же работает биометрическая авторизация?


Дело в том, что для авторизации по отпечатку пальца или лицу используется нечеткий поиск.

Это такой поиск, при котором мы ищем не полностью совпадающие элементы (как это возможно при хешировании паролей), а сущности, наиболее похожие друг на друга. Скажем, для авторизации по отпечатку пальца, точность в повторении рисунка в 90 процентов — очень хороший показатель, и практически он означает, что перед нами и есть истинный владелец отпечатка. Тем не менее, его отпечаток на 10 процентов состоит из абсолютно других данных, в связи с чем мы получаем абсолютно другой хэш и теряем возможность безопасного хранения данных. Более того, данные придется хранить целиком — хэш функция, выдающая близкие значения для похожих символьных сочетаний не отвечает правилам безопасности и не может считаться сейчас хорошей хэш функцией.

Но даже если мы сможем каким-то образом описать данные с помощью «нечеткого» хэша, у нас возникает другая, еще более нетривиальная проблема.

Схожесть биометрических показателей


image

Всем попадись на жизненном пути люди, поразительно похожие на ваших знакомых. Существуют народности, в которых вообще типажей очень мало и вероятность совпадения еще более усугубляется. Для отпечатков пальца вероятность 100% совпадения — 1 к 64 000 0000 000 (данные могут быть не точными, но вероятность действительно крайне мала). Но при нечетком поиске ситауция выглядит совсем иначе.

Представьте ситуацию — вас покусали пчелы! Совершенно точно, что ваше опухшее лицо с большей вероятностью будет похоже на кого-то другого, чем на вас самих.

image

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

Но даже если мы сумеем распознавать лицо с абсолютной точностью, даже если мы сможем сравнивать отпечатки со 100% совпадением, есть еще одна, наиболее существенная проблема, решить которую мы совершенно точно не можем.

Компрометация данных


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

Более того, наши биометрические данные всегда доступны стороннему наблюдателю — мы постоянно оставляем отпечатки пальцев, фотографии лица, частички наших днк в волосах и ногтях. Мы делаем это ежеминутно, даже не задумываясь об этом.

Представьте ситуацию — распознавание лица на мобильном устройстве 15 лет назад. В эпоху камеры в 0.3 мегапикселя получить качественную фотографию лица было очень проблематично для мобильных устройств. Сегодня же, любой дешевый смартфон повысил качество фотографии в сотни раз. Это значит, что с помощью современной техники подделать изображение лица на порядок проще, чем несколько лет назад. Бесконечная гонка за улучшением внешних сканеров только усугубляет проблему, и мы будем вынуждены обновлять данные авторизации с выходом новых способов подделки.

Если ваши данные «утекут» в руки злоумышленников — вы не сможете мгновенно заменить эти данные, и даже если так, уведомить все системы о компрометации очень затруднительно. Гораздо проще использовать различные пароли для авторизации в разных системах, не так ли?

Подытожу, вот несколько ключевых трудностей в авторизации биометрическими методами

— большой объем данных
— нечеткое сравнение
— схожеть показателей у разных людей
— высокая вероятность компрометации

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

Комментарии (43)


  1. wlr398
    28.06.2018 09:36

    Для персональных девайсов тоже есть риски. Разблокировать по отпечатку пальца можно когда владелец спит, сильно пьян, наконец мёртв.
    Удобно. Защищает от подсматривания пинкода через плечо. Но надёжно только когда владелец жив, трезв и спит чутко.


    1. Guitariz Автор
      28.06.2018 09:39

      Безусловно. Но точно так же у человека можно и пароль от девайса выпытать. Вообще вопрос безопасности ограничен лишь параноей защищающегося)


  1. Ocelot
    28.06.2018 09:39

    0. Пожалуйста, не путайте аутентификацию, авторизацию и идентификацию.

    1. Большой объем данных.
    Размер, скажем, RSA-сертификата, сравним с размером изображения лица или пальца. К тому же, для аутентификации не нужно передавать изображение целиком, достаточно выделить ключевые точки.

    2. Нечеткое сравнение
    Алгоритмы нечеткого хеширования и сравнения давно существуют. Порог «строгости» можно настраивать, ища компромисс между ошибками первого и второго рода.

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

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


    1. TerekhinSergey
      28.06.2018 10:02

      Чтобы выделять «ключевые точки» (на самом деле все несколько сложнее, но не суть), нужно доставить алгоритм на конечное устройство. А алгоритмы эти, как правило:
      а) достаточно ресурсоемки
      б) зависят от вендора и версии — то есть не получится «хэш», полученный от вендора А обработать на бекенде вендора Б. Да даже разные версии алгоритма от одного и того же вендора могут быть не совместимы между собой
      Поэтому считать на конечном устройстве является весьма нетривиальной задачей.

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

      Так что я согласен с тем, что в больших публичных системах с большим количеством пользователей, биометрия может использоваться только как второй фактор для дополнительного подтверждения личности, но не как основной для входа


      1. AndreyHenneberg
        29.06.2018 21:47

        как второй фактор для дополнительного подтверждения личности

        Можно и наоборот — как «первый» фактор, вроде автоввода логина:
        — Посмотрите в камеру.
        — Здравствуйте, Александр Васильевич. А теперь подтвердите личность: улыбнитесь и назовите пароль.

        Про улыбку — это отсылка к тексту, который, кажется где-то тут и пролетал: она имеет очень высокий уровень уникальности.


    1. Protos
      29.06.2018 04:33

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


      1. Hardcoin
        29.06.2018 11:42

        Почему же нельзя? Можно. Простейший пример — http digest auth. Пароль не передается по сети, только хэш, каждый раз разный.


  1. Guitariz Автор
    28.06.2018 09:43
    +1

    0 — да, я именно об авторизации.
    1 — безусловно, но количество этих точек так же очень велико.
    2 — да, но нечеткое сравнение это большой камень в огород для схожести показателей
    3 — да, но мы не ползьуемся только паролем, мы используем связку логин + пароль. При биометрической аутентификации как правило, используется лишь один атрибут
    4 — именно так ее и используют сейчас и совсем не с проста, просто не многие реально догадываются, почему же нельзя целиком на нее перейти.


    1. Free_ze
      28.06.2018 11:31

      да, я именно об авторизации.

      Вы точно знаете, что перед нами именно известный системе Вася (аутентификация), но не можете решить, имеет ли он право доступа к защищаемой информации (авторизация)?


      1. Guitariz Автор
        28.06.2018 11:57

        Если уж до конца быть точным, то здесь обе проблемы и аутентификации, и авторизации одинаково важны.
        И если с аутентификацией мы реально можем разобраться в будущем, то авторизация по биометрическим параметрам — нерешенный вопрос.


        1. Free_ze
          28.06.2018 12:08

          Авторизация работает с результатами аутентификации (id юзера, например), а не «сырой» биометрией. Сама авторизация особо ничем не будет отличаться от того, что сейчас происходит на каждом первом веб-сервисе: джойн таблиц Users с UserRoles и RolePermissions.


  1. ZaEzzz
    28.06.2018 10:26

    Использовать биометрические данные для идентификации — это хорошо. А вот для аутентификации — это плохо.
    Еще в 2014 на CCC был отличный доклад на эту тему
    Если кратко, то скомпрометировать биометрические данные для предоставления их машине достаточно просто. А если учесть почти невозможность сменить биометрические данные то, на мой взгляд, это и есть самый жестокий подводный камень в биометрике. То есть биометрические данные — это логин, но не как не пароль.


    1. Guitariz Автор
      28.06.2018 10:45

      Далеко не всегда необходима связка одно физическое лицо — один аккаунт.


      1. ZaEzzz
        28.06.2018 11:07

        С авторизацией то все понятно — могу себе представить ситуацию «акция в бассейне — всем голубоглазым блондинам бесплатный». Много людей авторизуются через характеристику биометрических данных, но это не идентификация с аутентификацией.

        Ну и я не спорю, что бывают ситуации, когда одно физическое лицо — несколько аккаунтов. Но это относительная редкость.
        А если вы про ситуацию когда под одним аккаунтом несколько людей, то это… Ну такая, стремная ситуация. На домашнем компе разве только ее использовать.


        1. Hardcoin
          29.06.2018 11:47

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


          1. ZaEzzz
            29.06.2018 18:19

            А я что-то иначе написал? Кроме домашнего использования есть еще адекватные варианты?


            1. AndreyHenneberg
              29.06.2018 22:05

              Дежурный где-нибудь: все сообщения приходят на один аккаунт и обрабатываются с него же.


              1. ZaEzzz
                30.06.2018 08:22

                Стремный случай — в случае возникновения инцидента не не сразу можно идентифицировать дежурного — придется идти в расписание итд.
                Спустя рукава можно много где так делать, но это же все равно стремно.


                1. AndreyHenneberg
                  30.06.2018 13:34

                  Согласен. Но так делают.


        1. AndreyHenneberg
          29.06.2018 22:07

          Почему редкость? Два-три SIM на человека — норма. А уже несколько адресов электропочты для разных целей — вообще сплошь и рядом. И, кстати, не обязательно у разных операторов и на разных почтовых сервисах.


          1. ZaEzzz
            30.06.2018 08:25

            Несколько симок на одного человека — все таки редкость. Как и несколько почтовых ящиков на одном сервисе.


            1. AndreyHenneberg
              30.06.2018 13:37

              Если цель — получить доступ к аккаунту конкретного человека, то вполне осмысленно и достаточно легко реализуемо. При этом, сам факт съёмки запросто останется незамеченным, воссоздать объём по этим фотографиям можно даже не нейросетей, начистой алгоритмике и это делается уже давно.


              1. ZaEzzz
                30.06.2018 22:22

                А при чем тут получение доступа к аккаунту через съемки, если пара сообщений выше про несколько учеток на одном сервисе?


    1. VolCh
      28.06.2018 15:38

      Вот как раз для идентификации на больших выборках её получается плохо использовать, о чём и пост. Технически нормально получается для аутентификации, но с указанными вами бизнес/юзабилити недостатками.


      1. ZaEzzz
        28.06.2018 18:29

        Чем вам не угодили, к примеру, способы идентификации по отпечатку пальца, рисунку вен или радужной оболочке глаз?

        А аутентификация с помощью ключей, которыми вы разбрасываетесь направо и налево — это «бизнес/юзабилити недостатками»? Вы серьезно?


        1. VolCh
          29.06.2018 11:08

          Пост перечитайте, только замените «авторизация» на «идентификация»: автор использует не общепринятые в ИТ определения.

          Вкратце технические проблемы — большой объём передаваемых данных и необходимость нечёткого поиска.

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


          1. ZaEzzz
            29.06.2018 18:48

            Пост перечитайте, только замените «авторизация» на «идентификация»: автор использует не общепринятые в ИТ определения.

            Зачем? Автор пишет на ИТ ресурсе по ИТ тематике, занимается согласованием ТЗ — смыслит в терминологии и прочих нюансах, я надеюсь.

            Вкратце технические проблемы — большой объём передаваемых данных и необходимость нечёткого поиска.

            Эти технические «проблемы» могли бы ответить на вопрос, почему биометрика сейчас не используется повсеместно, но не почему она нам не грозит. 20 лет назад хард на 1.2Гб для меня был просто мегамонстром, а сейчас?

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

            Ну я как бы и утверждаю, что самая жесть — это простая компрометация входящих данных. Именно по этому биометрика годится только для идентификации. Да, есть метрики, которые пока не подделать так просто, но это дело времени. Грубо говоря я делюсь визитками, оставляю свой идетификатор. Так же и с лицом, отпечатками и прочими данными. Но я нигде не оставляю свои пароли и ключи.


  1. Y1975
    28.06.2018 11:38

    Мы тут теоритезируем, а с 1 июля вводится биометрия в банках.


    1. Guitariz Автор
      28.06.2018 11:54

      Используется она в качестве сугубо дополнительной защиты, никак не основной.


  1. saipr
    28.06.2018 12:33

    Очень наглядная и поучительная статья. А для аутентификацией давайте использовать токены/смарты PKCS#11, на которых будем хранить личный сертификат и закрытый ключ.


  1. Busla
    28.06.2018 13:05

    Для отпечатков пальца вероятность 100% совпадения — 1 к 64 000 0000 000

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


    1. Guitariz Автор
      28.06.2018 13:27

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


      1. Busla
        28.06.2018 18:19

        Не совсем так.
        Не зафиксировано совпадений по всем 10 пальцам. И именно про совокупность 10 пальцев говорят о шансе 1 к 64 млрд. А если тупым математическим методом попытаться пересчитать вероятность на 1 палец — вообще как-то печально всё выглядит. Разве что в криминалистике мизинец с большим, наверное, не спутаешь и так считать нельзя.


        1. Guitariz Автор
          28.06.2018 18:24

          Нам интересен только один палец.
          Спутать мизинец с большим, думаю, вполне возможно — размер ладоней у всех разный.
          В любом случае, интересен именно вариант «отпечатки достаточно похожи», а не «отпечатки совпадают»


          1. kuokk
            29.06.2018 08:27

            «Подытожу, вот несколько ключевых трудностей в авторизации биометрическими методами:
            — большой объем данных
            — нечеткое сравнение
            — схожеть показателей у разных людей
            — высокая вероятность компрометации»

            Как эти проблемы решаются в Индии в национальной системе идентификации AADHAAR?


  1. gandjustas
    29.06.2018 06:08

    Как верно подметили, ключевая проблема биометрии в неизменяемости.
    Предположим два сценария — аутентификация по отпечатку и сертификатом. Предположим что объем данных для обоих процедур идентичен. И тут кто-то скомпрометировал данные аутентификации. То есть тупо украл сертификат или смог подделать отпечаток ( или его цифровой слепок). Сертификат можно тупо заблокировать и выпустить другой. А что делать с отпечатками?


    Теория говорит что для максимально надежной аутентификации нужно два секрета — одним ты владеешь, а другой ты знаешь. И оба секрета должны быть изменяемы.


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


    Но у обоих способов есть недостаток — пароль. Люди плохо создают и запоминают пароли.


    Нужно пароли заменить на что-то другое. И тут получается противоречие — нам нужны данные, которые другой пользователь не может воспроизвести, но нам нужно не заставлять пользователя запоминать. Внезапно биометрия подходит.


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


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


  1. Balagan
    29.06.2018 12:25

    Биометрическая авторизация используется в Сбербанк онлайн мобильном приложении. По крайней мере на iPhone авторизация и операции с отпечатка.


    1. VolCh
      29.06.2018 12:49
      +2

      Точно авторизация (проверка прав для известного пользователя)? Может аутентификация (подтверждение пользователя) или идентификация (представление пользователя)?


      1. Balagan
        29.06.2018 13:20

        Открываем мобильное приложение -> требует поднести палец -> подносим -> заходим в приложение и выполняем любые финансовые операции. Изредка в процессе выполнения операций требует поднести палец. Никаких паролей, параллельно только подтверждающие смс летят.


        1. Guitariz Автор
          29.06.2018 13:36

          практически, для совершения значимых операций у вас происходит проверка номером телефона. А палец — для незначительных (с точки зрения банка) операций.
          Обращу внимание, что это именно подтверждение, но никак не определение вашего аккаунта. Данные об аккаунте вы вводили на первичной настройке.


    1. Guitariz Автор
      29.06.2018 13:07

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


      1. Balagan
        29.06.2018 13:22

        Да, логин/пароль от сбербанк онлайн действительно при первом входе вводились.


        1. Guitariz Автор
          29.06.2018 13:34

          Таким образом, вы уже авторизованы. Отпечаток пальцев — только в качестве дополнительного этапа.
          У меня таких этапов два, отпечаток пальца + СМС на номер телефона. Но их может и вообще не быть — как во вКонтакте, например.