14.5. Сообщения и действия
275
тежей могут применяться отдельные протоколы для снятия денег со счета,
оплаты, помещения на депозит, возврата и т.п. Идентификатор протокола по-
могает избежать путаницы между сообщениями, принадлежащими разным
протоколам.
Идентификатор сообщения указывает на то, с каким именно сообщением
протокола мы имеем дело. Например, если в рамках протокола есть четыре
сообщения, мы хотим четко уяснять себе, что собой представляет каждое
из них.
Зачем нам столько идентификационной информации, спросите вы? Раз-
ве злоумышленник не сможет подделать ее всю? Разумеется, сможет. Дан-
ный уровень не обеспечивает никакой защиты от активных фальсификато-
ров; вместо этого он позволяет обнаруживать случайные ошибки. Очень важ-
но иметь хорошую систему обнаружения случайных ошибок. Предположим,
отвечая за поддержку системы, вы неожиданно получаете огромное коли-
чество сообщений об ошибках. В подобной ситуации возможность отличить
активные атаки от случайных ошибок наподобие
проблем с конфигурацией
и неправильных номеров версий окажет вам поистине неоценимую услугу.
Кроме того, идентификаторы протоколов и сообщений делают сообщение
“самодостаточным”, что значительно облегчает поддержку и отладку крип-
тографических систем. Автомобили и самолеты разрабатываются с учетом
того, чтобы их можно было легко обслуживать. Структура программного
обеспечения еще более сложна. Вот почему в его разработку так важно за-
кладывать простоту последующего обслуживания.
Пожалуй, наиболее важная причина, по которой мы включаем в сообще-
ние идентификационные данные, касается принципа Хортона. Когда в про-
токоле применяется аутентификация (или схема цифровых подписей), мы
обычно аутентифицируем несколько сообщений и полей данных. Включая
в сообщение его идентификационные данные, мы полностью исключаем риск
интерпретировать сообщение в неправильном контексте.
14.5.3
Кодирование и
анализ сообщений
Следующим уровнем является кодирование. Каждый элемент данных со-
общения должен быть преобразован в последовательность байтов. Это стан-
дартная
проблема программирования, а потому ограничимся лишь поверх-
ностным обзором, не вдаваясь в детали.
Одним из наиболее важных моментов данной
проблемы является
син-
таксический анализ (parsing)
. Получатель должен иметь возможность про-
анализировать сообщение, чтобы преобразовать его из последовательности
байтов обратно в набор полей данных. Такой
анализ не должен зависеть от
контекстной информации.