ブロックチェーン学習 3

現在、ブロックチェーンをクライアントとして検証するには、フル ノードと SPV クライアントという 2 つの主な方法があります。

フルノード

最初の最も安全なモデルは、ジェネシス ブロックから最後に発見されたブロックに至るまでのブロックをダウンロードして検証することで、ブロックチェーンの有効性を保証することです。

クライアントを欺くために、攻撃者は完全な代替ブロックチェーン履歴を提供する必要がありますが、これは現在の「本物の」チェーンよりも難しく、計算コストが高くなります。これは、ほとんどの良好なノードが本物のチェーンを計算するためです。最も累積的なプルーフ・オブ・ワークは、定義上、「本物の」チェーンです。6 回の確認後にフルノードを騙す能力は、チェーンの最後に新しいブロックを生成するために必要な計算の難しさのため、法外なコストがかかります。この形式の検証は Sybil 攻撃に対して非常に耐性があります。「実際の」ブロックチェーンの完全な状態を受信して​​検証するには、1 つの正直なノードだけが必要です。

ここに画像の説明を挿入

簡易支払検証 (SPV)

元の Bitcoin 論文で詳しく説明されているもう 1 つのアプローチでは、クライアントは初期同期中にブロック ヘッダーのみをダウンロードし、必要に応じてフル ノードからトランザクションを要求します。これは、ブロックチェーンの高さに比例して増加し、ブロックの合計サイズには関係なく、ブロック ヘッダーあたりわずか 80 バイト、つまり年間約 4.2 MB になります。

ホワイトペーパーで説明されているように、ブロック ヘッダーのマークル ルートとマークル ブランチは、関連するトランザクションがブロックチェーンのブロックに埋め込まれていることを SPV クライアントに証明できます。これは、埋め込みトランザクションの正当性を保証するものではありません。代わりに、二重支出攻撃を実行するために必要な作業量を示しています。

ブロックチェーン内のブロックの深さは、その特定のブロックの上にブランチを構築する際の累積的な難易度に対応します。SPV クライアントはマークル ルートと関連トランザクション情報を知っており、フル ノードから対応するマークル ブランチを要求します。マークル ブランチが取得され、ブロック内にトランザクションが存在することが証明されると、SPV クライアントはトランザクションの有効性とセキュリティの証明指標としてブロックの深さを使用できます。悪意のあるノードのみがこの偽のチェーンをマイニングするため、無効なトランザクションを挿入する悪意のあるノードによるユーザーへの攻撃のコストは、ブロックの深さに応じて増加します。

SPV の潜在的な弱点

まず、SPV クライアントは、トランザクションがブロック内にあると簡単に思い込ませることはできませんが、その逆はあり得ません。フルノードは単に不作為によって嘘をつき、SPV クライアントにトランザクションが発生していないと信じ込ませる可能性があります。これはサービス拒否の一形態とみなされる可能性があります。緩和戦略の 1 つは、複数のフル ノードに接続し、各ノードにリクエストを送信することです。ただし、ID は基本的に無料であり、帯域幅を大量に消費する可能性があるため、これはネットワーク分割または Sybil 攻撃によって解決できます。クライアントが正直なノードから切断されないように注意する必要があります。

第 2 に、SPV クライアントは、所有するキーに対応するフル ノードからのトランザクションのみを要求します。SPV クライアントがすべてのチャンクをダウンロードし、不要なチャンクを破棄すると、大量の帯域幅が消費される可能性があります。これにより、ユーザーが特定のトランザクションでブロックをフル ノードに要求するだけであれば、フル ノードはそのユーザーに対応するパブリック アドレスの完全なビューを持つことができます。これは重大なプライバシー侵害です

後者の問題を軽減するために、ブルーム フィルターを使用してデータ リクエストの難読化を解除し、圧縮しました。

ブルームフィルター

