14.5. Сообщения и действия
279
Обработка ошибок слишком сложна, чтобы пытаться описать ее простым
набором правил. Криптографическое сообщество еще не проанализировало
эту
проблему в достаточной степени. Лучшее, что мы можем посоветовать
на данный момент, — будьте предельно осторожны!
14.5.6
Воспроизведение и повторение
Атака воспроизведения происходит тогда, когда злоумышленник записы-
вает сообщение и позднее отсылает его снова. Систему нужно защищать от
воспроизведения сообщений. Обнаружить воспроизведенные сообщения до-
вольно сложно, так как они весьма похожи на правильные. В конце концов,
они ведь и
есть
правильные.
С атаками воспроизведения тесно связаны так называемые
повторения
(retry)
. Предположим, пользователь А применяет протокол для общения с
пользователем Б, но не получает от него ответа. Причин может быть мно-
го, но наиболее вероятно, что пользователь Б просто не получил последнего
сообщения и до сих пор его ждет. В реальной жизни это случается сплошь
и рядом, и мы решаем проблему, отправив еще одно письмо по обычной или
электронной почте или же еще раз произнеся последнюю фразу. В автомати-
зированных системах это называется повторением. Пользователь А повторяет
свое последнее сообщение для пользователя Б и снова ждет ответа.
Как видите, пользователь Б может получать как копии сообщений, вос-
произведенные злоумышленником, так и копии сообщений, повторно отослан-
ные ему пользователем А. Пользователю Б нужно как-то разобраться в этих
сообщениях и гарантировать правильную обработку последних без ущерба
для безопасности системы.
Реализация отправки повторных сообщений довольно проста. У каждого
участника есть состояние выполнения протокола в том или ином виде. От
вас требуется лишь установить счетчик времени и отослать последнее сооб-
щение еще раз, если в течение заданного времени вы не получите ответа.
Конкретная величина этого промежутка времени зависит от используемой
коммуникационной инфраструктуры. Если вы работаете с протоколом UDP
(протокол, который непосредственно использует пакеты IP), существует до-
статочно большая вероятность того, что сообщение будет утеряно, поэтому
время ожидания ответа должно быть небольшим — порядка нескольких се-
кунд. Если же для отправки сообщений используется TCP, последний авто-
матически повторяет отправку данных, которые не были получены должным
образом, используя собственные значения времени ожидания. В этом случае
вряд ли имеет смысл реализовать повторную отправку сообщений на крип-
тографическом уровне, и многие системы, работающие на основе TCP, этого
не делают. Тем не менее в дальнейшем будем предполагать, что повторная