В статье авторы исследуют целесообразность применения QR-кодов для передачи одноразового пароля, сгенерированного при помощи секретного ключа, пользователю при работе с приложением двухфакторной аутентификации.
Ключевые слова: QR-код, двухфакторная аутентификация, одноразовый пароль.
QR-код — это разновидность двумерного штрих-кода в виде изображения с матричным кодом. Данная кодировка является миниатюрным носителем некоторых зашифрованных данных, который хранит текстовую информацию, закодированную при помощи белых и черных пикселей.
QR на английском означает «QuickResponse», что переводится как «Быстрый ответ», данный перевод говорит сам за себя. Этот вид штрих-кода при наведении на него камеры смартфона, соответствующего минимальным требованиям для установки приложения, считывающего QR-коды, у пользователя открывается ссылка на сайт, приложение или любая другая информация, зашифрованная в наборе пикселей.
QR-код, в отличие от штрих-кода, читается в двух направлениях — по горизонтали и по вертикали. Это позволяет хранить в нем больше данных. При сканировании QR-кода пользователь получает доступ к этим данным мгновенно [1].
Путь становления данной технологии в том виде, в котором все привыкли ее видеть, начался еще в 1990-х годах в Японии, где она применялась для маркировки автомобильных запчастей. В наши дни не сосчитать количества областей, в которых применяется этот вид штрих-кодов для хранения данных (в том числе ссылок на рекламные страницы и так далее), для совершения платежей, получения подробной информации о продукте. В 2020 году использование QR-кодов увеличилось в связи с использованием их в системах контроля режима самоизоляции.
Как известно, в связи с недавним глобальным распространением дистанционного режима работы во многих компаниях, огромное количество пользователей вынуждено вводить данные для входа в недоверенной среде, за пределами офиса (увы, не каждая компания имеет собственную внутреннюю локальную сеть).
Механизм двухфакторной аутентификации — надежное решение описанной проблемы, ведь два пароля куда безопаснее одного. Разумеется, давно существуют способы передачи второго пароля по, например, SMS. Но никогда нельзя удостовериться, что сообщение не будет перехвачено злоумышленником. Более надежный способ — использовать приложения для двухфакторной аутентификации, специально созданные с целью защиты процесса входа пользователя в систему.
Смысл технологии не трудно понять в общих словах: при первичной настройке приложения сервер обменивается с приложением аутентификации секретным ключом, на основе которого устройство клиента будет создавать одноразовые пароли для каждого последующего входа в систему. В этом случае, данный секретный ключ и будет являться вторым фактором при аутентификации пользователя. От сюда вытекает следующая задача: как передать полученные одноразовые коды в безопасном виде и как их к этому виду привести?
Как говорилось выше, приложение создает одноразовые пароли на основе секретного ключа, получаемого при настройке приложения двухфакторной аутентификации. При помощи ключа (секрета) на стороне приложения хешируется какое-то число, от него берется заранее определенная часть от полученного хеша, кодируется в формате Base32 и пользователю демонстрируется шесть или восемь цифр в виде изображения QR-кода. Пример представлен на рис. 1.
Рис. 1. QR-код для обмена секретным ключом [2]
Тот же самый секретный ключ представлен в текстовом виде на рис.2.
Рис.2. Текстовое представление секретного ключа из QR-кода [2]
Для получения «какого-то» числа раньше применялся алгоритм HOTP, генерирующий число на основе счетчика событий (иначе говоря, самого факт генерации). При каждом последующем создании пароля счетчик монотонно увеличивал значение на единицу. Главный минусами этого метода заключался в том, что счетчик мог сбиваться, тогда требовалось настраивать его заново. Сейчас же чаще всего используется другой алгоритм — TOTP. В его основе — текущее время.
Осталось определить, какие шесть цифр будут отправлены пользователю. Для этого нужно выбрать сдвиг по длине хеша в битах. Именно на этом расстоянии будет находиться необходимый символ, в котором в виде байтов расположен код. Количество символов по данному сдвигу будет больше, чем заявленные шесть, поэтому принято отбрасывать все цифры, кроме последних.
Таким образом, нам удалось понять и описать, на сколько актуальна и важна технология QR-кодов в таком распространенном и нужном в современном мире механизме, как двухфакторная аутентификация.
Литература:
- Визитки, реклама, платежи: как возникли и для чего используются QR-коды. — Текст: электронный // РБК. Тренды: [сайт]. — URL: https://trends.rbc.ru/trends/industry/6189517c9a79475deb5dbf9a (дата обращения: 08.06.2022).
- Справочник анонима. Как работают токены аутентификации и в чем их отличия от паролей. — Текст: электронный // Хакер: [сайт]. — URL: https://xakep.ru/2019/10/17/jwt-howto/ (дата обращения: 08.06.2022).