новости

ротация онион-ключа и случайный выбор цепочки

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

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

узел меняет онион-ключ

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

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

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

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

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

клиент выбирает цепочку

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

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

каждый узел держит зеркало комплектов, которые у него есть. узел, комплекта которого нет, в зеркало не входит, а не лишает клиентов всего зеркала, и клиент принимает зеркало, в котором нет ограниченного числа узлов списка, по умолчанию одного. комплект, который в зеркале есть, но проверку не прошёл, означает отказ от цепочки.

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

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

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

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

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