Вход в 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.pngSet algorithm to FaceRecognitionLoading FaceRecognitionComparing image1.png and image2.pngEnrolling image1.png to image1jR5xN2.mem00.00% ELAPSED=00:00:00 REMAINING=00:00:00 COUNT=100.00% ELAPSED=00:00:00 REMAINING=00:00:00 COUNT=11
Последняя единичка и есть искомый коэффициент (я сравнивал два одинаковых файла).Выделение лица Пользователям было бы не очень удобно следить за тем, чтобы в камеру попадало только лицо, и только одно. Поэтому второй нашей задачей является авто-определение лица на снимке камеры и использование только этого фрагмента для последующего сравнивания с помощью утилиты br. Я решил переложить это на плечи браузера, благо возможности HTML5 это позволяют. По запросу «face detection with HTML5» Гугл выдал neave.github.io/face-detection/. Отличный проект, требованиям соответствует, его и будем использовать.Что получилось Скрипт от neave немного модифицирован — он будет передавать координаты и размеры лица через форму на скрипт регистрации и входа.На php быстренько набросаны скрипты регистрации и логина.И вот результат http://nikto.us/facelogin/
Если заинтересовались и хотите повторить у себя на сервере, вот список линков1. Инструкция по установке пакета openbr (на убунту ставится легко, с centos-ом пришлось помучиться, с windows-ом вообще без проблем)2. Face Detection in JavaScript with getUserMedia3. Исходники демо проекта (да, попраны все стандарты и рекомендации — поэтому прошу php код не комментировать — это лишь чтобы показать, как это работает) — не забудтье разрешить в php выполнение /usr/local/bin/br и выставить разрешение на запись для директории $facestorage