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, ограничения в границах применимости, а что каждый блок экспериментов измеряет сегодня, в экспериментах.