ブロックチェーン/レベル X · 一周して/10.2 レシピ/レッスン 6
ステップ6:自分のノード
チェックサム、インデックス、そして拒否を示すマシン
用意するものプルーニングされたノードには約20GBの空き容量、フルノードには1TBの空き容量が必要なコンピュータダウンロードしたファイルの開発者署名を検証するためにインストールされるGPGソフトウェアFulcrumやelectrsのような、ローカルでElectrumに対応したインデックサー
問い
- ユーザーは、自分がダウンロードしたソフトウェアがマン・イン・ザ・ミドルや不正なリポジトリによって改ざんされていないことをどのように確認できるのでしょうか?
- バランスチェックのためにパブリックサーバーに接続することが、なぜ第三者に自分の財務状況を明かすことに等しいのか、そしてローカルインデクサーはこれをどのように解決しているのか。
- リモートの権限者を通じてトランザクションを検証することと、チェーン上でその規則を独自に確認することの違いは何ですか?
探究
- Bitcoin Core(レッスン3.1.5)は、創世ブロックから最新のブロックまでをすべて検証し、各ブロックがコンセンサスルールを満たしていることを確認します。どのバージョンを実行するにも、ユーザーはSHA256SUMSおよびSHA256SUMS.ascファイルを使って完全性を検証しなければなりません。これらのファイルには、複数の独立した開発者によって署名された暗号化ハッシュが含まれています。GPG公開鍵をインポートし、その署名を検証することで、ユーザーはそのバイナリが信頼できる開発者が公開したものと一致していることを確認でき、キーを盗んだりデータを破損させたりする可能性のある改ざんされたコードの実行を防ぐことができます。
- 初期ブロックダウンロード(IBD)では、600GBを超える全チェーンが取得・チェックされ、ハードウェアや接続環境によって数時間から数日かかります。フルノードはその履歴をディスク上に保持します。プルーニングノードは各ブロックを検証しながらも最新のもののみを保持します(最小設定はprune=550、単位はMiB)。UTXOセットを使用すれば、ディスク容量はおよそ10~20GBで済みます。どちらのタイプも独立してコンセンサスルールを適用するため、ユーザーは無効なトランザクションが自身のメモプールに入る前にそれを拒否することができます。
- ソフトウェアウォレットは、残高情報を取得したり取引を送信したりするために通常、遠隔サーバーに接続します。これにより、ウォレットのアドレスや残高がそのサーバー運営者に開示されてしまいます。プライバシーを守るために、ユーザーはBitcoin Coreと併せてFulcrumやelectrsなどのローカル版Electrumサーバーを動かすことができます。これらのインデックサーは標準的なウォレットと互換性のあるAPIを提供しますが、ユーザーのマシン上でローカルに動作します。ウォレットをこのローカルインスタンスに接続することで、アドレス履歴や残高データがユーザーのネットワーク外に漏れ出すことはありません。
- 直接RPC接続とは、中間サーバーを完全に介さずにウォレットをBitcoin Coreに統合する別の方法です。このアプローチにより、上級ユーザーは自分自身のノード上で直接トランザクションの構築や手数料の計算をカスタマイズすることができます。RPCを使用する場合でもElectrum互換のインデックサーを使用する場合でも、重要な点はデータソースがユーザー自身のものであるということです。ノードは何かを署名する前に、ローカルでUTXOセットをチェックし、資金が未使用でありプロトコル規則に従って有効であることを確認します。
- ノードを運用することで、信頼は中央集権的な仲介者から数学的検証へと移行します。ローカルノードはユーザー自身のトランザクションもブロードキャストするため、どのウォレットサーバーもそれらをこっそり拒否したり記録しなかったりすることはできません。その代償としてハードウェアコストやメンテナンスの責任が生じ、ユーザーはソフトウェアの更新、ディスク容量の拡張、サーバーの稼働維持を自ら行わなければなりません。しかし、この自律性によって、取引所やウォレットプロバイダ、サーバーオペレータといったどの単一の組織が故障しても、資金へのアクセスや管理権を失うことはありません。
- 設定を確認してください。Bitcoin Coreでgetblockchaininfoを実行し、ブロック数がパブリックエクスプローラー上の現在のハイートと一致しているか、またinitialblockdownloadの値がfalseであることを確認してください。さらに、getbestblockhashの値をエクスプローラー上の最新ブロックのハッシュと比較してください。ウォレットのサーバー設定では、パブリックなサーバーではなく、自分自身のノードまたはElectrumサーバーを指定していることを確認してください。パブリックサーバーをオフにした状態でも残高が正しく表示される場合、ウォレットは自分のノードからデータを読み取っていることになります。
重要な事実
- SHA256SUMS.ascファイルは、Bitcoin Coreバイナリの完全性を検証するために、複数の独立したビルダーによって署名されます。
- プルーニングされたノードはすべてのブロックを検証しますが、最近のもののみを保持し、約10~20GBの容量に収まります。
- Fulcrumやelectrsのようなローカルインデックサーを動作させることで、ウォレットアドレスや残高が第三者のサーバーに漏洩するのを防ぐことができます。
- 初期のブロックダウンロードでは600GBを超えるブロックがチェックされ、数時間から数日かかります。
- 直接のRPC接続により、ウォレットは中間のサーバー層を経由することなくBitcoin Coreと通信できます。
- ローカルノードは、コンセンサスルールに基づいてトランザクションを独立して検証し、ブロードキャストする前に無効なデータを拒否します。
演習 九・六・三・一
9集める個人用のビットコインフルノード環境を構築し、検証する際に必要な9つの異なる要素や手順をリストアップしてください。
6まとめる9つの項目を、ソース検証、ストレージ管理、ネットワーク同期、プライバシー保護、ソフトウェア統合、メンテナンスという機能に基づいて6つのカテゴリーに分類してください。
3絞り込む6つのグループを、パブリックサービスに依存するよりもローカルノードを運用する方がセキュリティ上の利点をもたらす3つの核心的な理由に絞り込んでください。
1結晶化する自己検証における計算コストとストレージコストと、第三者への信頼依存性を排除することとの間のトレードオフについて1文で述べなさい。
事実確認
日付、数字、主張は、下記に記載された公表資料と照合して確認しました。