14.5. Сообщения и действия
281
распознать многие виды активных атак. Это окажет нежелательное влияние
на компоненты обнаружения и отклика системы безопасности.)
В третьем случае мы получаем совсем старое сообщение, которое было
впервые отправлено еще задолго до предыдущего. Сделать в данной ситу-
ации можно не так уж много. Если вы все еще храните изначальное сооб-
щение, которое было получено на той стадии протокола, то можете прове-
рить, идентичны ли старое и новое сообщения. Если это действительно так,
просто проигнорируйте сообщение. Если же сообщения неодинаковы, вы об-
наружили атаку и должны обработать ее как ошибку протокола. Многие
программы сохраняют не все сообщения, которые были получены во время
выполнения протокола. В этом случае мы не сможем определить, совпадает
ли новое сообщение с тем, что уже когда-то было получено. Такие сообще-
ния рекомендуется просто проигнорировать — в любом случае это не нанесет
вреда безопасности системы. Вы бы удивились, узнав, как часто подобное
происходит с реальными протоколами. Иногда сообщения задерживаются на
длительное время. Предположим, пользователь А отправил сообщение, кото-
рое было задержано. Через несколько секунд пользователь А посылает по-
вторное сообщение, которое на сей раз достигает своей цели, после чего оба
пользователя продолжают выполнение протокола. Через полминуты поль-
зователь Б получает исходное сообщение. С нашей точки зрения, подобная
ситуация выглядит так, как если бы пользователь Б получил копию — в тер-
минах протокола — очень старого сообщения.
Ситуация становится намного сложнее, если у протокола есть более двух
участников. Такие протоколы существуют, но их рассмотрение выходит за
рамки данной книги. Если вам когда-нибудь придется разрабатывать про-
токол с несколькими участниками, обратите особое внимание на повторения
и воспроизведения.
Еще одно замечание: узнать, было ли доставлено последнее сообщение
протокола, невозможно. Если пользователь А отсылает последнее сообщение
пользователю Б, он никогда не получит подтверждения того, что это сообще-
ние действительно прибыло. Если же канал связи будет нарушен и пользо-
ватель Б не получит последнего сообщения, он попытается повторить преды-
дущее сообщение, но оно все равно не дойдет до пользователя А. Пользова-
тель А, находящийся на “нормальном” конце протокола, не сможет опреде-
лить, дошло сообщение или нет. Для решения этой
проблемы в конец про-
токола можно добавить специальное уведомление, отправленное пользовате-
лем Б пользователю А, но тогда это уведомление станет новым последним
сообщением, и
проблема повторится. Криптографические протоколы следу-
ет разрабатывать таким образом, чтобы описанная ситуация не повлияла на
безопасность системы.