новости

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

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

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

ключи узлов проверяются по якорю

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

сертификаты выдаёт jimichi enroll вне кластера. ключ уц создаётся на одну выдачу и сразу освобождается. узел создаёт ключ подписи в памяти при старте, ключ не покидает процесс, а сертификат устанавливается один раз на процесс узла.

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

служебная ячейка установки открывается один раз

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

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

counter строго подряд и свой на каждом канале

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

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

ограничения узла

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

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

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

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

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