исследование
защитить содержимое проще всего. эта работа измеряет, что ещё может узнать наблюдатель, который видит только моменты и объёмы, и во что обходится это отнять.
- потоков
- 10
- узлов
- 3
- набор
- c25519
- прогонов на конфигурацию
- 5 x 30 с
- статистика
- медиана
наблюдатель видит только моменты пересечения кадров.
он смотрит на входной канал и последний канал между узлами, считает кадры в окнах времени для каждого потока и коррелирует каждый входной поток с каждым выходным. окно выбирает наблюдатель, поэтому считаются оба, 10 и 100 мс. угадывание это auc 0.5 и точность top-1 10%.

| защита | полоса между узлами | медиана круга | auc, 10 мс | auc, 100 мс | top-1, 10 мс |
|---|---|---|---|---|---|
| нет | x1.00 | 0.146 мс | 1.000 | 1.000 | 100% |
| фон поверх, +2x | x2.99 | 0.131 мс | 1.000 | 1.000 | 100% |
| постоянная скорость клиента, 70 мс | x2.85 | 48 мс | 0.951 | 0.951 | 70% |
| постоянная скорость клиента, 35 мс | x5.69 | 20 мс | 0.962 | 0.937 | 70% |
| узлы по своим часам, 66.5 мс | x3.00 | 187 мс | 0.562 | 0.463 | 5% |
| узлы по своим часам, 33.25 мс | x6.00 | 88 мс | 0.554 | 0.487 | 15% |
| оба, клиент 70 мс, узлы 66.5 мс | x3.00 | 230 мс | 0.462 | 0.442 | 3% |
| оба, клиент 35 мс, узлы 33.25 мс | x5.99 | 108 мс | 0.673 | 0.472 | 20% |
что показывает серия.
фон поверх не помогает.
фоновый трафик поверх сообщений не помогает вообще: даже при тройной полосе связывается каждый поток.
постоянная скорость клиента не скрывает поток.
каждый клиент тикает со своей фазой, и фаза проходит через цепочку узлов, пересылающих сразу. при окне 10 мс атака связывает потоки на любом периоде: медианы auc лежат между 0.93 и 0.99. при окне 100 мс auc падает до 0.50-0.55 только там, где период делит окно, на 25, 50 и 100 мс, а на остальных периодах держится на 0.77-0.95: при делящем периоде почти все оценки равны, и о защите это ничего не говорит.
часы на узлах ослабляют эту атаку.
атака считает только ячейки: моменты открытия и закрытия соединений цепочки совпадают вдоль неё и в атаку пока не входят. медианы auc лежат между 0.44 и 0.67 против 0.94-1.00 в остальных строках, но показать, что атака падает до угадывания, эти прогоны не могут: четыре медианы из восьми лежат вне 0.45-0.55, а такой вывод требует интервала эквивалентности внутри этой полосы, с величиной и допуском, заданными до серии; пять прогонов такого интервала не дают. 95% интервал отдельного прогона включает 0.5 в 33 случаях из 40; из остальных семи три лежат выше, четыре ниже. пять прогонов по десять потоков не отличают малую остаточную утечку от её отсутствия, это покажет полная серия. цена: постоянный поток на каждом канале, по которому шлёт узел, и около 2.7-2.8 периода узла к кругу: 187 мс при 66.5 мс, 88 мс при 33.25 мс. в строках с обеими мерами период узла на 5% короче клиентского, чтобы пропущенный тик наверстать; строки только с часами узлов берут те же периоды узла при клиенте, который шлёт сразу.
входной узел не моделируется.
наблюдатель смотрит на два канала и не моделирует входной узел, который видит ячейки клиента напрямую. скрывает ли от него постоянная скорость клиента моменты отправки, не измеряется.

что измерено и что в плане.
- ключевой материал
- измерено: точные непрерывные 32-байтовые вхождения на выбранный ключ ячейки клиента в экспортированных данных объектов go. для active/closed-now/closed-1s: c25519 none 3/3/3 и all 2/2/2; гост none 3/3/3 и all 1/0/0. каждый ключ в каждом процессе дал указанное число. на условие запланированы и оценены 30 новых процессов; оценены все 360, исключений нет. ревизия eddddb2, оптимизированный go 1.27.3, linux/amd64. c25519 all наблюдался после close; нули гост стирания не доказывают. внешнее получение памяти, диск/swap/история и другие секреты остаются неизмеренными за v0.4.0.
- прямая секретность
- модульные тесты проверяют, что служебная ячейка установки перестаёт открываться, когда узел освобождает онион-ключ, под который она собрана. открытие записанных соседом ячеек ключами из памяти узла в зависимости от возраста записи остаётся неизмеренным и отложено за v0.4.0. кооперативный эксперимент клиента не расшифровывает записанный трафик.
- метаданные
- атака корреляции трафика связывает потоки на входном канале с потоками на последнем канале между узлами только по моментам и числу ячеек. auc, точность top-1 и tpr при fpr 0.01 считаются против интенсивности фона, постоянной скорости клиента и отправки узлами по своим часам. уровни задержки на узле, классы размеров сообщений и топология разговора, два входа и mailbox, в плане.
- временная метка
- историческая серия c25519 f0f1885, оптимизированный go 1.27.3: 960 завершённых запусков в 40 блоках повторов. верное указание цели с отзывчивостью исходной цепочки: 40/40 без часов узлов в каждом режиме клиента и 0/40 на каждом проверенном положительном периоде. при 25, 47.5, 50 и 52.5 мс цель отзывчива в 40/40 каждого активного/sham условия; при 75 мс все шесть цепочек закрылись в каждом из 160 запусков, это потеря доступности. сохранены семь неверных активных указаний и семь указаний sham; immediate без часов дал sham 4/40. каждый знаменатель относится к своему режиму, периоду и воздействию. у пассивной таблицы отдельная ревизия.
- частичная компрометация
- как часто случайная цепочка встречает подставные узлы, посчитано и измерено выбором самого клиента. знание узла о маршруте выведено из протокола, тест lab с настоящими узлами проверяет границу доверия. оставшиеся полные измерения того, что видят и связывают узлы, обязательны для v0.4.0, проектируются и не реализованы.
- цена
- круговая задержка через цепочку, множитель полосы от фона и заполнения и бенчмарки согласования ключа, подписи и шифрования ячейки, гост против x25519. пропускная способность узла, полезная скорость на клиента и вклад блокировки памяти в плане.