Вызов-ответ (аутентификация)
Вызов-ответ (англ. challenge–response authentication) — это семейство протоколов аутентификации, в которых одна из сторон предъявляет вопрос, а другая должна предоставить правильный ответ («ответ»), чтобы пройти аутентификацию[1].
Описание
Самым простым примером протокола «вызов-ответ» является парольная аутентификация, где вызовом является запрос пароля, а ответом — правильный пароль.
Злоумышленник, перехвативший трафик при аутентификации по паролю, может аутентифицироваться, повторно используя перехваченный пароль. Одно из решений — использовать несколько паролей, каждому из которых присвоен идентификатор. Проверяющая сторона предъявляет идентификатор, а доказывающая сторона должна предоставить правильный пароль для этого идентификатора. Если пароли выбираются независимо, перехват одной пары «вызов–ответ» не даёт злоумышленнику информации для ответа на другой вызов в другое время.
Например, когда другие методы обеспечения безопасности связи недоступны, вооружённые силы США используют шифр триад для аутентификации и шифрования некоторых сообщений. TRИАД содержит список трёхбуквенных кодов-вызовов, которые выбираются проверяющим случайным образом, и случайных трёхбуквенных ответов к ним. Для дополнительной безопасности каждый набор кодов действует только в определённый период времени, обычно 24 часа.
Другой базовый способ реализации «вызов-ответ» выглядит так. Боб контролирует доступ к некоему ресурсу, а Алиса запрашивает доступ. Боб высылает вызов «52w72y». Алиса должна ответить единственной строкой, которая «соответствует» этому вызову. Соответствие определяется заранее известным алгоритмом, которым владеют обе стороны. Ответ может, например, выглядеть как «63x83z», если алгоритм реализует сдвиг каждого символа вызова по принципу шифр Цезаря. На практике алгоритм устроен сложнее. Каждый раз Боб выдаёт новый вызов, и потому знание предыдущего правильного ответа, даже если оно получено без шифрования, не позволяет злоумышленнику вычислить актуальный ответ.
Другие некриптографические протоколы
Протоколы «вызов-ответ» используются и вне криптографической области. Например, CAPTCHA применяется для того, чтобы сайты и приложения могли определить, выполнено ли действие реальным пользователем, а не ботом-скраппером или ботом. В первых версиях CAPTCHA пользователю показывалось искажённое изображение текста, и требовалось ввести распознанный текст. Искажение подбиралось так, чтобы автоматизированное распознавание текста (OCR) было затруднено, и программа не могла выдать себя за человека.
Криптографические методы
До появления интернета некриптографическая аутентификация зачастую была достаточной, так как пользователь мог быть уверен, что система, запрашивающая пароль, действительно является целевой системой, и перехват трафика маловероятен. Для решения проблемы несекретного канала связи требуется более сложный подход. Во многих криптографических решениях применяется двусторонняя аутентификация, при которой и пользователь, и система должны доказать, что знают общий секрет, при этом сам секрет не передаётся по каналу в открытом виде.
Один из методов — использовать пароль в роли ключа для шифрования, чтобы передать случайно сгенерированное значение как вызов; другая сторона должна вернуть (в виде ответа) также зашифрованное значение, являющееся определённой функцией от присланного, тем самым доказывая способность расшифровать вызов. Например, в Kerberos вызов — это зашифрованное целое число N, а ответ — зашифрованное число N+1; так сторона доказывает, что она расшифровала число N. Также возможен вариант, когда к паролю и случайному значению применяется хеш-функция с получением ответа. Другая разновидность использует вероятностную модель для генерации случайных вызовов на основе введённых данных[2].
Подобные шифрованные или хешированные обмены не раскрывают пароль напрямую перехватчику. Однако они могут дать достаточно информации для подбора пароля при помощи атаки по словарю или атаки перебором. Использование случайно сгенерированной информации при каждом обмене (и когда ответ отличается от вызова) защищает от повторной атаки, когда злоумышленник просто записывает обмен и воспроизводит его позже, чтобы обмануть одну из сторон.
Обычно в протоколах аутентификации в качестве вызова используют одноразовый номер, что обеспечивает уникальность каждой сессии «вызов-ответ». Это защищает от прослушивания с последующей атакой повтором. Если реализовать настоящий одноразовый номер невозможно, генерация вызовов основана на стойком генераторе и криптографической хеш-функции, что даёт крайне малую вероятность совпадений. Иногда нежелательно использовать одноразовые номера, основанные на времени, так как это может ослабить серверы в разных часовых поясах или со сбитыми часами. В других случаях, если системе угрожает атака с задержкой сообщения, наоборот, временные одноразовые номера и синхронизированные часы важны. Такая атака реализуется, когда злоумышленник блокирует доставку сообщения, а потом воспроизводит его с задержкой. Это легко реализуется на беспроводных каналах. Временной одноразовый номер ограничивает время жизни сообщения, например, до менее 1 секунды, делая атаку бессмысленной для приложения.
Взаимная аутентификация проводится через сессии «вызов-ответ» в обоих направлениях: сервер убеждается, что клиент знает секрет, а клиент — что и сервер знает секрет, что предотвращает имитацию настоящего сервера злоумышленником.
«Вызов-ответ» помогает и при обмене сессионными ключами для шифрования. Используя функцию вывода ключа, из вызова и секрета можно сгенерировать непредсказуемый ключ для сессии. Это особенно эффективно против атаки посредника, поскольку без знания секрета злоумышленник не может вычислить ключ сессии и расшифровать трафик.
Пример последовательности для взаимной аутентификации
- Сервер отправляет клиенту уникальное значение вызова sc
- Клиент отправляет серверу уникальное значение вызова cc
- Сервер вычисляет sr = hash(cc + secret) и отправляет клиенту
- Клиент вычисляет cr = hash(sc + secret) и отправляет серверу
- Сервер вычисляет ожидаемое значение cr и проверяет, правильно ли ответил клиент
- Клиент вычисляет ожидаемое значение sr и проверяет, правильно ли ответил сервер
где:
- sc — вызов, сгенерированный сервером
- cc — вызов, сгенерированный клиентом
- cr — ответ клиента
- sr — ответ сервера
Этот пример уязвим для атаки отражением.
Хранение паролей
Чтобы избежать хранения паролей в явном виде, некоторые операционные системы (например, на базе UNIX) хранят хеш пароля, а не сам пароль. При аутентификации система проверяет только совпадение хеша введённого пароля с хешем в базе. Это усложняет получение паролей злоумышленником, потому что исходный пароль не хранится, и очень трудно подобрать такой пароль, чтобы его хеш совпал с сохранённым значением. Однако для многих (но не всех) «вызов-ответ» алгоритмов требуется, чтобы на обеих сторонах был общий секрет. Поскольку пароль не хранится, в роли секрета обычно выступает хеш пароля, а не сам пароль. В этой ситуации злоумышленник может использовать хеш напрямую, что делает храныемые хеши столь же критичными, как и пароли. Алгоритм SCRAM — пример протокола «вызов-ответ», избегающего этой проблемы.
Примеры
Примеры более сложных «вызов-ответ» алгоритмов:
- Доказательство с нулевым разглашением пароля и алгоритмы согласования ключей (например, SRP)
- CHAP ()
- CRAM-MD5, OCRA: OATH Challenge–Response Algorithm ()
- SCRAM ()
- Встроенная в ssh система «вызов-ответ» на базе RSA[3].
Некоторые исследователи рассматривают CAPTCHA как разновидность аутентификации «вызов-ответ», блокирующую спам-ботов[4].
Примечания
- ↑ Henk C.A. van Tilborg. Encyclopedia of Cryptography and Security : [англ.] / Henk C.A. van Tilborg, Sushil Jajodia. — Springer Science & Business Media, 8 июля 2014. — ISBN 978-1-4419-5906-5.
- ↑ Ahmed, Ibrahim H. Advances in Practical Applications of Agents, Multi-Agent Systems, and Social Good. The PAAMS Collection : [англ.] / Ibrahim H. Ahmed, Josiah P. Hanna, Elliot Fosong … [et al.]. — 2021. — Vol. 12946. — P. 14–26. — ISBN 978-3-030-85738-7. — doi:10.1007/978-3-030-85739-4.
- ↑ SSH: Challenge/Response Authentication Procedures (англ.). www.cag.lcs.mit.edu. Дата обращения: 19 октября 2022. Архивировано 14 октября 2004 года.
- ↑ Challenge–Response Authentication (англ.). Techopedia. Дата обращения: 29 июня 2024.