Кратко

  • DNS Cookies добавляет к DNS по UDP лёгкий сигнал без индивидуального состояния на сервере. Валидный Server Cookie слабо связывает прежний обмен с Client Cookie и IP; он не идентифицирует человека, не аутентифицирует DNS-данные, не шифрует запрос и не защищает от on-path-наблюдателя.
  • RFC 9018 задаёт interoperable version 1: 16-байтный Server Cookie, SipHash-2-4, timestamp и настраиваемый secret. В anycast распределение и ротация секрета сами становятся поверхностью полномочий.
  • Доказательство связывает raw bytes, причину проверки, узел, эпоху, BADCOOKIE, ослабленную защиту, размер ответа и исход retry. Поле valid — лишь вывод.

Ошибка в словах «известный клиент»

Авторитетный anycast-сервис получает шквал UDP-запросов к крупному подписанному ответу. Первые обращения он ограничивает, чтобы пакеты с поддельным источником не превратили его в усилитель. Resolver возвращается со своим Client Cookie и Server Cookie, выданным сервисом ранее. Проверка проходит, policy разрешает более полный ответ.

Dashboard пишет «клиент известен». Но один CGNAT-адрес вскоре может представлять другого абонента. Наблюдатель на пути может скопировать option. Один anycast-узел может принимать старую эпоху, уже удалённую остальными. Валидность bytes не доказывает постоянство субъекта.

Правильный вопрос уже: получал ли кто-то, способный принимать на видимом адресе, недавнее значение сервера для этого Client Cookie? Не кто он, исправен ли resolver и разрешён ли запрос. Validator поставляет факт; rate limiter и response policy решают, какую власть ему дать.

Два cookie с разной работой

IANA присваивает COOKIE код EDNS option 10. При первом контакте RFC 7873 несёт только восьмибайтный Client Cookie. Сервер возвращает его и добавляет Server Cookie. Следующий запрос переносит оба, позволяя проверять без таблицы на каждого клиента.

Client Cookie — не удостоверение. RFC 9018 рекомендует 64 бита entropy, отдельное значение на каждый server IP, замену при смене client IP и отсутствие переживания restart. Сервер не извлекает из него имя или account.

Server Cookie version 1 имеет 16 байт, полная option — ровно 24. SipHash-2-4 принимает Client Cookie, version, reserved, timestamp и client IP под Server Secret. Off-path-атакующий не получает первый ответ и не может легко создать свежий MAC.

Stateless design экономит память под атакой, но переносит риск в secret, clock и точный parser. Допуск неясной длины, временной drift или слишком широкая раздача ключа меняет assurance, хотя индикатор enabled остаётся зелёным.

Слабый сигнал покупает только малую привилегию

Валидное значение помогает отличить реальный повторный источник от flood с простой подделкой IP. Это может оправдать несколько дополнительных bytes или временно больший rate. Не больше.

On-path actor видит и повторяет cookie. DNS Cookies не подписывает RRset и не даёт confidentiality. DNSSEC, transaction entropy и защищённый transport отвечают на другие вопросы. Скомпрометированный resolver может иметь безупречные cookies.

Поэтому сигнал изменяет только защиту от off-path forgery. Он не открывает recursion, не обходит ACL, не отменяет DNSSEC, не снимает общий capacity ceiling и не пересиливает incident block. Криптографическая корректность не равна добросовестности.

IP также не человек. NAT объединяет, mobility перемещает, lease переназначается. Привязка к адресу полезна в threat model, но не создаёт социальную идентичность.

Anycast превращает совместимость в custody

Последовательные запросы к одному anycast IP могут попасть на разные машины. Второй узел должен проверить значение первого. RFC 9018 стандартизирует construction и требует настраиваемый Server Secret.

Ротация трёхступенчата. Сначала все учат новый secret, генерируют старым и проверяют оба. Затем генерируют новым и продолжают принимать старый. Наконец, после окна обновления клиентов старый удаляется. Ранняя генерация создаёт географический BADCOOKIE; раннее удаление превращает реальных клиентов в новых; вечное принятие расширяет exposure.

«Конфигурация доставлена» не доказывает runtime convergence. Каждый узел должен показывать несекретный epoch ID, learned/generating/accepting и здоровье часов. Один ключ охватывает только минимальный набор, которому нужна совместимость, а не независимые среды и клиенты.

BADCOOKIE не устанавливает виновника

Invalid может означать expiry, смену IP или Client Cookie, неизвестную эпоху, malformed option либо spoofing. BADCOOKIE выдаёт новое значение и разрешает ограниченный retry при совпадении Client Cookie. Бесконечный цикл создаёт новую нагрузку.

Распределение важнее суммы. Один site с ошибками указывает на epoch drift; mobile network — на NAT; illegal length повсюду — на parser abuse. Сохранять точную категорию до вывода о намерении.

Измерять first contact, valid, expired, malformed, unknown epoch, BADCOOKIE, successful retry, abandonment и TCP fallback. Защита, которая блокирует forge и ломает легитимное разрешение, не успешна.

Координация общая, исполнение локальное

В Minimum Initial Specification Хэна Лу общими остаются codepoint, length, algorithm, time и recovery. Response budget, DDoS policy, key custody и timing внедрения локальны.

Localized Future Decision позволяет при перегрузке не давать привилегию даже valid cookie и работать с сервером без option. Voluntary Adoption требует реальных пакетов: IANA registry — символ; option — protocol state; ветвь увеличения ответа — executable power; отправленные bytes — consequence.

Running-code primacy требует доказать общие эпохи, проигрыш off-path, остаточный on-path risk и работоспособный fallback. Она не легитимизирует любое автоматическое действие.

Источники