リリースピン
ZooBC のリリースはリリースピン(スパインピンとも呼ばれます)を同梱できます。これは スパインチェーンの 1 つのブロックを高さとハッシュで指定する、小さな公開ファイルです。起動時にノードは自分のスパインをピンと比較し、ピンと矛盾するスパインの上で動くことを拒否します。ピンはソフトウェア自体とともに届く信頼できるアンカーを 1 つインストールに与えるため、偽造されたスパインの履歴は、ノードがその上に何かを構築する前に拒否されます。
ピンが役立つ理由
スパインは、ノードが 2 つのことについて信頼するアンカーです。チェーンの状態のどのスナップショットを読み込むかと、どのノード鍵がレジストリに属するかです(スナップショットとファストシンク を参照)。何か月もチェーンを追跡してきた稼働中のノードは、スパインを判断するための自分自身の履歴を持っています。まったく新しいインストールにはそれがありません。どこかから始めなければならず、偽造されたスパイン全体、たとえばずっと前にレジストリを離れたノードの古い鍵で作られたスパインを与えることのできる攻撃者は、そのノードを偽造された状態へ誘導できてしまいます。
ピンはその隙間を塞ぎます。ピンは運用者がインストールするリリースの一部なので、新しいノードはどのピアと通信するよりも前に、少なくとも 1 つの本物のスパインブロックを知っています。そのブロックをそのまま含まないスパインの履歴は、すべて拒否されます。
ピンの中身
ファイルは spine-pin.txt という名前で、ノードのデータベースの横に置かれます。中身は 1 行で、スパインの高さと、その高さにあるスパインブロックの 64 文字の 16 進ハッシュです。
秘密の情報は何もありません。誰でも自分のノードのスパインと比較できる公開されたハッシュです。ファイルがなければピンもなく、スパインの他の防御が通常どおり適用されます。
ノードがピンで行うこと
- 起動時に、ノードはピンの高さにある自分が保存したスパインブロックをピンと比較します。ハッシュが異なれば、ノードは分岐した、あるいは改ざんされたスパインの履歴の上にいるので、その上では動きません。バージョン 0.5.8 で決定されたルールのもとでは、その後ネットワークから自身を再構築します。
- 稼働中は、ピンと矛盾するスパインブロックが届くと拒否されます。
- スパインが競合するときは、ノードが自分のスパインをピンより下にロールバックすることは決してありません。
リリースでの使い方
リリースがピンをどう運ぶかは、2 つのルールで決まっています。
- リリースに記載されたピンを取得できない場合、インストーラーは停止します。
- 後のリリースはそれぞれ最近のスパインブロックをピン留めするため、アンカーはチェーンとともに前へ進みます。
リリース自体は別の仕組みで守られています。リリース権限者は各リリースをそのマニフェストのハッシュとともにチェーンに登録し、インストーラーはリリースの署名とマニフェストハッシュをチェーンと照合し、席の 3 分の 2 はリリースを拒否できます(リリースとアップデート と ダウンロードしたファイルの確認 を参照)。
ピンではないもの
- ノードを特定のピアに縛るものではありません。ノードは通常どおりピアから同期します。
- ノードのソフトウェアを固定するものではありません。アップデートは運用者が選んだとおりに続きます。
- 秘密鍵も公開鍵も、鍵は何も含みません。含まれるのはブロックの高さとブロックのハッシュだけです。
防御の中での位置付け
ピンは、ずっと過去から履歴を書き換えようとするロングレンジ攻撃に対するいくつかの防御の 1 つです。稼働中のノードは、720 ブロックのロールバック制限とスパインのチェックポイントの下限によって守られます(ファイナリティとロールバック を参照)。新しいノードは、スパインに対する 3 分の 2 の共同署名、どの鍵が加わりどの鍵が離れたかについてのスパイン自身の記録、そしてピンによって守られます。Proof of Participation が防ぐもの を参照してください。