личность узла привязана к ключам, два исправления зеркала опубликованы
при аутентификации узлов личность узла теперь входит в ключи его установки и его каналов, клиент проверяет каждый комплект зеркала отдельно, а два бюллетеня безопасности о зеркале дескрипторов закрыты и опубликованы.
в основную ветку вошли два изменения того, как клиент получает ключи узлов и как им доверяет. на проводе не изменилось ни байта, а числа на странице исследования те же, это прежняя предварительная серия.
личность узла входит в его ключи
прошлое изменение привязало каждый ключ к транскрипту его обмена, но привязывало оно ключи, а не личность узла. теперь при аутентификации узлов транскрипт установки каждого хопа и транскрипт каждого аутентифицированного канала содержат ещё и ключ личности узла, то есть ключ подписи, который заверяет его сертификат. слой установки и канал открываются только у узла, который держит закрытый ключ и привязывает эту личность. узел, скопировавший в свой дескриптор чужой онион-ключ или ключ канала, ничего этим не получает.
версия схемы становится v2. согласования версий нет: прежние узлы и клиенты с новыми не работают и обновляются вместе. узел с аутентификацией узлов и клиент или узел без неё тоже не согласуют ни одного ключа.
клиент проверяет каждый комплект отдельно
клиент просит у входа подписанные комплекты всех узлов своего списка. раньше он проверял их одним
набором и отвергал всё зеркало, если не проходил проверку один комплект или у двух узлов совпадал
ключ. теперь он проверяет каждый комплект отдельно: комплект узла списка, не прошедший проверку,
считается узлом, которого вход не включил, в пределах того же допуска (-missing, по умолчанию
один), а комплект самого входа должен пройти проверку. комплекты разных узлов больше не
сравниваются между собой: после привязки личности совпавший ключ ничего не даёт.
узел теперь включает комплект соседа в зеркало только с его начала по часам узла и до запаса перед истечением, равного допуску часов плюс время, которое может занять запрос. вне этого окна сосед считается узлом, которого вход не включил. у срока дескриптора появилась нижняя граница, поэтому сосед, вовремя подписывающий дескриптор заново, остаётся во всех зеркалах, пока часы расходятся в пределах допуска.
два бюллетеня, закрыты и опубликованы
- GHSA-pwfj-76v6-hcch, средняя опасность: подставной узел ростера, повторивший в своём дескрипторе онион-ключ другого узла, заставлял клиентов отвергать каждое честное зеркало, и клиент перебирал входы, пока не входил через этот узел. закрыт привязкой личности и проверкой каждого комплекта отдельно. найден при чтении кода, на стенде не воспроизводился.
- GHSA-5fcf-5qcm-q8vq, низкая опасность: дескриптор на краю своего срока заставлял клиента, чьи часы немного спешат, отвергать честное зеркало. при одинаковых часах, как на стенде на одной машине, окно было закрыто. закрыт запасом зеркала.
что ещё вошло
- клиент прекращает отправку, как только кончается его канал, а кадр от входа, который не открывается, закрывает цепочку как отдельный класс отказа.
- тесты памяти ключей в ci на linux падают, если не могут заблокировать страницы или прочитать их флаги, а не пропускаются.
- неудачная ротация онион-ключа пишется в журнал постоянным классом, без текста исходной ошибки.
как это проверено
- золотые векторы на обоих наборах, с ключом личности и без него.
- тесты на обоих наборах: слой установки и канал, привязанные к одному узлу, не открываются у другого узла с тем же ключом, как и при личности только с одной стороны; цепочка доставляет только через узлы, которые привязывают названные для них личности.
- тесты клиента: не прошедший проверку комплект узла списка считается не включённым в пределах допуска, а не прошедший проверку или отсутствующий комплект входа даёт отказ от зеркала.
- изменения развёрнуты в кластере стенда, все узлы перекатаны вместе: сообщения проходят туда и обратно, клиент с чужим якорем отвергнут.
чего это не исправляет
- адрес узла и хэш его сертификата в транскрипты не входят, а без аутентификации узлов привязаны одни ключи.
- подставной вход по-прежнему может не включить узел в зеркало в пределах допуска, а узел по-прежнему может показывать разным узлам разные онион-ключи и так узнавать, чьим зеркалом пользовался клиент.
- ответчик канала по-прежнему не аутентифицирует инициатора.
полный список на странице границ и в границах применимости, транскрипты в документе о криптографии, угрозы и меры в модели угроз.