новости

аутентификация каналов между узлами и зеркало дескрипторов

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

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

каждый узел получает ростер

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

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

канал аутентифицирован до узла, к которому он ведёт

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

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

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

вход держит зеркало дескрипторов

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

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

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

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

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

дальше в плане прямая секретность слоёв цепочки и список узлов длиннее трёх.

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