Как работает одноразовый пароль? | OTUS
🚀 OTUS Fest 2021
Бесплатная образовательная онлайн-конференция для IT-специалистов.
Подробнее

Курсы

Программирование
Backend-разработчик на PHP
-9%
Алгоритмы и структуры данных
-9%
Team Lead
-6%
Архитектура и шаблоны проектирования Разработчик IoT
-13%
C# Developer. Professional
-9%
HTML/CSS
-11%
C# ASP.NET Core разработчик
-5%
Kotlin Backend Developer
-8%
iOS Developer. Professional
-8%
Java Developer. Basic C++ Developer. Professional Web-разработчик на Python MS SQL Server Developer Android Developer. Basic Разработчик программных роботов (RPA) на базе UiPath и PIX Microservice Architecture Unity Game Developer. Basic Разработчик голосовых ассистентов и чат-ботов React.js Developer Node.js Developer Интенсив «Оптимизация в Java» Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes JavaScript Developer. Basic Unity Game Developer. Professional Супер-интенсив Azure
Инфраструктура
Экспресс-курс «IaC Ansible»
-10%
Administrator Linux.Basic
-10%
Мониторинг и логирование: Zabbix, Prometheus, ELK
-10%
Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Administrator Linux. Professional
-6%
Дизайн сетей ЦОД
-13%
NoSQL Основы Windows Server MS SQL Server Developer Инфраструктурная платформа на основе Kubernetes Cloud Solution Architecture Highload Architect Разработчик голосовых ассистентов и чат-ботов VOIP инженер Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив "Tarantool"
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Как работает одноразовый пароль?

ITSEC_Deep_19.11_site-5020-eb20d9.png

В прошлой заметке мы говорили о том, что такое одноразовый пароль. А теперь давайте узнаем о том, как это всё работает.

На самом деле, всё очень просто. Есть две составляющих данного решения: 1. Клиент — это тот самый генератор одноразовых паролей, представленный в виде брелка/флешки/калькулятора, который выдаётся пользователю; 2. Сервер — программная часть, которая проверяет, правильный ли пароль ввёл пользователь.

В момент инициализации генератора одноразовых паролей в него записываются два значения: некоторое случайное число (понятно, что чем больше это число, тем лучше), которое называется вектором инициализации, а также счётчик. Эти же данные сохраняются и на сервере.

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

Так как функция хэширования необратима, то восстановить из полученного значения начальные параметры практически невозможно. Так как при каждой генерации счётчик увеличивается, то каждый раз значение одноразового пароля будет различным.

На сервере происходит такая же ситуация

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

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

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

Есть вопрос? Не забывайте оставлять комментарии!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться