Как работает одноразовый пароль?
В прошлой заметке мы говорили о том, что такое одноразовый пароль. А теперь давайте узнаем о том, как это всё работает.
На самом деле, всё очень просто. Есть две составляющих данного решения: 1. Клиент — это тот самый генератор одноразовых паролей, представленный в виде брелка/флешки/калькулятора, который выдаётся пользователю; 2. Сервер — программная часть, которая проверяет, правильный ли пароль ввёл пользователь.
В момент инициализации генератора одноразовых паролей в него записываются два значения: некоторое случайное число (понятно, что чем больше это число, тем лучше), которое называется вектором инициализации, а также счётчик. Эти же данные сохраняются и на сервере.
Когда на генераторе одноразовых паролей нажимается кнопка, вектор инициализации и счётчик преобразуются с помощью хэш-функции в некоторое значение, которое и будет одноразовым паролем (на самом деле, всё происходит несколько сложнее, но для понимания принципа работы этого достаточно).
Так как функция хэширования необратима, то восстановить из полученного значения начальные параметры практически невозможно. Так как при каждой генерации счётчик увеличивается, то каждый раз значение одноразового пароля будет различным.
На сервере происходит такая же ситуация
Получив логин пользователя, сервер выясняет, какой вектор инициализации и какое значение счётчика необходимо использовать для расчётов. Используя ту же самую функцию хэширования, сервер получает одноразовый пароль. Если пароли совпадают, то пользователь аутентифицируется и получает доступ к ресурсам. В случае, если вы случайно несколько раз нажали на кнопочку и произошла рассинхронизация, существуют методы синхронизации генератора и сервера.
Описанный алгоритм работы сильно упрощён, и существуют более сложные схемы. Например, сервер присылает нам значение, мы вводим его в крипто-калькулятор, получаем другое «ответное значение» и вводим его в форму аутентификации в качестве пароля.
Вышеописанные схемы работы завязаны на события, то есть на нажатия кнопки. Также существуют схемы работы, завязанные на время. Более подробно про реализацию одноразовых паролей можно почитать в RFC 4226.
Есть вопрос? Не забывайте оставлять комментарии!