Вики ZooBC
Безопасность и архитектура

Пин релиза

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

Чем помогает пин

Spine-цепочка — якорь, которому узел доверяет в двух вещах: какой снимок состояния цепочки загрузить и какие ключи узлов принадлежат реестру (см. Снимки и быстрая синхронизация). У работающего узла, который месяцами следил за цепочкой, есть собственная история, по которой можно судить о spine-цепочке. У совершенно новой установки её нет. Ей нужно с чего-то начать, и злоумышленник, сумевший скормить ей целую поддельную spine-цепочку, например построенную на старых ключах узлов, давно покинувших реестр, мог бы направить её к поддельному состоянию.

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

Что такое пин

Файл называется spine-pin.txt и лежит рядом с базой данных узла. Он содержит одну строку: высоту spine-цепочки и 64-символьный шестнадцатеричный хеш spine-блока на этой высоте.

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

Что узел делает с ним

  • При запуске узел сравнивает собственный сохранённый spine-блок на закреплённой высоте с пином. Если хеши различаются, узел находится на ответвлённой или подделанной истории spine-цепочки и на ней не работает. По правилам, принятым для версии 0.5.8, он затем восстанавливается из сети.
  • Во время работы spine-блок, противоречащий пину, отклоняется при поступлении.
  • Когда spine-цепочки конкурируют, узел никогда не откатывает свою spine-цепочку ниже пина.
Порядок запуска: прочитать spine-pin.txt (одна строка: высота и 64-символьный хеш), сравнить с собственным spine-блоком на этой высоте; совпадает — запуск; отличается — отказ и восстановление из сети.
Порядок запуска: прочитать spine-pin.txt (одна строка: высота и 64-символьный хеш), сравнить с собственным spine-блоком на этой высоте; совпадает — запуск; отличается — отказ и восстановление из сети.

Как его используют релизы

Два правила определяют, как релизы несут пин:

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

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

Чем пин не является

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

Его место среди защит

Пин — одна из нескольких защит от атаки на длинную дистанцию (long-range), попытки переписать историю из далёкого прошлого. Работающие узлы защищены пределом отката в 720 блоков и нижней границей контрольных точек spine-цепочки (см. Финальность и откат); новые узлы — соподписями двух третей в spine-цепочке, собственной записью spine-цепочки о том, какие ключи вошли и вышли, и пином. См. От чего защищает Proof of Participation.

См. также