banner
leaf

leaf

It is better to manage the army than to manage the people. And the enemy.
follow
substack
tg_channel

P2Pネットワーク

P2P(ピアツーピア)ネットワークは、中央サーバーを持たず、ユーザーグループ(ピア)が情報を交換するインターネットシステム(図 2-1)であり、分散型ネットワークの一種です。一般的に、このネットワーク内の各ノードの地位は対等です。中央サーバーを持つ中央集権型ネットワーク C/S システム(クライアント - サーバー)(図 2-1)とは異なり、ピアツーピアネットワークの各ノードはクライアントでもあり、サーバーでもあります。ノード間は相互接続を通じて情報を交換し、各ノードは自らが持つリソース(ディスクストレージ、ネットワーク帯域幅、プロセッサ使用率など)を共有してサービスやコンテンツを提供します。したがって、新しいノードがネットワークに参加すると、全体のシステムの容量も増加します。

image

C/S ネットワークモデルと比較して、P2P ネットワークは特にファイル共有に適しています。C/S 構造では、リソースは中央サーバーに保存され、固定された帯域幅の下で、ダウンロードを要求するユーザーが多ければ多いほど、平均して各ユーザーのデータ転送速度は遅くなります。一方、P2P ネットワークでは、多くのノードが同じファイルのコピーを保存しており、誰かがそれをダウンロードしたい場合、複数のノードから同時にダウンロードできます。また、自分がダウンロードしたファイルを他のダウンロード中のノードに同時にアップロードすることもできるため、ネットワークが大きくなるほど速度が向上します。P2P ネットワークは、ファイルのソースノードの帯域幅だけでなく、ネットワーク内の他のピアノードの帯域幅も十分に活用します。

ファイル共有に関する成功により、P2P ネットワークは広く普及しましたが、大部分の共有ファイルがポピュラー音楽や映画であるため、著作権侵害の問題が P2P ネットワークを非難される原因となっています。** 典型的な P2P ネットワークでは、データは自由にコピーでき、コピーは自由に保存できます。しかし、資産は明らかに自由にコピーしたり、複数のコピーを持つことはできません。** 中本聡が作成したビットコインプロジェクトは、P2P ネットワークの「分散型」特性を保持し、P2P ネットワーク内での資産移転の問題を解決しました:資産は異なるアドレス間で流動し、単純に「コピー」されるのではなく、マイナーは取引情報の過程で資産の行き先を確認します。以下では、ビットコインの P2P ネットワークについて具体的に説明します。このモデルは、ブロックチェーン技術を使用して著作権保護などの問題を解決するためのインスピレーションを提供するかもしれません。

ビットコインにおける P2P ネットワーク#

ビットコインネットワークでは、各ノードはランダムに他のノードに接続でき、ノードはいつでもネットワークに参加したり離れたりできます。全体のネットワークのノード数は不確定です。各ノードが情報を更新する際、リアルタイムで一致しているわけではなく、一定の時間内に一致すればよいということです。つまり、一部のノードの退出やクラッシュは、全体のネットワークの麻痺を引き起こすことはありません。ユーザーの参加と退出は、全体のネットワークに大きな影響を与えることはありません。

ノード間の情報交換は、主に取引のブロードキャストによって実現されます。取引のブロードキャストは、フラッディング(洪水)方式で行われます。具体的には、ノードが取引を開始すると、その取引の情報をすべての隣接ノードに通知します。隣接ノードは、保存されている過去の取引情報に基づいて、その取引が実行可能かどうかを検証し、検証が通れば、その取引情報は次の隣接ノードに引き継がれます。取引情報は、波紋のようにノードの群れの中で拡散し、広がります。ノードが受信した取引情報がそのノードの取引プールの情報と重複する場合、つまりその情報が一度広がったことを示し、ブロードキャストは終了します。各取引にはユニークなハッシュ値があるため、ハッシュ値を使用して取引情報が重複しているかどうかを確認するのは非常に便利です。

注意すべきは、P2P ネットワークでは、帯域幅などの理由から、情報の伝達には遅延があることが多いということです。したがって、異なるノードの取引プールの内容はわずかに異なります。誰かが二重支払い攻撃を開始し、2 つの支払いが同じノードに到達した場合、誠実なノードは 1 つの取引のみを保持し、もう 1 つはブロードキャストしません。最終的に、ネットワーク内の異なるノードは短時間内に異なる取引の記録に関する意見の相違が存在する可能性がありますが、問題ありません。時間が経つにつれて、コンセンサスメカニズムは最終的に 1 つの取引のみが記録されることを保証し、二重支払い攻撃が成立しないようにします。

簡単に言えば、ビットコインプロジェクトは P2P ネットワーク内に現金支払いシステムを構築し、主に以下の要素に依存しています:ノード間の地位が対等であること;取引情報がノード間で洪水方式で伝播すること;ノードが取引が成立しているかどうかを確認すること;コンセンサスメカニズムによって合法的な取引情報が決定されること。

P2P ネットワークの限界とトレードオフ#

P2P ネットワークの利点は、フォールトトレランス、スケーラブルな転送速度、データの安全性などですが、ブロックチェーンプロジェクトでは、これは低い取引処理能力の代償となります。現在、盛況なパブリックチェーン競争の中で、多くのプロジェクトが取引処理能力を誇示しています(例えば、「毎秒 1 万件以上の取引を処理できる」と主張するなど)、これは既存のブロックチェーン技術が解決すべき問題であることを示しています。実際、ネットワークに追加されるノードが増えるにつれて、ノード間の情報伝達の遅延が徐々に蓄積され、情報が全ネットワークに伝播するのに必要な時間が長くなります。したがって、P2P ネットワークプロジェクトは、低い取引スループットと中央集権の間でトレードオフを行う必要があります。少数の「スーパー ノード」を設定して取引情報の検証を行うと、取引情報の処理効率が向上しますが、同時にネットワークが中央集権化されます。すべてのノードの地位が同じネットワークでは、すべてのノードが取引の検証を行うと、一定の重複作業とリソースの無駄が生じます。

ブロックチェーン技術は興奮を呼び起こし、その非中央集権的な特性と大いに関連しており、非中央集権は大部分が P2P ネットワークによって基礎付けられています。P2P ネットワークは非常にバランスの取れた構想ですが、一定のリソースを代償として支払う必要があります。バランスの取れたネットワークと作業効率の向上の間で、まだ取捨選択が必要です。効率的なピアツーピアネットワークを構築するには、通信技術のさらなる進歩が必要です。

ブロックチェーン技術は、第三者機関をシステムから排除し、人と人の間で直接取引を行える分散型台帳のアーキテクチャを提案します。ブロックチェーンの解決策は、すべてのユーザーが台帳を所有し、すべてのユーザーが記帳プロセスに参加することです。しかし、これにより 1 つの問題が生じます:すべてのユーザーが同じ台帳を持っていることをどのように保証しますか?台帳情報の一貫性をどのように保証しますか?

ブロックチェーンでは、取引情報は全ネットワークにブロードキャストされ、各ノードは取引情報を受信できます。したがって、** 台帳情報の一貫性の問題は、実際には「一意性」の問題に変わります。** 唯一の取引情報がフィルタリングを通過して保存されることを保証するルールを設計するだけで、各ユーザーが記録する情報が同じであることを保証できます。

「ブロック」と「チェーン」は、この一意性を実現するデータ構造です。ブロックは、一定の期間内の取引情報を保存し、実際には取引情報の封装です。ビットコインでは、1 つのブロックに約 3000 件の取引情報を保存できます。このブロックが確認されると、3000 件の取引が一緒に確認されます。取引情報を封装せずに、毎回取引を確認する場合は、高頻度の確認操作が必要で、効率が低下します。

各ブロックには前のブロックへのアドレス情報が含まれており、こうして環環相扣(環環相扣)し、最新のブロックから創世ブロックまでの「チェーン」を形成します。異なるコンセンサスメカニズムは、新しいブロックを生成するための異なるソリューションを提供します。時には、同じ時間内に 2 つ(またはそれ以上)の異なる内容のブロックが生成される可能性があり、これが「フォーク」です。異なるブロックはその後、新しいブロックを生成し、それぞれのチェーンを延長します。しかし、一般的に、チェーンの延長速度は異なります。ほとんどのブロックチェーンプロジェクトは「最長のチェーンを主チェーンとして選択する」というルールに従っており、このルールはフォークが発生しても、一定の時間後には常に 1 つのチェーンが「主チェーン」として認識されることを保証します。

image

最長のチェーンは唯一であるため、すべてのユーザーは同じチェーンをローカルデータベースに記録し、これにより台帳の一意性が保証され、台帳の一貫性の問題が解決されます。

さらに、チェーン構造はもう 1 つの利点をもたらします。すべてのブロックは「チェーン」で接続されており、緊密な全体を形成します。ハッカーが過去の取引内容を改ざんしようとする場合、その取引が存在するブロックを改ざんする必要があります。ハッカーは新しいブロックを作成して直接置き換えることはできず、このブロックから最新のブロックまでの全チェーンを再度置き換える必要があります(ビットコインでは、変更が必要なブロックから再度マイニングを開始し、その後のすべてのブロックを連続してマイニングし、最終的に他のすべてのマイナーを上回る新しい最長のチェーンを作成することを意味します)、コストが高くつきます。これにより、取引の改ざんなどの攻撃を回避できます。

** しかし、このデータ構造には依然として問題があります:データ処理能力が低いことです。ブロックチェーンでは、矛盾する取引情報(フォークを許可しない)を避けるため、また台帳の一貫性を保証するため(唯一のチェーンを選択する必要があります)、ブロックチェーンは最長の単一チェーン構造を採用しています。毎回 1 つのブロックを追加することしかできず、P2P ネットワーク内でのブロック情報の伝播と確認には時間がかかり、ブロックの容量が限られているため、一定の期間内に記録できる取引情報には上限があります。したがって、「データ処理能力が低い」ということは、実際には一貫性の要件を満たすための代償であることがわかります。** 現在、ビットコインのブロックチェーンは平均して 1 秒あたり約 7 件の取引しか処理できず、中央集権型の電子決済システムとは大きな差があります。

** データ処理能力が低い(取引スループットが小さい)問題を解決するための重要な考え方は、複数の取引を同時に並行処理することです。サイドチェーン技術は、メインチェーン上の資金をロックおよびアンロックする操作を通じて、異なるブロックチェーンを接続し、取引処理のスペースを拡張します。一方、シャーディングの考え方は、ユーザーを異なるセクターに分割し、各セクター内の取引を独立して検証し、並行して行うことができ、セクター間の取引は追加の処理が必要です。** サイドチェーンやシャーディング技術にはメインチェーンが存在し、両者は取引の柔軟性を制限することによって(資金が凍結されたり、取引の対象が制限されたりするなど)、安全を確保しつつ、台帳の一貫性を満たします。

image

image

一方、DAGDirected Acyclic Graph、** 有向非巡回グラフ)** は、別のデータ構造形式の探求です。** 一般的なブロックチェーンプロジェクトでは、すべてのノードが保存する情報は同じですが、DAG 技術を採用したプロジェクトでは、各ノードが異なる情報を保存することが許可されています。DAG では、ブロックはいつでも生成でき、1 つのブロックが複数の親ブロックに接続されます。これにより、すべての人がいつでも記帳でき、取引情報の記録速度が大幅に向上します。

image

しかし、複数のブロックが同時に生成され、すべてが有効であるため、DAG は「唯一の最長チェーン」で一貫性を保証することができません。この点において、いくつかのプロジェクトは「時間的」な方法で DAG 上の台帳の一貫性を保証します。具体的には、DAG 内で新しいブロックがランダムに 2 つの新しいブロックを選択して接続し、接続されたすべてのブロックの取引情報を検証します。何度も検証を経たブロックは、その取引内容に矛盾が生じる可能性が非常に低く、確認された取引情報と見なされます。この方法では、一貫性の検証はブロックネットワークの拡張と成長に依存します。

他のプロジェクトは「完全接続」を使用して台帳の一貫性を保証します。すなわち、各新しいブロックは以前のすべてのブロックに接続され、以前のすべての取引情報を検証します。また、他のプロジェクトは「順序」を使用して一貫性を保証し、ブロックの再帰的投票によって新しいブロックを確認します。

DAG はスループットの向上をもたらしますが、**「一貫性」は常に解決すべき複雑な問題です。** 現在の問題の解決には、いくつかの代償を払う必要があります。取引情報の正確な検証時間が遅れる可能性があるかもしれません。また、ノード間で大量のネットワーク通信が必要となり、実際の取引速度はまだ観察が必要です。

根本的に、分散型台帳の「一貫性」問題は、バランスの問題です。一貫性」はシステムの目標であり、この目標を達成するには相応のリソースを支払う必要があるため、取引速度を犠牲にするか、取引の柔軟性を制限するか、確認時間を遅らせるか、全ネットワークの伝送要求を高めるかは、異なるシステム条件下での適応的選択です。上記で言及した異なる技術は、異なるアプリケーションシナリオでさらに探求され、検証されることが期待されます。

P2P ネットワークでは、各ノードの地位が同じであり、ノード間で情報が伝送されます。分散型台帳では、各ノード間で保存される内容が同じであることを保証する必要があります。「コンセンサスメカニズム」は、各ノードの内容を同じにするための解決策です。P2P ネットワークでは、ノードの性能低下やネットワークの混雑などの状況が存在する可能性があり、システム内で誤った情報が伝播する可能性があります。** したがって、コンセンサスメカニズムを設計する際には、システム内に不確実なノードが存在することを前提とする必要があります。** アルゴリズムの観点から、これらのメカニズムの設計は本質的に経済的利益のゲームに基づいており、誠実な記帳によって得られる利益が悪意のある破壊の利益を上回るようにすることで、ほとんどの人々の協力を保証します。

技術の限界#

新しい製品を設計する際、人々は現在の技術の限界を理解する必要があります:どの技術が完全に使用できるのか、どの技術がまだしばらく待つ必要があるのか。待つ必要がある技術については、人々は後で再考せざるを得ません。もちろん、科学と技術にはいくつかの違いがあります。科学研究は理論的な限界を示すことができますが、エンジニアリング設計の観点からは、より多くの確率的な状況が発生する大まかな限界内で最善を尽くすことを考慮します。これは最適化問題に似ており、与えられた制約条件を知る必要があります。

コンセンサスメカニズムに関しては、先人の研究が 2 つの重要な限界を示しています:

● フィッシャー・リンチ・パターソン定理:これは、非同期システムにおいて、1 つのプロセスが不確実である限り、すべてのプロセスが一定の時間内に合意に達することを保証するプロトコルは存在しないことを証明しています。

● CAP 原則:分散コンピューティングシステムは、一貫性(Consistency)、可用性(Availability)、分割耐性(Partition tolerance)を同時に保証することはできません。設計では、しばしば特定の特性の保証を弱める必要があります。

ここで、一貫性はシステム内のサービスノードが処理結果に合意することを指し、可用性は限られた時間内に、失敗していないノードがリクエストに応答できることを指し、分割耐性はネットワークが分割される可能性があり、ノード間の通信が保証されないことを指します。

** 分散シーンで完全な一貫性を達成することは不可能ですが、エンジニアリング上の多くの問題の解決は、合理的なトレードオフを行うことにあります。** ある程度のコストを犠牲にして分散シーンの一貫性を得ることができます。現在、ブロックチェーンに基づくさまざまなコンセンサスメカニズムの違いは、主に以下の 2 つの側面から来ています:

** 第一に、アルゴリズムの仮定条件が異なることです。**Paxos、Raft などのアルゴリズムは、ノードが故意に誤ったメッセージを送信しないと仮定しています。これは比較的強い条件です。ビットコインが使用する PoW コンセンサスメカニズムの前提条件は、システム内に記帳ノードがいくつあるかを事前に知らないことです。一方、コンソーシアムチェーンでよく使用される PBFT などのプロトコルは、ノードが許可される必要があると仮定しています。

** 第二に、一定の一貫性を得るためにいくつかのコストを支払うことです。** たとえば、CAP 原則に従って可用性を弱め、システム障害時にサービスを拒否すること、Paxos、Raft などのアルゴリズムは、結果の一貫性を保証するために可用性を弱めています。さらに、ビットコインは一部のフォールトトレランスを犠牲にしています(フォークが発生する可能性があります)が、一定の時間内に全体のブロックチェーンシステムの一貫性を保証しています。

アルゴリズムは万能ではなく、その限界は、システム全体が正常に機能するために他のインセンティブや制約メカニズムを導入する必要があることを決定します。

PoS(Proof of Stake、権利証明)に基づくブロックチェーンプロジェクトでは、新しいブロックを作成するために計算能力を消費する必要はなく、ノードが悪事を働いても罰則はありません。ノードにとって、利益を最大化する選択肢は、複数のチェーンで同時にマイニングすることです。これにより、深刻なフォーク現象が発生する可能性があり、通常はこれらの状況に対処するために追加のルールを導入する必要があります。たとえば、罰則プロトコルを追加するなどです。

パブリックチェーンの一般的なコンセンサスメカニズム#

** パブリックチェーンのコンセンサスメカニズムの設計は、主に非中央集権とインセンティブの強化に焦点を当てています。** 現在、多くの新しいブロックチェーンシステムは、プラグイン可能なコンセンサスメカニズムモジュールをサポートしており、アプリケーションシナリオやニーズに応じて異なるコンセンサスメカニズムを切り替えて使用できます。

主チェーンの「唯一性」を保持することは、パブリックチェーンにとって非常に重要です。これは「二重支払い」問題を解決する鍵です:二重支払いの発生を避けるためには、すべての過去の取引情報を把握し、この取引が以前の履歴と衝突しないことを確認する必要があります。情報の非対称性、不確実性のある環境で、どのようにして取引がスムーズに進むようにするかが「バイザンティン将軍の問題」です。

ビットコインの PoW(Proof of Work、作業証明)メカニズムは、以下の方法でバイザンティン将軍の問題を解決します:

● ** 周期的なサイクルを維持し、ノードの歩調を一致させる:** 難易度を調整して、ネットワークが常に数学的な問題の解を見つけるのに 10 分かかるようにし、新しいブロックを生成します。この 10 分間、ネットワーク上の参加者は取引情報を送信し、取引を完了し、最後にブロック情報をブロードキャストします。これにより、ノードが無制限かつ無秩序に命令を送信する状態を排除します。

● ** 計算競争を通じて、新しいブロックが単一のノードによって生成されることを保証する:** ビットコインはタイムスタンプと電子署名を使用して、特定の時間内に 1 つ(または少数の、これがフォーク現象に該当します)ノードのみが新しいブロックを掘ることを保証します。

● ** ブロックチェーンを通じて、共通の台帳を使用する:** ビットコインネットワーク内の各ノードは、各サイクル内で情報を同期しています。

実際、どのような方法を採用しても、時間を統一し、歩調を一致させ、単一のブロードキャストを行い、1 つのチェーンを使用することで、暗号通貨の分散システムのバイザンティン将軍の問題を解決できます。

PoS は別のコンセンサスメカニズムとして、マイナーが持つ暗号通貨の数量の割合が新しいブロックを掘る確率と等しくなります。これにより、富裕層のアカウントの権限が大きくなり、記帳権を支配する可能性があり、権益がますます中央集権化される可能性がありますが、PoS は確かにマイニングのエネルギーコストを大幅に削減します。長期的には、より多くのコインが PoS の方向に進化する可能性があります。

** 上記の 2 つの一般的な主流コンセンサスメカニズムに加えて、現在のパブリックチェーンのコンセンサスメカニズムの革新点は、両者の混合にあります。** これにより、非中央集権の特徴を保持しつつ、データ処理の効率を向上させることができます。

たとえば、Decred を代表とする PoW/PoS 混合コンセンサス:

  • マイニングプロセスはビットコインに似ており、一定量の作業証明を完了する必要がありますが、コンセンサスを達成する段階での違いがあります。ビットコインが全ネットワークノードにブロックを検証させ、最終的に最長のチェーンを主チェーンとするのとは異なり、混合メカニズムは PoS 投票を導入して、掘り出されたばかりのブロックが有効かどうかを決定し、検証の速度を大幅に向上させます。さらに、Hcash を代表とする PoW/PoS 混合コンセンサスは、二層チェーン構造を組み合わせています。PoW の難易度を 2 つのレベルに分け、2 つのチェーンにそれぞれ公開することで、PoW マイナーと PoS マイナーがシステムのコンセンサスに参加し、役割を果たすことができます。

コンソーシアムチェーンの一般的なコンセンサスメカニズム#

コンソーシアムチェーンはプライバシー、安全性、規制を重視しているため、より多くの管理要素を追加し、従来のバイザンティンファミリーコンセンサスメカニズムに似たものを採用します。

コンソーシアムチェーンは、パブリックチェーンに比べて非中央集権の強調が弱まり、ノードの参加制限により、ノードに一定の信頼が与えられています。

DPoS(Delegated Proof-of-Stake、委任権利証明)メカニズムでは、株式権を持つ者が選挙によって選ばれ、交代されます。これは PoS のようにコインの数量に基づいて生成されるのではありません。さまざまな戦略を通じて、不定期に小さなグループのノードが選ばれ、その小さなグループのノードが新しいブロックの作成、検証、署名、相互監視を行い、ブロックの作成と確認に必要な時間と計算コストを大幅に削減します。DPoS はあまり信頼を必要とせず、選ばれたこれらの委任者は取引の詳細を変更することはできず、ノードが悪事を働いたり、提供する計算能力が不安定であったり、コンピュータがダウンしたりする行為があれば、公開されたコミュニティは迅速に投票で彼を追放できます。

**PoW と PoS が経済モデルを主に用いてコンセンサス問題を解決するのに対し、PBFT(Practical Byzantine Fault Tolerance、実用的バイザンティン耐障害アルゴリズム)はアルゴリズムモデルを用いてコンセンサスを解決します。** これはトークン配布メカニズムが存在せず、エネルギー消費が非常に低いです。プロセスは、皆が最初にリーダーを投票で選出し、リーダーが記帳した後、他の人が投票で承認するという形で簡潔に説明できます。PBFT アルゴリズムでは、誤ったバイザンティンノードが全体の数の 1/3 未満である限り、システム全体が正常に機能できることが証明できます。現在の改善アルゴリズムの方向性には、P2P ネットワークの使用、ノード数の動的調整、プロトコル使用のメッセージ数の削減などが含まれます。

コンソーシアムチェーンのコンセンサスメカニズムアルゴリズムの革新には、DPoS と PBFT の混合も含まれています。DPoS の委任メカニズムを PBFT に適用して動的な権限を実現することができ、既存の研究は、最適なブロック生成時間間隔が 20 秒のとき、TPS が 10000-12000 に達し、遅延が 100-200ms の範囲に制御できることを示しています。コンソーシアムチェーンが部分的に「中央集権」を保持しているため、取引速度が向上し、取引コストが大幅に削減されるというリターンを得ています。

コンセンサスの経済コスト#

コンセンサスにはコストがかかります。パブリックチェーンの PoW は、大量の計算能力コスト、ハードウェアの損耗時間、自然資源を支払って計算を行い、実際の意味のない難題を解決し、記帳権を競います。一方、コンソーシアムチェーンでコンセンサスを達成するには、民主的な投票のように、何度も協議を行い、意見を交換し、最終的に合意に達する必要があります。民主的なコストを削減する方法、最小限の協議回数、最小限のコミュニケーションコストでコンセンサスを達成することがアルゴリズムの追求目標であり、ブロックチェーンという機械が十分に速く動くかどうかを決定する重要な要素です。

根本的に、私たちが注目すべきは、コンセンサスメカニズムのコストと効果のバランスです。ブロックチェーン技術は最終的に実現される必要があります。企業にとって、企業は当然、自らの投入対効果を慎重に考慮し、ブロックチェーン技術を使用すべきか、コストが低い代替案が存在するかを決定すべきです。

