Кратко

  • RFC 1004 предлагал сервер Cookie Jar, который проверял разрешённые пары участников протокола и выдавал одноразовый ключ для их связи. Текст Миллса от апреля 1987 года был предложением для обсуждения.
  • Повтор третьего сообщения установления связи мог заставить получателя принять его за начало новой связи. Инициатор отбросил бы ответ, а поток повторов мог вызвать череду сбросов состояния и тайм-аутов.

Два шлюза собираются обменяться маршрутной информацией. Адрес отправителя в пакете похож на подпись на конверте: он сообщает, чьё имя там написано, но не кто его вписал. Exterior Gateway Protocol уже требовал от соседей установить связь перед обменом. Миллс остановился у самого порога и придумал привратника с домашним именем Cookie Jar. Он должен был решать, кому разрешён разговор, и выдавать паре временный секрет.

В RFC 1004 речь шла об EGP, предложенном тогда Dissimilar Gateway Protocol и сходных распределённых протоколах. Сообщения могли теряться, дублироваться, перехватываться, изменяться и отправляться заново. У каждого участника был открытый адрес и постоянный личный ключ. Открытый справочник перечислял разрешённых собеседников; банка хранила таблицу личных ключей и сверяла списки. Если j входил в список i, Cookie Jar создавал случайный одноразовый ключ K(i,j). Две по-разному упакованные «печеньки» позволяли i передать долю j при установлении связи. Постоянные ключи оставались у владельцев и у сервера.

Кто держал банку, тот распоряжался списком гостей и ключами. Физическая связь шлюзов сама по себе ещё не давала разрешения говорить по предложенной схеме. После установления связи временный ключ защищал контрольную сумму и порядковый номер сообщений. Миллс хотел распознавать подделку и повтор старой посылки, оставляя обычные данные видимыми в пути. Слабости инструментов он тоже не прятал: контрольная сумма Internet имела всего 16 бит и плохо реагировала на перестановку слов и байтов; DES выглядел естественным выбором времени, но требовал переоценки. Банка может блестеть сколько угодно — прочность замка от этого не меняется.

Сложнее всего оказалось обычное действие «начать снова». Новый Request стирал прежнее состояние связи. Миллс рассмотрел повтор третьего сообщения установления. Получатель j мог решить, что начинается новая связь, и ответить. Инициатор i отвергал ответ из-за неверного порядкового номера. Один повтор едва ли создавал рабочую чужую связь; быстрый поток старых запросов мог снова и снова заставлять j сбрасывать состояние и ждать до тайм-аута. Нарушитель не заходил в дом. Он только непрерывно нажимал на звонок, а хозяевам было некогда работать.

Дополнительный вызов с ответом превратил бы обмен в три шага. Миллс оценил эту цену и отказался: настойчивый противник мог загружать участников и дополнительной процедурой. В документе есть и гонка без противника. Если оба соседа одновременно запрашивали ключ, их Requests могли пересечься, обнулить друг другу ключи и повторяться, пока разошедшиеся тайм-ауты не развели попытки. Периодическая смена ключей и поведение при одновременных запросах были частью повседневной механики протокола.

RFC 1004 приглашал к обсуждению. Он поставил рядом два вопроса: кто впускает соседа и кто способен заставить его снова стоять у двери. Банка выдавала новое печенье. Проблему приносило вчерашнее, поданное ещё раз.