Вход в web-приложение с использованием распознавания лица



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

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

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


    Утилита br


    Я давно слежу за проектом Open Biometrics, и считаю что утилита br, входящая в комплект openbr, на данный момент это лучший из инструментов, который может помочь с основной нашей задачей – сравнением двух изображений: лицо пользователя, сфотографированное при логине сравнивается с оригиналом, записанным при регистрации. В итоге выдается коэффициент соответствия в диапазоне от 0 до единицы. Синтаксис довольно простой:

    $ br -algorithm FaceRecognition -compare me.jpg you.jpg

    Результат примерно такой:
    [root@facelogin]# br -algorithm FaceRecognition -compare image1.png image2.png
    Set algorithm to FaceRecognition
    Loading FaceRecognition
    Comparing image1.png and image2.png
    Enrolling image1.png to image1jR5xN2.mem
    00.00% ELAPSED=00:00:00 REMAINING=00:00:00 COUNT=1
    00.00% ELAPSED=00:00:00 REMAINING=00:00:00 COUNT=1
    1

    Последняя единичка и есть искомый коэффициент (я сравнивал два одинаковых файла).

    Выделение лица


    Пользователям было бы не очень удобно следить за тем, чтобы в камеру попадало только лицо, и только одно. Поэтому второй нашей задачей является авто-определение лица на снимке камеры и использование только этого фрагмента для последующего сравнивания с помощью утилиты br. Я решил переложить это на плечи браузера, благо возможности HTML5 это позволяют. По запросу “face detection with HTML5” Гугл выдал neave.github.io/face-detection. Отличный проект, требованиям соответствует, его и будем использовать.

    Что получилось


    Скрипт от neave немного модифицирован – он будет передавать координаты и размеры лица через форму на скрипт регистрации и входа.
    На php быстренько набросаны скрипты регистрации и логина.

    И вот результат https://face2.in/
    Внимание, работает не на всех браузерах — рекомендуется Chrome последней версии (desktop). Для мобильных браузеров будет fallback на загрузку фото.

    Если заинтересовались и хотите повторить у себя на сервере, вот список линков
    1. Инструкция по установке пакета openbr (на убунту ставится легко, с centos-ом пришлось помучиться, с windows-ом вообще без проблем)
    2. Face Detection in JavaScript with getUserMedia
    3. Исходники демо проекта (да, попраны все стандарты и рекомендации – поэтому прошу php код не комментировать – это лишь чтобы показать, как это работает) — не забудтье разрешить в php выполнение /usr/local/bin/br и выставить разрешение на запись для директории $facestorage
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 40
      –12
      очень интересно, спасибо
        +4
        Красивая алгоритмическая задачка, но абсолютно бесполезна, как практическая технология, т к легко обходится с помощь вашего фото.
          0
          Ок, с практической точки зрения, предположим face login использовать как второй фактор вместе с паролем на веб системе. Каковы шансы что у злоумышленника будут и пароль и фотка?
            +4
            Учитывая, что фотки сейчас используются в 100% соц. сервисах и еще на куче других сайтах в виде аватарок — слишком легкий для обхода фактор.
            Видел системы, где нужно было выполнить какое-то действие в динамике (шла съемка видео), например, улыбнуться. Вот такая защита уже будет более-менее стойкой.
              0
              ок, там уже надо не фотки а видео сравнивать. в openbr этого пока нет
              +10
              Найти фотку проще, чем найти пароль, не так ли?
              image
                –2
                не факт что примет, эта фотка 10-летней давности. сщас проверю :)

                с другой стороны, надо будет перерегистрироваться каждые 5 лет (как на паспорт) чтобы учитывать старение :)
                  +1
                  Если в алгоритм добавить 3D часть, анализирующую «поведение» частей лица при небольших поворотах головы (чтобы залогиниться — надо поводить носом 2 раза вправо-влево) — секюрность существенно возрастет, т к алгоритм будет отсекать плоские изображения и потребует создания 3D маски для обхода.
                    +5
                    От «кулхацкеров» это поможет. Но от мало-мальски серьезной атаки это не спасет — лицо можно смоделировать.
                      0
                      Ну как вариант — можно просто рожу скорчить — скажем, там, глаз закрыть, язык показать, ну или какую-нибудь незамысловатую комбинацию из пальцев ;) — тогда фотка мало поможет.
                        +1
                        Сдается мне, количество статичных гримас не очень велико (ну 2 бита энтропии на бровь, 2 бита на глаз, 6 бит на рот — 10 бит, 1024 значения: мало кто будет выдумывать что-то сложнее). Значит можно смоделировать лицо в Makehuman или Poser, и сбрутфорсить. Если задавать динамический пароль, то, конечно, теоретически надежность повышается. Но опять же — кто будет придумывать сложные последовательности подмигиваний и показывания языка?
                        И пароль хотя бы звездочками закрывается. Спалить последовательность гримас постороннему наблюдателю — в разы легче.
                          0
                          И еще сбрить бороду которую 3 месяца растил или растить новую)
                      +5
                      Если у зломышленника есть пароль, фотка у него будет 100%.
                      Вы или не понимаете идеи двухфакторной аутентификации, или просто нечестно пиарите свой продукт.
                        0
                        я и не оспариваю риски, все верно, просто приглашаю раскрыть все возможные варианты

                        не понял про продукт
                          0
                          опять же можно региться состроив «секретную» гримасу — шансов что ее найдут мало :)
                            +11
                            Так и представляется:
                            «Ваша гримаса недостаточна надежна. Попробуйте пошевелить ушами или лизнуть свой нос»
                  • НЛО прилетело и опубликовало эту надпись здесь
                      0
                      я зарегился позавчера бритый, с двухдневной щетиной пока 98% совпадения… хотя до галустяна мне далеко в этом плане :)
                        +1
                        А вы зарегайтесь с 3-недельной щетиной, а потом побрейтесь и попробуйте войти — вот это будет эксперимент :-)
                      0
                      А попробуйте обойти авторизацию, как с android. У меня вышло :)
                        +1
                        Какая интересная идея для оправдания включения вэб-камеры пользователя! Нет-нет, да интересный кадр поймаешь — не все ж будут одеваться ради того, чтобы куда-то залогиниться.
                          +3
                          Почему никто не задумывается, что надо использовать фото (да и отпечатки пальцев) в качестве _login_ ?!
                            +2
                            Потому что так оно не работает. Мощностей серверов не хватает. Сравнить два лица — относительно несложная задачка, но и она отнимает довольно заметные ресурсы, а сравнивать фото с тысячами эталонов… это ж какие сервера нужны! С другой стороны «найти это изображение в Google» как-то с этим справляется, так что, в принципе, это реализуемо.
                              +2
                              Поиск по картинке использует перцептивный хэш.
                              Мне казалось, что и лицо, и отпечатки пальцев используются не как картинки — выбираются характеристики (длина носа, например), и по ним уже проводится сравнение.
                              +3
                              Нельзя гарантировать уникальность такого логина (Такое лицо уже есть в базе данных, сделайте пластическую операцию). Это, на мой взгляд, серьезный минус.
                                +1
                                Это может быть вторичный признак. Фио тоже не уникально же? НО куда быстрее сел, тебя узнало, ты логпасс ввел, и начал наслаждаться жизнью.
                                Если что-то пошло не так — fallback на обычный логин почтой, которая уже есть
                                  0
                                  Что-то вроде автозаполнения логина? Для какого-нибудь устройства или сервиса с небольшим числом пользователей — отличное дополнение.
                                    0
                                    Вполне подойдёт для некоторых вещей из интранета — менеджера задач, например.
                              +1
                              Да, фото можно взять из открытых источников и распечатать. Но ведь задачу можно усложнить. Например, использовать только фото глаза, или ладони, т.е. дешевый самопальный сканер сетчатки и отпечатков пальцев (которые заполучить не так просто). Другое дело, что в используемой либе распознавание заточено (скорее всего) именно на лицо, его геометрию, а не на сравнение любых двух произвольных изображений.
                                0
                                Ну, гораздо легче сделать сравнение любых двух произвольных изображений
                                , даже просто стандартными средствами того же PHP. Но это уже не биометрия.
                                Можно еще упростить, распечатать пароль в виде QR картинки и входить, сканируя код
                                  0
                                  Да, только картинку можно украсть, или незаметно снять копию, а незаметно для человека сделать снимок сетчатки с высоким разрешением — проблематично)
                                    0
                                    Не рекомендуется использовать один пароль для всех устройств.
                                    На каждый сайт по своей контактной линзе?
                                      0
                                      Это правило потеряет актуальность если найдется достаточно надежная альтернатива паролю. В чисто философском смысле, авторизация — это проверка что вы — это вы, идентичность человека единственна, я не могу быть кем-то кроме себя. Например, авторизация, основанная на анализе мозговых волн — вряд ли ее будет легко подделать.
                                0
                                Зарегистрировал кота, зашел под его учеткой со своим лицом. 99.97%

                                Хм.
                                  0
                                  Ни одного кота не зарегистрировано (фотки периодически удаляются, на сегодня 2 фотки, одна моя- котов не вижу)
                                  при регистрации лицо должно быть корректно определено скриптом — скрипт по идее кошачьи морды не должен определять, хотя может зависит от породы :)
                                  0
                                  Алгоритм моего старенького Sony DSC-H50 «распознает» морду быка, когда она (морда) повернута почти строго в фас. :-)
                                  habrastorage.org/files/ff3/ddc/521/ff3ddc5210c846fab38ce8fd41fdd381.jpg
                                    0
                                    Распознавания мало, сравнить то он не может, с другим быком. Open Biometrics заточен на сравнение человеческих лиц
                                    0
                                    Да, было бы правильнее сказать — определяет положение морды на кадре. Для меня это было шоком, когда я первый раз увидел — смотрю — определил «лицо» :-)
                                      0
                                      Это исключение, у вашего быка на фотке какое то выражение грустное, почти человеческое :)
                                        0
                                        По-моему ему просто сказали, «Ты-ты-и-ты — на фарш»

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

                                    Самое читаемое