たとえば、分散型データベースを使用して企業間の情報の非対称性を解決し、データに表示権限と暗号化レベルを設定して改ざん不可能にし、一連の管理方法と組み合わせることで、ほとんどのシナリオでは主要企業がデータの改ざんを行う動機があまりなく、データベースを維持するための十分な動機がある場合、この場合、設計がどれほど複雑なコンセンサスメカニズムであっても、良いビジネスモデルよりも効果的ではないかもしれません。

ハッシュ関数の特性#

ハッシュ関数は、任意のサイズの入力値を受け取り、計算後に確定した固定長の出力値を生成する数学的な演算プロセスの一種です。** この出力値は、この入力値のデジタルフィンガープリントとして機能します。** 双子にとって、彼らの指紋もまたユニークであるように、ハッシュ関数の設計は同様の特性を持っています:** 非常に小さな入力値の違いであっても、ハッシュ関数の計算結果には非常に大きな差異が生じます。** さらに、** ハッシュ関数にはヒューリスティックアルゴリズムは存在せず、入力と出力の関係は完全にランダムに見えます。** たとえば、特定の出力結果を与えられた場合、対応する入力値が何であるかを要求したり、出力結果が特定の値より小さいことを要求したりする場合、これらの問題の解決には特別なテクニックや方法はなく、試行を繰り返すしかありません。試行回数が多いほど、答えを見つける可能性が高くなります。

人々はハッシュ関数のこれらの特性を利用して多くの機能を実現できます。たとえば、データ保護:データの内容とデータのハッシュ値を一緒に送信し、受信者は受信したデータをハッシュ計算し、比較することでデータが改ざんされているかどうかを確認できます。また、ウェブサイトでユーザーがログインする際、データベースにユーザーのパスワードのハッシュ値を保存し、ユーザーが入力したパスワードのハッシュ値と比較して身元を確認することができます。この利点は、データベースが漏洩した場合、ハッカーはこれらのハッシュ値を使用してユーザーのパスワードを逆算することができないため、比較的安全です。

注意すべきは、ハッシュ関数の入力集合は無限であり、出力の長さが固定されているため、出力のすべての可能性の集合は有限であることです。鳩の巣原理によれば、n+1 個の要素を n 個の集合に入れると、必ず 1 つの集合には少なくとも 2 つの要素が存在します。** したがって、2 つの異なる入力値が同じハッシュ値を持つことは理論的には必ず存在しますが、そのようなことが起こる確率は非常に小さく、ハッシュ関数も常に改良されています。**SHA1 関数は、かつて暗号解析者によって有効な攻撃方法が発見され、その後、ビットコインを含むシステムはより先進的な SHA2 シリーズアルゴリズムを採用しました。ビットコインの数年間の良好な運用は、SHA256 アルゴリズムが時間の試練に耐えたことを示しています。さらに、ハッシュ関数を連続して使用することも、より安全な選択です。

ハッシュ関数はビットコインで多くの場面で使用されており、非常に重要な役割を果たしています。

  • 用途 1:取引情報の圧縮と検証

** ブロックチェーンが処理する取引情報の内容は膨大であり、各ブロック内のすべてのデータを直接シーケンスの形で保存することは非常に非効率的で時間がかかりますが、ハッシュ関数を利用することで情報を圧縮し、検証することができます。**Merkle ツリー(データを保存するためのトポロジー構造として理解できる二分木構造)では、ハッシュ関数技術を組み合わせることで、特定の取引が特定のブロックに属するかどうかを迅速に検証できます。1 つのブロックにパッケージされたすべての取引について、まずそれらを取引情報 1、取引情報 2 などの部分に分け、それに対応するハッシュ値 1、ハッシュ値 2 を計算し、その後、2 つずつ組み合わせてハッシュ計算を行い、最終的にこの Merkle ツリーのルートハッシュ値を得ます。もし特定の取引情報の記録データに変化があれば、最終的に計算される Merkle ルートハッシュ値も異なります。

image

では、なぜこのようなアルゴリズムを使用するのか、すべての取引情報を 1 つの大きな塊にしてそのハッシュ値を計算するのではなく、このような二分木構造を使用する理由は、少量のデータの検証を許可するためです。また、取引のデータ情報に誤りがあった場合、誤りのある位置を迅速に特定することもできます。

  • 用途 2:作業量証明

なぜブロックチェーンは改ざん不可能だと言われるのでしょうか?まず、単純なハッシュチェーンを考えてみましょう:各回のパッケージには前のブロックのハッシュ値とこのブロックの関連情報が含まれています。** もし特定のブロックの情報が改ざんされた場合、以降のすべてのブロックのハッシュ値が変わります。** 他の人もこの変化に気づくでしょう。しかし、この設計の問題は、誰でも特定のブロックの情報を変更し、残りのチェーンのすべての情報を再計算し、これが正しいチェーンであると主張できることです。

** ビットコインの設計の巧妙な点は、このプロセスを実現するために高額なコストを支払う必要があることです。** 作業量証明のコンセンサスメカニズムを採用し、皆が自分が一定の作業量を完了したことを証明しようと競い合い、最初に完了した者が記帳権を得ます。作業量とは、ランダムな数を見つけることを要求するもので、与えられた文字列に加えたときに計算されるハッシュ値が特定の値より小さくなることを意味します。ビットコインでは、この与えられた文字列にはバージョン番号、前のブロックのハッシュ値、Merkle ルートハッシュ値に保存された取引情報、タイムスタンプ、難易度値の情報が含まれています。** マイナーが要件を満たすランダムな数を見つけることで、合法的に自分の記帳権を宣言し、ハッシュ関数を通じて取引情報をエンコードし、改ざん不可能な方法で保存します。** もし誰かが取引情報を変更しようとした場合、彼は特に運が良く、以降のチェーンの各ブロックの正しいランダムな数を迅速かつ成功裏に見つけなければなりません。彼が情報を改ざんした後のチェーンが現在の最長のチェーンになるようにする必要があります。このような状況は理論的には発生する可能性がありますが、計算能力が限られている場合、確率は非常に小さくなります。

  • 用途 3:ビットコインウォレットアドレス

