Ответ 1
Назначение одноразового номера - сделать каждый запрос уникальным, чтобы злоумышленник не мог воспроизвести запрос в другом контексте. Не имеет значения, получает ли злоумышленник одноразовый номер: на самом деле дело в том, что поскольку данные содержат одноразовый номер, они не будут полезны злоумышленнику.
ДОБАВЛЕНО:
Одноразовый номер генерируется случайным образом стороной, которая вводит его в разговор. Крайне важно, чтобы злоумышленник не мог повлиять на выбор одноразового номера, и иногда злоумышленник не может предсказать этот выбор. Весьма типично, что каждая сторона генерирует хотя бы один раз одноразовый номер в ходе выполнения распределенного протокола.
Существуют протоколы, в которых одноразовый номер хранится в секрете. Ключ сеанса может быть как одноразовым (то есть выбранным случайным образом одним участником), так и секретным (то есть не передаваться напрямую по проводной связи). Фактически, в хорошо разработанном протоколе ключ сеанса часто получается из двух одноразовых номеров, по одному от каждой стороны. Но секретность не является определяющим свойством одноразовых персонажей.
Давайте возьмем в качестве примера протокол аутентификации на странице википедии. Обычная последовательность операций:
- Клиент инициирует соединение с сервером.
- Сервер генерирует и отправляет nonce
snonce
обратно клиенту. - Клиент генерирует другой nonce
cnonce
и отправляет его плюс хэш своих учетных данных, nonce сервера и nonce клиента (hash(snonce + cnonce + password)
) на сервер. - Сервер проверяет хеш и принимает или отклоняет вход в систему.
Предположим, Мэллори (злоумышленник) может наблюдать за всем трафиком и отправлять свои собственные сообщения. Если она получит одноразовый номер после шага 2, она может отправить свои учетные данные на сервер. Это может помочь ей вызвать отказ в обслуживании, но она может сделать это в любом случае, если сможет вводить трафик. Без учетных данных клиента она не может выдать себя за клиента.
Предположим, что Мэллори завладевает пакетом, отправленным клиентом на шаге 3. Поскольку учетные данные и одноразовый номер хэшируются, она не может изменить пакет, она может только отправить его снова целиком. Опять же, в зависимости от того, как сервер реализует протокол, она может вызвать отказ в обслуживании, но не более того. (Обратите внимание, что этот протокол требует, чтобы сервер отслеживал, какой одноразовый номер связан с каким клиентом, и отвечает этому клиенту на шаге 4.) Операция хэширования на шаге 3 - это то, что удерживает Мэллори от получения данных, которые она не должна получить (клиент пароль).
Чтобы понять, почему существует одноразовый сервер, предположим, что он отсутствует. Тогда Мэллори сможет получить пакет, содержащий hash(cnonce + passoword)
, и она сможет повторно отправить его позже в отдельном соединении и тем самым выдать себя за клиента.
Одноразовый номер клиента служит аналогичной цели, хотя это не очевидно в упрощенном протоколе, описанном здесь; в полном протоколе "токен" будет включать в себя хэш данных, содержащих этот одноразовый номер, и он будет участвовать в предотвращении олицетворения сервера Мэллори.
Одноразовый номер клиента также служит для предотвращения атаки по подбору пароля. Предположим, Мэллори перехватывает ответ сервера на шаге 2 и подставляет свой собственный одноразовый номер сервера. Если бы клиент ответил hash(snonce + password)
, это упростило бы для Мэллори атаку массового hash(snonce + x)
пароля: она могла бы предварительно вычислить hash(snonce + x)
для многих "легко угадываемых" паролей x
и запустить свою атаку на Многие клиенты надеются, что у одного из них слабый пароль. Здесь одноразовый номер клиента действует как соль для хешированного пароля.
Одноразовый номер клиента также способствует защите клиента от плохо реализованного сервера. Предположим, что сервер генерирует не случайный одноразовый номер, а константу, которую Мэллори может легко найти, наблюдая трафик. Тогда Мэллори может пассивно выполнить атаку на отгадывание, описанную в предыдущем пункте. Таким образом, одноразовый номер клиента предоставляет клиенту дополнительную защиту, даже если сервер неправильно реализует протокол. Точно так же одноразовый номер сервера предоставляет серверу некоторую защиту от клиента, который не сгенерировал его одноразовый номер должным образом, опять же, требуя, чтобы Мэллори активно атаковала клиента, если она хочет провести атаку с целью подбора пароля. Это общий сценарий: одноразовый номер каждой стороны предлагает этой стороне некоторую защиту, даже если другая сторона отклоняется от протокола.