новости

v0.2.0: серия измерена заново, а документы говорят только то, что делает код

второй релиз собирает аутентификацию узлов, аутентифицированные каналы, ротацию онион-ключа и случайную цепочку. его числа измерены заново на его собственном коде, а каждое утверждение документации сверено с этим кодом.

поправка от 2026-10-16: серия релиза v0.3.0 на ревизии 2078098 не показывает, что отправка узлами по своим часам доводит атаку до угадывания; она снижает её auc до медиан от 0.44 до 0.67, а пять прогонов на точку большего показать не могут. вывод об угадывании ниже снят; текущие числа на странице исследования.

второй релиз, v0.2.0, собирает то, о чём были три прошлые заметки: аутентификацию узлов, аутентифицированные каналы между узлами, ротацию онион-ключа и случайный выбор цепочки. в него вошли ещё две вещи, и обе о том, чтобы не говорить больше, чем есть на деле.

серия измерена заново

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

выводы прежние.

  • фоновый трафик поверх сообщений по-прежнему не помогает: auc атаки 1.000 при тройной полосе.
  • постоянная скорость только на клиенте по-прежнему не скрывает поток: auc 0.951 при периоде 70 мс.
  • отправка узлами по своим часам опускает атаку почти до угадывания: auc 0.523 при периоде 66.5 мс и окне 10 мс, цена это медиана круга 185 мс.

формулировка изменилась в одном месте. раньше страница говорила, что часы на узлах опускают атаку до угадывания. медианы лежат между 0.46 и 0.64, а 95% интервал отдельного прогона включает 0.5 в 34 случаях из 40. пять прогонов по десять потоков не отличают малую остаточную утечку от её отсутствия, поэтому теперь сказано “почти до угадывания”, а ответ даст полная серия по тридцать прогонов на точку.

документы говорят только то, что делает код

каждое утверждение readme и шести документов сверено с кодом, на обоих языках. исправлено 156 мест. части, которых ещё нет, помечены как план, а в таблице мер модели угроз появился столбец статуса.

что читателю стоит знать после этой сверки:

  • клиента-получателя и сквозного слоя пока нет. последний узел цепочки читает сообщение.
  • сообщение должно помещаться в одну ячейку, 444 байта на трёх хопах. более длинное отклоняется.
  • измерения используют одну базовую атаку пассивного наблюдателя, а серии идут в одном процессе на loopback, без сетевых задержек.
  • из программы экспериментов измерены связывание потоков и выбор цепочек. извлечение ключей из памяти, прямая секретность при украденных ключах, сценарии компрометации узлов и временная метка в потоке в плане.
  • от выгрузки в swap заблокированы только буферы ключей. копии, которые библиотеки держат на куче, не заблокированы.

всё это есть на странице границ.

дефект, который нашла сверка

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

теперь клиент отклоняет такое сообщение с ошибкой до постановки в очередь. вызвать дефект мог только сам пользователь клиента, не удалённая сторона. описание: GHSA-r8r8-v474-jxm9.

чего это не исправляет

  • пяти прогонов на точку по-прежнему мало, чтобы заявлять различия значимыми.
  • атака по-прежнему только базовая. моменты соединений, обучаемый коррелятор и активный нарушитель не измерены.
  • то, что сверка пометила как план, от пометки не появилось.

дальше в плане клиент-получатель со сквозным слоем и отрицаемая аутентификация между клиентами.

релиз лежит на github. полная таблица в readme, ограничения в границах применимости, а что каждый блок экспериментов измеряет сегодня, в экспериментах.