ビットコインの取引では、皆が見ることができる情報は図 5-2 に示されています。左上隅には取引番号があり、矢印で接続された 2 つの文字と数字で構成された文字列はビットコインアドレスであり、ビットコインが 2 つのアドレス間で移動したことを示しています。このアドレスの生成は、ウォレットの公開鍵をハッシュ関数で変換することによって行われます。公開鍵は、ランダムな数字で構成された秘密鍵を非対称暗号化によって生成したものです。取引時には、公開鍵とビットコインアドレスの両方を公開して、ブロックチェーンシステムが支払い取引の有効性を検証できるようにします。

ここでハッシュ関数が果たす役割は非常に巧妙です:** 量子コンピュータは公開鍵から秘密鍵を簡単に逆算できますが、量子コンピュータはハッシュアルゴリズムに直面すると、同じハッシュ値を持つ 2 つの異なる入力値を見つけるのが難しくなります。** 中本聡のこの設計は、いくつかの操作を通じてビットコインが量子コンピュータの脅威に対抗できる可能性を持たせるものです。たとえば、各ビットコインアドレスは一度だけ使用され、毎回の支払いは他のアドレスや自分の釣り銭アドレスに送金されます。

中本聡は巧妙な設計を通じてハッシュ関数の特性をうまく利用し、最終的に良好に機能するシステムを形成しました。この過程には多くの交差学問が関与しており、技術革新の際には物事の本質を抽象化し、他の分野との相互融合に注意を払う必要があることを示唆しています。技術の進歩に伴い、新しいハッシュ関数も次々と設計され、皆の検証を受けています。

ゼロ知識証明#

ゼロ知識証明は、確率に基づく検証方法であり、検証内容には「事実に関する陳述」と「個人の知識に関する陳述」が含まれます。検証者は一定のランダム性に基づいて証明者に質問を投げかけ、すべての質問に正しい回答が得られれば、証明者は彼が主張する「知識」を持っている可能性が高いことを示します。Zerocoin(ゼロコインプロトコル)は、ゼロ知識検証を使用してゼロコインを鋳造および償還するプロセスで、取引に関連する送信者と受信者の情報を隠します。Zerocash(ゼロキャッシュプロトコル)は、より新しい zkSNARKs 技術を採用し、検証が必要な取引内容を 2 つの多項式の積が等しいことを証明する形に変換し、同態暗号化などの技術を組み合わせて取引金額を隠しながら取引を検証します。

欠点は、ネットワークが攻撃を受けた場合、ネットワーク上でゼロキャッシュが超過発行されると、人々はこの状況を発見したり対策を講じたりできないことです。Zerocoin と Zerocash は、事前に「信頼設定」を行う必要があり、真の「非信頼」を達成していません。インテル SGX、zkSTARKs などの新技術がこれらの問題を解決する可能性がありますが、実践による検証が必要です。

ゼロ知識証明は暗号化スキームであり、最初は 1980 年代に MIT の研究者によって論文で提案されました。「ゼロ知識プロトコルは、一方(証明者)が他方(検証者)に何かが真実であることを証明する方法であり、具体的な陳述が真実であるという事実以外の追加情報を開示しない方法です。たとえば、ウェブサーバーに顧客のパスワードのハッシュ値が保存されている場合、顧客が実際にパスワードを知っていることを確認するために、現在ほとんどのウェブサイトがサーバーに顧客が入力したパスワードをハッシュ計算し、保存された結果と比較する方法を採用しています。しかし、この方法の欠点は、サーバーが計算中に顧客の元のパスワードを知ることができ、サーバーが攻撃されると、ユーザーのパスワードが漏洩することです。ゼロ知識証明が実現できれば、顧客のパスワードを知らない前提で顧客のログインを検証でき、たとえサーバーが攻撃されても、顧客の平文パスワードが保存されていないため、ユーザーのアカウントは安全です。」

基本的なゼロ知識証明プロトコルは対話式であり、検証者は証明者に対してその知識に関する一連の質問を繰り返し尋ねる必要があります。すべての質問に正しい回答が得られれば、確率的に証明者はその知識を持っている可能性が高いとされます。

たとえば、ある人が数独の難題の答えを知っていると主張する場合、ゼロ知識証明の方法の 1 つは、検証者がランダムにこの回を列、行、または九宮格で検査することを指定することです。各回の検査では、数字の具体的な位置を見る必要はなく、1~9 の数字が含まれているかどうかを検査するだけで済みます。検証の回数が十分に多ければ、証明者が数独の解を知っていると大いに信じることができます。しかし、このような単純な方法では、証明者と検証者が共謀している可能性があるため、信頼を得ることはできません。数独のケースでは、両者が事前に共謀している可能性があり、証明者が答えを知らない前提で検証を通過することができます。

彼らが第三者に信じてもらいたい場合、検証者は毎回の検査計画がランダムであり、自分が証明者と共謀していないことを証明する必要があります。

第三者の観察者が対話式ゼロ知識証明の結果を検証するのが難しいため、複数の人に何かを証明する場合、追加の努力とコストが必要です。非対話式ゼロ知識証明は、その名の通り、対話プロセスを必要とせず、共謀の可能性を回避しますが、試験のシーケンスを決定するために追加の機械やプログラムが必要になる場合があります。たとえば、数独の例では、プログラムの方法でどの回を行、どの回を列で検査するかを決定しますが、この試験シーケンスは秘密にする必要があります。そうでないと、検証者が事前に試験のシーケンスを知ってしまい、その情報を利用して準備を整え、実際の「知識」を知らないまま検証を通過する可能性があります。

ゼロ知識証明の内容は、2 つのカテゴリに要約できます。「事実」に関する陳述:

  • たとえば、「特定のグラフは三色塗りが可能であることを証明する」または「数 N は合成数である」;

  • 個人の知識に関する陳述:たとえば、「私はこの特定のグラフの染色スキームを知っている」または「私は N の因数分解を知っている」。