ブルーム フィルターは、要素がセット内にあるかどうかをテストするために使用される、スペース効率の高い確率的データ構造です。このデータ構造は、規定の誤検知率を犠牲にして優れたデータ圧縮を実現します。

ブルーム フィルターは、すべて 0 に設定された n ビットの配列から始まります。それぞれが 1 から n までの整数を出力する k 個のランダム ハッシュ関数のセットを選択します。

要素がブルーム フィルターに追加されると、要素はそれぞれ k 回ハッシュされ、k 個の出力ごとに、そのインデックスにある対応するブルーム フィルター ビットが 1 に設定されます。

ブルーム フィルターのクエリは、以前と同じハッシュ関数を使用して行われます。ブルーム フィルターでアクセスされたすべての k ビットが 1 に設定されている場合、これは、その要素がセット内にある可能性が高いことを示します。明らかに、ドメイン内の他の要素の組み合わせを追加することで k インデックスを 1 に設定できますが、このパラメーターを使用すると、ユーザーは許容可能な誤検知率を選択できます。

要素はブルームフィルターでのみ削除できます

ブルームフィルターの適用

誤検知率は、プライバシー レベルと帯域幅をトレードオフする調整可能なパラメータです。SPV クライアントはブルーム フィルターを作成し、それをメッセージとともにフル ノードに送信しますfilterload。これにより、トランザクションが必要なフィルターが設定されます。フルノードは変更されたマークルブロックを送信します。マークル ブロックは、ブルーム フィルター セットに関連付けられたマークル ブランチのみを含むブロック ヘッダーです。

SPV クライアントは、トランザクションを要素としてフィルターに追加するだけでなく、公開キー、署名スクリプトや公開キー スクリプトからのデータなども追加できます。これにより、P2SH トランザクションの検証が可能になります。

ユーザーがプライバシーをより重視する場合は、トランザクションを検証するための追加の帯域幅を犠牲にして、より多くの誤検知を含むようにブルーム フィルターを設定できます。ユーザーの帯域幅の予算が限られている場合は、どのトランザクションが顧客に関連付けられているかをフルノードが明確に理解できるようになるため、誤検知率を低く設定できます。

  • BitcoinJ、SPV セキュリティ モデルとブルーム フィルターに基づくビットコインの Java 実装。

  • BIP37

採掘

マイニングによりブロックチェーンに新しいブロックが追加されるため、トランザクション履歴の変更が困難になります。

今日のマイニングには 2 つの形式があります。

  • ソロマイニングでは、マイナーが自分で新しいブロックを生成しようとし、ブロック報酬と取引手数料の報酬は全額彼が所有するため、より高い差異(報酬間の長い時間)で多額の支払いを受け取ることができます。

  • プールマイニングでは、マイナーがブロックをより頻繁に見つけるために他のマイナーとリソースをプールします。報酬は、各マイナーが貢献するハッシュパワーにほぼ関連してプールマイナー間で共有され、マイナーは低い差異で少額の支払いを受け取ることができます(収益間の時間が短縮されます) )。

ここに画像の説明を挿入

プールされたマイニングでは、マイニング プールは、実際のネットワークの難易度よりも数桁低い目標しきい値を設定します。これにより、マイニング ハードウェアは多くのブロック ヘッダーを返し、これらの無駄なブロック ヘッダーはマイナーが動作するための認証情報として使用されます。有用なブロック ヘッダーがマイニングされると、マイナーはマイナーによって送信された
無駄なブロック ヘッダーの数に基づいて配当を支払います。
たとえば、マイニング プールのターゲットしきい値が 100 分の 1 より大きい場合、ネットワーク ターゲットしきい値が 100 分の 1 より低い場合、成功したブロックを作成するには平均 100 シェアを生成する必要があるため、マイニング プールは 1/100 を支払うことができますこの基本的なシェアシステムに基づいて、異なるマイニングプールが使用され、異なる報酬分配システムが使用されます。

おすすめ

転載: blog.csdn.net/qq_45256489/article/details/122708075