Кратко

  • Двустороннее сжатие начиналось сразу после CRLF ответа 206 и оставалось активным до закрытия соединения.
  • После перехода запрещались поздние STARTTLS, AUTHINFO и MODE READER; совместить TLS, личность и сжатие можно было только в такой последовательности.
  • При отправке сжатие выполнялось до SASL и TLS, поэтому область словаря, видимая длина, flush и повреждение потока становились частью безопасности.

Последний ответ, который читался без декомпрессора

Строка 206 Compression active ещё принадлежит обычному NNTP. Завершающий её CRLF проводит границу. Следующий байт в обоих направлениях уже должен пройти через согласованный алгоритм.

RFC 8054 не оставляет между этими состояниями серой зоны. Если клиент начнёт сжимать раньше или сервер позже, один и тот же поток перестанет содержать одинаковые команды для обеих сторон.

Поэтому COMPRESS нельзя ставить в pipeline. Клиент ждёт результата. Отказ оставляет старую грамматику, успех включает новую. Ошибка имени, неподдерживаемый алгоритм и нехватка ресурсов имеют отдельные ответы и не совершают переход.

Оптимизация на срок жизни соединения

Нестандартные предшественники умели сжимать отдельные ответы сервера. Они не охватывали команды клиента и заставляли каждую операцию иметь особый вариант. RFC 8054 опустил один слой без потерь под все последующие команды и ответы.

Повторные запросы, длинные списки, заголовки и текст статей могли использовать общую технику. Информационный раздел RFC отмечает высокий эффект для некоторых многострочных ответов и меньший для коротких реплик или уже закодированных вложений. Это объяснение свойств данных, а не гарантия современной производительности.

DEFLATE из RFC 1951 стал единственным определённым и обязательным алгоритмом. Каждый отправитель выбирал разумный уровень для собственного направления, а удалённый декомпрессор приспосабливался. Общий слой не делал параметры симметричными.

Включение нельзя было отменить командой

После успеха сервер убирал COMPRESS и STARTTLS из списка возможностей. Клиент не мог запросить второе сжатие или поздний TLS, который мог бы добавить компрессию своего уровня. Корректный по синтаксису запрос получал 502. MODE READER тоже становился недоступен.

Для выключения клиент выполнял QUIT и создавал новое соединение. Команды UNCOMPRESS не существовало. Новый сеанс возвращал обе стороны к одному доказуемому начальному состоянию; локальное переключение одной стороны разрушило бы смысл каждого следующего байта.

RFC 3977 допускает изменение CAPABILITIES внутри сеанса. RFC 8054 отдельно запрещает полагаться на сохранённый результат прошлой сессии, потому что компрессия способна ослабить шифрование. Возможность — наблюдение сейчас, а не вечная характеристика сервера.

Пароль не мог идти вслед за словарём

Компрессор помнит совпадения открытого текста. Шифрование скрывает сами символы, однако внешний наблюдатель может видеть длину результата. Если атакующий управляет известной частью входа, изменение длины при совпадении с секретом способно дать сигнал. RFC приводит CRIME и BREACH как примеры такого класса.

Учётные данные можно было не подвергать этому риску. После успешного COMPRESS неаутентифицированный клиент не должен использовать AUTHINFO. Сервер либо не показывал возможность, либо показывал её без пригодных аргументов и отвергал команду кодом 502.

RFC 4643 определяет аутентификацию NNTP. Сжатие не подтверждает субъект и не даёт разрешений. Запрет лишь не позволяет поздно поместить пароль в историю, чья длина выйдет в сеть.

Сначала канал, затем субъект, потом представление

Если нужны все три свойства, RFC 8054 требует STARTTLS, AUTHINFO, COMPRESS. Переход по RFC 4642 сначала защищает транспорт. Затем сервер принимает учётную личность. После этого стороны решают, допустима ли память компрессии для оставшихся данных.

Полномочия не объединяются. TLS не создаёт права аккаунта. AUTHINFO не шифрует канал. COMPRESS не делает ни того, ни другого. Последовательность организует отдельные доказательства и ограничения.

На отправке данные сначала сжимались, затем проходили через имеющийся слой безопасности SASL и наконец через TLS. Получатель снимал слои в обратном порядке. Компрессор видел шаблоны до того, как шифр делал их неразличимыми.

Граница словаря стала границей данных

Известные публичные статьи и конфиденциальные материалы не следует сжимать в одной истории под активным защитным слоем. Управляемая атакующим публичная строка может служить щупом для длины тайного текста.

Разные конфиденциальные статьи тоже предпочтительно разделять, если это возможно. Очистка словаря DEFLATE — одна из предложенных мер. Она не меняет ключ и не отзывает доступ, а ограничивает прошлые данные, способные повлиять на будущий размер.

Стандарт не объявляет всякое сочетание компрессии и шифрования небезопасным. Он требует не включать его автоматически без осознанного решения пользователя. Риск зависит от секретов, управляемого ввода и изоляции состояния.

Повреждение лишало поток продолжения

Всё переданное компрессору должно попасть в выход и быть достаточно flushed, чтобы получатель мог полностью восстановить данные. Отправитель вправе менять уровень вокруг плохо сжимаемого вложения, но не оставлять интерактивный ответ скрытым в буфере.

При неверных или повреждённых сжатых данных принимающая сторона немедленно закрывала соединение. Она не искала следующий похожий на NNTP перевод строки. После расхождения словарей правдоподобный синтаксис не доказывает общую историю.

Закрытие создавало возможность начать заново с известной границы. Протокол предпочитал потерять сеанс, а не приписать смысл байтам, состояние которых уже нельзя подтвердить.

Экономия зависела от ответственного порядка

Реестр параметров NNTP IANA регистрирует COMPRESS и DEFLATE. Он даёт общие имена и ссылки, но не подтверждает внедрение, коэффициент или безопасность конкретного сервера.

Единый двусторонний слой устранил множество специальных команд и мог сократить повторения. Цена — успех, который меняет все оставшееся соединение и закрывает поздние решения.

Исторический механизм заключён не в обещании меньшего трафика. Компрессия с памятью меняет поверхность доверия. Поэтому канал и личность устанавливались раньше, а слой, способный связать тайну с наблюдаемой длиной, приходил последним.

Источники