ただし、すべての問題にゼロ知識証明の暗号化スキームがあるわけではありません。Goldreich、Micali、Wigderson は、理論的にゼロ知識証明解が存在する有効範囲を示しました。彼らは、複雑度が多項式レベルの決定問題(問題の答えが「はい」または「いいえ」のみ)には、既知のゼロ知識証明スキームが存在することを発見しました。このような NP 問題の中で証明したい主張を見つけ、三色問題のインスタンスに変換することで、既存のプロトコルを利用してゼロ知識証明を実現できます。三色問題は NPC 問題に属し、他のすべての NP 問題はこの問題のインスタンスに変換できます。

ブロックチェーン上の取引では、ビットコインやイーサリアムネットワークのように、取引の両者の真の身元を置き換えるためにアドレスを使用するだけでなく、送信先、受信先のアドレスと金額が知られているため、他の人がネットワーク上のさまざまな情報や現実世界での相互作用の記録を通じてビットコインアドレスと真の身元を関連付ける可能性があり、プライバシーが露出するリスクがあります。Zerocoin は、取引履歴分析を通じてユーザーの真の身元を取得できない新しいアイデアを設計しました。Zerocoin では、取引する通貨の一定の価値を消費する必要があり、ユニークなシリアル番号を持つゼロコインを生成します。ゼロ知識証明は、具体的にどの通貨を消費したかを明らかにせずに、確かにそのお金を使ったことを検証できます。他の人にこのお金を転送するためには、論理的にこのゼロコインが他の人に再度使われないようにする必要があります。ゼロコインの方法は、皆が共同で無効リストを維持し、すべての使用済みゼロコインのシリアル番号を保存します。マイナーは、この支出取引を検証する際にゼロ知識証明の方法を使用し、どのゼロコインを具体的に使用したかを知らなくても、ゼロコインのシリアル番号が無効リストにあるかどうかを検証できます。支出取引にはアドレスや署名の情報が含まれていないため、取引全体の過程でマイナーもこのゼロコインの出所を知らないため、取引履歴を分析してユーザーの身元を取得することは困難です。

ゼロコインでは、取引金額は知られていますが、zkSNARKs 技術を採用した Zerocash では、取引金額も隠すことができ、台帳に唯一公開される記録は取引の存在性だけです。NP のすべての問題に対して zkSNARKs が存在することを証明できます。これは多くの革新的な技術を導入し、ブロックチェーンで使用できるようにします。最も重要なのは、zkSNARKs が証明のサイズとそれを検証するために必要な計算量を減少させることです。そのプロセスは以下のように簡潔に説明できます。

(1)検証するプログラムを論理的な検証ステップに分解し、これらの論理的なステップを加減乗除から構成される算数回路に分解します。

(2)一連の変換を通じて、検証するプログラムを検証多項式の積が等しいことを証明します。たとえば、txhx)=wxvx)を証明します。

(3)証明をより簡潔にするために、検証者は事前にいくつかのチェックポイントsをランダムに選択し、これらのポイントで等式が成立するかどうかを確認します。

(4)同態エンコーディング / 暗号化の方法を使用して、検証者が等式を計算する際に実際の入力値を知らずに検証できるようにします。

(5)等式の左右両側に 0 でない秘密の数値kを同時に掛けることができる場合、tshskwsvskと等しいと検証する際、具体的なts)、hs)、ws)、vs)を知らないため、情報の安全性を保護できます。

Zerocoin の暗号学的原理である RSA 加算器とは異なり、zkSNARKs 技術は新しく、広く検証されていないため、リスクが存在します。また、より強い匿名性のため、Zerocash の脆弱性は発見が難しく、Zerocoin と比較して、Zerocash は取引金額情報も未知であるため、攻撃者が無制限にゼロキャッシュを発行する場合、その状況を検出することはできません。

さらに、Zerocoin と Zerocash は、事前に生成パラメータを内蔵する必要があり、ユーザーがこれらのネットワークを使用する際には、これらのパラメータが漏洩していないことを信頼しなければなりません。しかし、これらのパラメータが漏洩した場合、ネットワーク全体が壊滅的な打撃を受けることになります。複雑な信頼設定により、Zerocash は論争の余地があり、彼らは自らの安全性を証明するために「儀式」(たとえば、鍵計算機を破壊する過程を録音するなど)を設計しました。

可能な解決策には、インテル SGX や ARM TrustZone のような現代の「信頼できる実行環境」を利用することが含まれます。インテルの SGX 技術に関しては、アプリケーション、オペレーティングシステム、BIOS、または VMM が破壊されても、秘密鍵は安全です。さらに、最近提案された zkSTARKs 技術は、信頼設定を行う必要がなく、ブロックチェーン検証を完了することができます。同時に、計算データ量の増加に伴い、計算速度が指数関数的に加速するシステムです。これは公開鍵暗号システムに依存せず、より単純な仮定に基づいて理論的により安全であるため、唯一の暗号化仮定はハッシュ関数(SHA2 など)が予測不可能であることです(この仮定はビットコインのマイニングの安定性の基礎でもあります)。したがって、量子耐性も持っています。この新しい技術は、zkSTARKs と同様に、時間の試練を受ける必要があります。

ある問題が多項式の時間内に解決できるアルゴリズムが見つかる場合、それは P クラスの問題と呼ばれます。NP 問題は、解を多項式の時間内に検証できる問題を指します。ある問題が NP 問題であり、すべての NP 問題がそれに還元できる場合、それは NPC 問題と呼ばれます。

ハッシュタイムロックプロトコル#

ハッシュタイムロックプロトコルHashed-Timelock AgreementsHTLAs)は、異なるブロックチェーンプロジェクト間でトークン取引や交換を可能にする技術です。** 従来の取引所でトークン取引を行う際、取引者はしばしばトークンを事前に取引所に担保として預ける必要があり、これには一定の取引リスクが伴い、高い手数料が必要です。** ハッシュタイムロックプロトコルでは、送信者、接続者、受信者の 3 者だけでトークン取引を実現でき、取引所プラットフォームは必要なく、取引が失敗した場合、トークンは実際には移転せず、追加の取引手数料を支払う必要はありません。取引所と比較して、ハッシュタイムロックプロトコルは「フリーマーケット」を提供し、信託を必要としない第三者の介入を排除し、取引所の役割をコミュニティ内の個人に分散させ、人と人の間で安全にトークン間の取引を行うことができます。

