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