Существует ли такая авторизация смартфоном по qr-коду?
Есть ли такая схема авторизации на сайтах смартфоном(подключенным к интернету)?:
Пользователь вводит в адресную строку «адрес сайта».
На странице сайта в уголке рисуется qr-код для авторизации.
Пользователь направляет телефон на qr-код, нажимает на пиктограмму установленного приложения «Loginer»(допустим так называется).
Нажимает на любую внутреннюю ссылку сайта(или само обновляется) и уже видит свои приватные данные.
Если нет, то чем вот такая схема не проканает? :
Пользователь на телефон устанавливает приложение «Loginer».
В это приложение пользователь вводит пароль.
Из пароля вычисляется hash-сумма(назовем ее «парольная hash-сумма») и сохраняется в надежное место памяти телефона.
Регистрация:
Пользователь вводит в адресную строку «адрес сайта».
Нажимает кнопку «Зарегистрироваться».
Ему показывается поле ввода своего уникального ника/id(назовем «id пользователя»).
Пользователь вводит уникальный «id пользователя» и отправляет его серверу сайта.
Сервер сайта проверяет уникальность «id пользователя» и генерирует «qr-код регистрации», содержащий связку «id пользователя» и «адрес сайта».
Пользователю показывается страница содержащая «qr-код регистрации», содержащий «id пользователя»(нового) и «адрес сайта».
Пользователь достает свой телефон и запускает приложение «Loginer».
Приложение «Loginer» фотографирует «qr-код регистрации», из него получает «id пользователя» и «адрес сайта».
Связка «id пользователя» и «адрес сайта» сохраняется в надежное место телефона.
Приложение «Loginer» конкатенирует «id пользователя» с «парольная hash-сумма» и из полученной строки вычисляет hash-сумму(назовем ее «id hash-сумма»).
Приложение «Loginer» отправляет связку «id пользователя» и «id hash-сумма» на «адрес сайта».
Сервер сайта сохраняет полученную связку («id пользователя» и «id hash-сумма») в базу данных.
Вход:
Пользователь заходит на «адрес сайта».
Сервер генерирует «qr-код входа», содержащий новый «id сеанса» и «адрес сайта». И просит записать «id сеанса» в куки.
Пользователь приложением «Loginer» фотографирует «qr-код входа», получает «id сеанса» и «адрес сайта». По «адрес сайта» в памяти телефона ищется соответствующий «id пользователя» и генерируется «id hash-сумма». Связка «id hash-сумма» и «id сеанса» конкатенируются и из получившейся строки вычисляется hash-сумма, назовем ее «hash-сумма сеанса».
Связка из «hash-сумма сеанса», «id сеанса» и «id пользователя» отправляется на «адрес сайта».
Сервер проверяет, является ли пришедший от телефона «id сеанса» свежим.
Сервер сайта ищет в своей базе «id hash-сумму», соответствующую «id пользователя».
Сервер конкатенирует «id hash-сумму» и «id сеанса», из полученной строки вычисляется hash-сумма, которая сравнивается с пришедшей от телефона «hash-сумма сеанса». Если они совпадают, то за «id сеанса» закрепляется «id пользователя».
При следующем обращении клиента с установленным в куки «id сеанса», сервер проверяет, какому «id пользователя» он соответствует и начинает отдавать приватные данные.
P.S. Вероятно я не умею искать, но по таким фразам как «авторизация смартфоном» выдается жуткий шлак кроме очень хорошего способа авторизации с отправлением сообщений(неким способом) на смартфон.
Подобная схема авторизации используется на сайте liqpay.com.
Там в QR коде закодирован уникальный случайный 16-значный числовой код (вида login_XXXXXXXXXXXXXXXX).
В приложении под Android можно включить режим сканирования QR кода. Как только приложение находит нужный QR код — спрашивает, действительно ли мы хотим авторизоваться. Если да — идет с смарфона запрос на сервер (естественно приложение авторизовано в liqpay) с данным кодом (подтверждается авторизация).
js скрипт каждые 15 секунд делает запрос на сервер по URL /inapi?code=login_XXXXXXXXXXXXXXXX&action=qrcode_ajax.
В ответ получает результат авторизации. Если прошла — создается сессия, идет обновление страницы и мы попадаем в закрытую часть.
В принципе, можно усилить схему использованием OTP-авторизации. Т.е. приложение получив код на авторизацию — отсылает серверу не сам код, а OTP-ответ, используя HOTP. Ну или любую хэш функцию использовать.
p.s. не знаю, что именно отправляет приложение на телефоне — чистый код с QR или же некий хэш.
отсылает серверу не сам код, а OTP-ответ, используя HOTP. Ну или любую хэш функцию использовать.
Чего то я не представляю это возможным или не понял. Можно только по пришедшему «id пользователя» и соответствующему ему «id hash-сумма» зашифровать «id сеанса».
В HOTP число-ответ вычисляется по числу-вопрос и мастер-паролю. Если использовали ENUM у WebMoney — там вход на сайт, как раз и есть HOTP (точнее принцип его).
Т.е. приложение знает мастер-пароль. При считывании QR оно получает число-вопрос, на основании этих данных и вычисляется число-ответ, которое и отсылается серверу.
Возможно и не стоит с OTP заморачиваться, а просто посылать в plaintext считанный с QR код, вместе с авторизацией (естественно через HTTPS).
Такой способ не встречал, но идея годная. Только можно заменить все это непонятное описание алгоритма таким. В qr коде некий код. Логинер заходит на сайт, авторизируется и вводит этот код. Окно автоматически перезагружается и вы попадаете на свою страницу. Патентуйте пока не позндо)
1) На сайте может быть предусмотренно несколько видов входа. И можно на другой телефон вписать такой же основной пароль и все заработает.
2) Не понял вопрос
3) см 1)
Я бы сделал проще))))
1. Логин — храним в кукисах или вводим вручную.
2. Логин ушел на сервер — сервер сгенерил ID-сессии и ждет…
3. Со смарта отправляется login, timestamp и hash=md5(md5(pass)+timestamp)
(md5(pass) хранится на сервере и на смарте)
4. Сервер проверяет, что hash и hash из параметров по формуле равны и если TIMEOUT не вышел (10 секунд, к примеру, на обновление ожидания через AJAX в браузере), то возвращает список активных сессий для этого пользователя.
Далее — можно делать все что угодно (если сессий больше 1, к примеру, то единомоментно зашли сразу с нескольких компьютеров с одинаковым паролем!!!):
По сессиям на смарте можно: посмотреть IP, время инициализации, браузер, разрешение экрана, ip2town, и т.д.
и войти в один клик на смарте с нужными правами, настройками, сразу на нужную вкладку и т.д.
Можно защитить вход в сессию PIN-кодом или убить все сессии на сервере принудительно…
Тут уж на что фантазии хватит)
Только я не уверен что это значительно проще (у меня тяжело описано). И есть свои минусы(они же плюсы): обязательно хранить пароль в куках или вводить. И для каждого рессурса пользователь должен запоминать свой пароль (иначе утеря телефона… или как?).
Пароли он вводит ТОЛЬКО в Loginer на смарте однократно! (при добавлении ресурса для такой авторизации)
Утеря телефона — ссылка на сайте «Забыл пароль». (и старый сразу станет невалидным!)
Да, а я даже и не подумал что при утере телефона — все сайты, нужно будет уведомлять о смене пароля(а их всех сложно припомнить). В общем вот и ситуация, когда моя авторизация явно опасна. Жаль что стараниями xaker1 я потерял интерес к этой теме. Иначе обязательно доказал что я прав а Вы вообще ни чего не понимаете:).
Можно сделать работу Loginer-a только при определенном условии: TXT-подпись в DNS записи Вашего домена и добавить в md5(pass+DNSTXT). Телефон украли — поменяли её и все!
Пароли уже менять нигде не нужно.
я спросил у них — они ответили:
«Если у Вас украдут телефон, Вы тут же заходите по ссылке www.enum.ru/recovery.aspx
(воостановление) и инициируете восстановление доступа, после этого приложение на Вашем телефоне становится нерабочем и с его помощью невозможно авторизоваться в системе (злоумышленнику)»
Судя по кол-ву ошибок — у них все круто! :D