
«dap-18» это не dap-18: номер версии протокола не фиксирует формат на проводе
Delnor 2 минуты назад «dap-18» это не dap-18: номер версии протокола не фиксирует формат на проводе Средний 7 мин 0 Go * Криптография * Информационная безопасность * Сетевые технологии * Open source * Кейс В свободное...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Вот важная новость с фронта ИИ: Delnor 2 минуты назад «dap-18» это не dap-18: номер версии протокола не фиксирует формат на проводе Средний 7 мин 0 Go * Криптография * Информационная безопасность * Сетевые технологии * Open source * Кейс В свободное время пишу на чистом Go порт DAP. DAP, Distributed Aggregation Protocol - это протокол распределённой агрегации для приватных измерений, из IETF, рабочая группа PPM (Privacy Preserving Measurement). Идея простая: собрать статистику по куче пользователей так, чтобы ни один сервер по дороге не увидел ни одного отдельного значения.
Реализаций DAP несколько (daphne у Cloudflare, divviup-ts), а я целюсь в Janus на Rust, реализацию ISRG - тех же людей, что делают Let’s Encrypt. Взял его потому, что за ним стоит их продакшен-сервис Divvi Up, и на проводе мне надо совпасть именно с ним. Я переписываю протокол на Go с нуля, потому что мне нужна сборка под мобилку и WASM без CGO, а pure-Go узел собирается куда угодно.
Технические детали
И главный тест для такого порта ровно один: интероп с Janus. Мой узел должен говорить с ним по проводу и быть от родного неотличим. Эта статья про один баг совместимости, который меня озадачил.
Обе стороны честно объявляют версию протокола «dap-18», а байты на проводе не сходятся. Это не туториал по крипте и не показ репозитория: репозиторий тут декорация. История про то, что строка версии - это не контракт совместимости, и про то, как это чинить, когда наткнулся.
У меня был готовый узел, написанный по структурам опубликованного черновика draft-ietf-ppm-dap-18. Я поднял рядом Janus и попробовал прогнать через них простейший сценарий агрегации. Обе стороны договорились о версии: и там, и там в коде зашито "dap-18".
Отраслевые последствия
А дальше HPKE-открытие на моей стороне упало на проверке auth-тега, и разбор запроса лёг на неизвестном поле. Две реализации, обе называют формат «dap-18», и обе не могут прочитать байты друг друга. Разбор этой истории занял у меня пару вечеров.
Но сначала стоит объяснить, зачем вообще такой протокол существует - без этого расхождение читается как скучный баг сериализации, а оно интереснее. Зачем нужна приватная агрегацияПредставьте, что вы хотите знать, сколько пользователей вашего браузера включили какую-то фичу. Обычная телеметрия решает это в лоб: каждый клиент шлёт «я такой-то, фичу включил», сервер считает.
Проблема в том, что теперь у сервера лежит база «кто что включил», и она опасна ровно для тех людей, которых инструмент должен защищать. Достаточно утечки базы или смены владельца компании - и агрегат, который вам был нужен, превращается в досье. Приватная агрегация ломает эту связку.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.