ハッシュタイムロックプロトコル技術のアイデアは、最初に 2013 年の BitcoinTalk フォーラムでの議論に起源を持ち、技術の実際の実装はビットコインのライトニングネットワークに関連しています。ライトニングネットワークでは、2 人のユーザー間で小額の支払いチャネルを実現するために、ユーザーは事前に自分の一部の資金をロックする必要があります。この部分の資金に関する取引はオフチェーンで行われます。しばらくすると、資金の最終的な分配が確定し、その分配計画がメインチェーンにアップロードされます(図 7-1)。これにより、大量の小額取引がオフチェーンで行われ、ビットコインネットワークの取引スループットが向上します。

ライトニングネットワークでユーザーの資金をロックするために使用されるハッシュロック契約(Hashed Timelock Contracts、HTLC)技術は、後の開発者にインスピレーションを与えました。トークン間の取引は、中間者の変換を経る必要があり、その鍵は各当事者の信頼を得ることです。トークンをロックするプロセスは、信頼を生み出す担保プロセスです。

image

架空の取引の例を挙げてみましょう。1 枚のビットコインと 10 枚のイーサリアムの価値が等しいと仮定します。送信者(Sender)は 1.1 枚のビットコインを持っており、受信者(Receiver)が提供する価値 10 枚のイーサリアムのサービスを購入したいと考えています。そこで、送信者はビットコインアドレスとイーサリアムアドレスの両方を持つ接続者(Connector)に連絡し、トークン変換の手数料を 0.1 枚のビットコインと協議します。取引の流れは図に示されています。

image

このプロセスでリスクが高いのは、1.1 枚のビットコインを送信するステップです。接続者は 1.1 枚のビットコインを受け取った後、すぐに取引から退出する可能性があり、送信者の利益が損なわれる可能性があります。合理的な解決策は、ビットコインの引き渡しを遅らせることです。イーサリアムが引き渡された後にビットコインを引き渡すことで、取引リスクが接続者に移転します(方案 2)。

接続者の利益を同時に保護するために、解決すべき問題は、受信者が 10 枚のイーサリアムを取得するのと同時に、送信者の 1.1 枚のビットコインも接続者に送られることを保証する必要があります。この 2 つのイベントは同時に発生する必要があります。** これは実際には取引の「原子性」を示しています:資金は完全に移転するか、完全に移転しないかの中間状態は存在しません。** この問題は、事前共有鍵(Pre-Shared Key、PSK)技術によって解決されます。

1.1 枚のビットコインを取引パッケージと見なし、10 枚のイーサリアムを別の取引パッケージと見なすと、PSK 技術では、これらの 2 つの取引パッケージは同じ鍵によって起動され、「同時に発生する」ことを実現します。

送信者は暗号アルゴリズムを使用して鍵を生成し、その鍵を受信者に送信し、関連情報を接続者に送信します。同時に、送信者は自分の 1.1 枚のビットコインを取引パッケージ 1 にロックし、鍵がなければ資金を移転できません。

接続者は、送信者から提供された情報を使用して、10 枚のイーサリアムを含む取引パッケージ 2 を作成し、受信者に送信します。受信者が鍵を使用して取引パッケージ 2 を開くと、受信者は 10 枚のイーサリアムを取得し、同時に鍵も接続者に送信され、接続者はその鍵を使用して取引パッケージ 1 の 1.1 枚のビットコインを取得できます。これにより、トークン間の交換が実現します。

資金のロック時間が長すぎないようにするために、取引パッケージ 1 と 2 には制限時間を設定する必要があります。制限時間を超えると、資金はロック解除され、元のアドレスに戻ります。これがタイムロック(Timelock)機能です。また、前述の事前共有鍵はハッシュ暗号化(Hashed)を使用しているため、この技術的な解決策はハッシュタイムロックプロトコル(Hashed-Timelock Agreements)と呼ばれます。

限界#

この技術には依然として一定の限界があります:

(1)接続者は一定のリスクを負う必要があります。PSK 技術では、接続者は取引パッケージ 1 に鍵を注入しなければビットコインを取得できません。つまり、ビットコインとイーサリアムの引き渡しは完全に同時に発生しません。両方の通貨の引き渡しには制限時間が設定されているため、取引パッケージ 2 の制限時間が取引パッケージ 1 よりも長い場合、受信者が 10 枚のイーサリアムを取得した後、接続者が 1.1 枚のビットコインを回収できず、損失を被る可能性があります。このリスクは、取引パッケージ 1 の制限時間を取引パッケージ 2 よりも長く設定することで回避できます。

image

**(2)ハッシュタイムロック技術をサポートしていないブロックチェーンプロジェクトでは、上記のプロセスを別の台帳プラットフォームを通じて行う必要があります。** 追加の記帳プラットフォームは、トークン間の移転の取引記録を保存できます。しかし、記帳プラットフォーム自体はトークンの移転を行わないため、本質的には借金や借金の情報を記録しており、取引の両者が十分な信頼を持っている必要があります。取引は実行されます。記帳プラットフォームを通じて、両者が信頼の基盤を持っている限り、非ブロックチェーン資産もこの記帳方法で交換できます。

** 本質的に、異なる資産間の取引や流通は、信頼の基盤を提供し(接触を生み出し)、取引の原子性を保証することで実現できます。** ハッシュタイムロックプロトコルでは、トークンのロックが資産の担保を実現し、取引に信頼の基盤を提供します。鍵の伝達は、取引の原子性を保証します。同時に、タイムロックの導入により、取引時間が長すぎて発生する紛争や予期しない事態を回避します。ブロックチェーンプロジェクト以外でも、このモデルはさまざまな資産カテゴリの流通に適用できます。

ハッシュタイムロックプロトコル技術は、Ripple Interledger プロ

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。