Double Signingとは何か?
Double Signingは、プルーフ・オブ・ステークネットワークで同じブロック高や同じラウンドに対して、バリデーターが矛盾する二つのメッセージに署名してしまうことです。例えば、同じ瞬間に二つの異なるブロックや投票が「正しい」と主張するような状況です。同時刻に二つのコンサートでチェックインして、それで警備が問題にしないだろうと期待するようなものです。
「Double Signingはダブルスペンドと同じだ」と言う人がいますが、同じではありません。ダブルスペンドは取引の不正行為ですが、Double Signingは同じスロットで矛盾するデータに署名する、バリデーターによる合意違反です。
Double Signingの仕組み
故意でも誤操作でも、どのように問題になるかを簡単に説明します。
- Step 1: バリデーターの鍵がオンラインになり、チェーンのメッセージに署名できる状態になります。
- Step 2: 運用者が同じ鍵で二台目のノードを起動するか、クライアントがフェイルオーバーを誤設定する。やってしまうことがあります。
- Step 3: 両方のノードが同じブロック高で、しかし異なるペイロードに対して署名を作成します。
- Step 4: 一時的なネットワークフォークがあると、それぞれの側が同じ鍵から異なる署名を受け取ることがあります。
- Step 5: ピアが対立を検出し、証拠を記録し、プロトコルが署名者を罰します。
単純な誤操作が、非常に重大な結果を招くことがあります。
Double Signingが重要な理由
ノードを運用しない人でも知っておくべき点:
- メリット: 存在を知っていれば、資金や評判を危険にさらす設定を避けられます。
- 視点: 多くのネットワークはスラッシングで対処します。なぜならその行為は合意への信頼を弱めるからです。
- 関連性: ステーキングのドキュメント、DAOの投票、バリデータのダッシュボードなどで言及されます。
鍵にはアクティブな署名者を一つだけにし、フェイルオーバーは慎重に扱ってください。アラートを設定し、セントリ設計や、同じ高さで二度署名しないリモートサイナーを導入してください。証拠はブロックチェーン上に残るため、隠れることはできません。
Double Signingの主な特徴
覚えておくべきポイント:
- 対立: 同じ鍵から同じブロック高や同じラウンドに対して、異なるデータに二つの署名が行われること。
- 罰則: 通常はステークの没収やバリデーションからの停止を引き起こします。
- 検知可能: 証拠は送信および保存されるため、不正を抑止します。
変種
チェーンによって呼び方は異なりますが、本質的には同じ種類の誤りです:
- Double vote: 同じブロック高で異なるブロックに対する二つの投票。
- Duplicate proposal: 一人の提案者が同一ラウンドで二つのブロックを提案すること。
- Cross fork signing: 一時的な分岐時に、同じ鍵が競合するブランチの両方で署名すること。
多くのDouble Signingは偶発的です。同じ鍵で二台のマシンを動かすだけで、たとえ数秒でも発生する可能性があります。
例
バリデーターがプライマリを停止せずにバックアップノードを起動し、両方が同じブロック高で署名すると、ネットワークは数分以内にDouble Signingを検出します。
豆知識
多くのクライアントには「ダブル署名防止」機能が組み込まれており、鍵が最後に署名した高さを追跡します。まるで偽IDの二度目を拒む小さな門番のような働きをします。
まとめ
簡潔に言うと: Double Signingは同時に二か所にいるふりをして罰を受けるような合意違反です。
