Глава 14. Введение в криптографические протоколы
ввести PIN-код. Четырехзначный PIN-код отсылался карте, а карта отвечала,
активизирована она или нет. Если бы данная схема была реализована хоро-
шо, для перебора всех возможных вариантов PIN-кода злоумышленнику по-
надобилось бы 10 000 попыток. Смарт-карта позволяла ввести неправильное
значение PIN-кода пять раз, после чего она автоматически блокировалась,
и разблокировать ее можно было только специальными средствами. Идея
состояла в следующем: злоумышленник, который не знает PIN-кода, может
перебрать всего лишь пять комбинаций, прежде чем карта будет заблокиро-
вана, в результате чего вероятность угадать PIN-код составляет 1 к 2000.
Сама идея была действительно неплоха. Аналогичные механизмы широ-
ко используются и сегодня. Вероятности 1 к 2000 вполне достаточно для
большинства приложений. К сожалению, разработчик именно той конкрет-
ной системы смарт-карт был несколько беспечен. Чтобы проверить правиль-
ность четырехзначного PIN-кода, программа вначале проверяла первую циф-
ру, затем вторую и т.п. Сообщение об ошибке PIN-кода появлялось сразу же,
как только программа обнаруживала, что текущая цифра является неверной.
Слабым местом этого алгоритма было то, что время, через которое смарт-
карта выдавала сообщение о “неправильном PIN-коде”, зависело от количе-
ства правильных разрядов PIN-кода. Сообразительный злоумышленник мог
измерить это время и получить массу полезной информации. В частности,
он мог узнать, в каком по счету разряде была впервые обнаружена ошибка.
В этом случае для подбора PIN-кода было бы достаточно всего 40 попыток.
(Через 10 попыток мы узнаем, каков первый разряд, еще через 10 попыток —
второй и т.п.) Теперь при наличии пяти возможных попыток вероятность
угадать PIN-код возрастает до 1 к 143. Это намного лучше, чем вероятность
1 к 2000. Например, если у злоумышленника есть 20 попыток, вероятность
угадать PIN-код возрастает до 60%, что несравнимо больше упомянутой ве-
роятности в 0,2%.
Однако гораздо хуже то, что осуществить 20 или 40 попыток отнюдь не
так невозможно, как кажется. Смарт-карта, которая блокируется после за-
данного числа неправильных PIN-кодов, сбрасывает свой счетчик, как только
пользователь ввел нужный PIN-код. В этом случае у пользователя появля-
ется еще пять попыток, в ходе которых он может ввести неправильный PIN-
код. Предположим, что подобной смарт-картой обладает ваш сосед по ком-
нате. Если вам удастся незаметно взять смарт-карту соседа, вы можете один-
два раза попытаться подобрать PIN-код, после чего положить смарт-карту
на место. Подождите, пока сосед использует ее как положено. Введя пра-
вильный PIN-код, он сбросит счетчик неправильных попыток, и вы сможете
начать все сначала. Максимум через 40 попыток у вас в руках будет полный
PIN-код карты соседа.
14.5. Сообщения и действия
279
Обработка ошибок слишком сложна, чтобы пытаться описать ее простым
набором правил. Криптографическое сообщество еще не проанализировало
эту проблему в достаточной степени. Лучшее, что мы можем посоветовать
на данный момент, — будьте предельно осторожны!
14.5.6
Воспроизведение и повторение
Атака воспроизведения происходит тогда, когда злоумышленник записы-
вает сообщение и позднее отсылает его снова. Систему нужно защищать от
воспроизведения сообщений. Обнаружить воспроизведенные сообщения до-
вольно сложно, так как они весьма похожи на правильные. В конце концов,
они ведь и
есть
правильные.
С атаками воспроизведения тесно связаны так называемые
повторения
(retry)
. Предположим, пользователь А применяет протокол для общения с
пользователем Б, но не получает от него ответа. Причин может быть мно-
го, но наиболее вероятно, что пользователь Б просто не получил последнего
сообщения и до сих пор его ждет. В реальной жизни это случается сплошь
и рядом, и мы решаем проблему, отправив еще одно письмо по обычной или
электронной почте или же еще раз произнеся последнюю фразу. В автомати-
зированных системах это называется повторением. Пользователь А повторяет
свое последнее сообщение для пользователя Б и снова ждет ответа.
Как видите, пользователь Б может получать как копии сообщений, вос-
произведенные злоумышленником, так и копии сообщений, повторно отослан-
ные ему пользователем А. Пользователю Б нужно как-то разобраться в этих
сообщениях и гарантировать правильную обработку последних без ущерба
для безопасности системы.
Реализация отправки повторных сообщений довольно проста. У каждого
участника есть состояние выполнения протокола в том или ином виде. От
вас требуется лишь установить счетчик времени и отослать последнее сооб-
щение еще раз, если в течение заданного времени вы не получите ответа.
Конкретная величина этого промежутка времени зависит от используемой
коммуникационной инфраструктуры. Если вы работаете с протоколом UDP
(протокол, который непосредственно использует пакеты IP), существует до-
статочно большая вероятность того, что сообщение будет утеряно, поэтому
время ожидания ответа должно быть небольшим — порядка нескольких се-
кунд. Если же для отправки сообщений используется TCP, последний авто-
матически повторяет отправку данных, которые не были получены должным
образом, используя собственные значения времени ожидания. В этом случае
вряд ли имеет смысл реализовать повторную отправку сообщений на крип-
тографическом уровне, и многие системы, работающие на основе TCP, этого
не делают. Тем не менее в дальнейшем будем предполагать, что повторная
280
Достарыңызбен бөлісу: |