pseudoyu

pseudoyu

Blockchain | Programming | Photography | Boyi
github
twitter
telegram
mastodon
bilibili
jike

Hyperledger Fabric ネットワークとセキュリティシステムの概要

はじめに#

前回の記事「Hyperledger Fabric アーキテクチャの詳細」では、Fabricのアーキテクチャと動作原理について詳しく解説しました。しかし、エンタープライズレベルのブロックチェーンシステムとして、Fabricは複雑なビジネス要件に基づいてネットワークを構築し、実行中にどのようなセキュリティ上の問題が存在し、Fabricはどのようにそれを防止しているのでしょうか?

本記事では、簡略化された企業向けFabricネットワークの構築例を通じて、ネットワークとセキュリティシステムの解析を行います。もし間違いや抜け漏れがあれば、ご指摘いただければ幸いです。

Hyperledger Fabric ネットワーク#

Hyperledger Fabric のアプリケーションシナリオの例#

ビジネスロール#

Fabricシステムを使用したアプリケーションシナリオを考えてみましょう。

4 つの組織R1R2R3R4があるとします。R4はネットワークのイニシエータであり、R1R4はネットワーク管理者の役割を共有しています。

システムには 2 つのチャネル、C1C2が設定されています。R1R2C1チャネルを使用し、R2R3C2チャネルを使用します。

アプリケーションA1は組織R1に属し、C1チャネルで実行されます。アプリケーションA2は組織R2に属し、C1チャネルとC2チャネルの両方で実行されます。アプリケーションA3は組織R3に属し、C2チャネルで実行されます。

P1P2P3はそれぞれ組織R1R2R3のノードです。

オーダリングノードはO4によって提供され、組織R4に属しています。

構築手順#

実際のビジネスアプリケーションシナリオと比較して、ロールとビジネスロジックは非常に簡略化されていますが、異なるノードとロールの機能と相互作用を理解するのに適しています。次に、ネットワークの構築手順を一つずつ説明します。

ネットワークの作成とネットワーク管理者の追加

各組織はネットワークに参加するためにMSPの CA 機関から発行された証明書が必要ですので、各ノードには対応する CA が必要です。

ネットワークのイニシエータであるR4は、ネットワークを設定し、オーダリングノードO4を設立する必要があります。ネットワークが作成された後、ネットワーク管理者としてR1を追加するため、R1R4はネットワークの設定(NC4)を行うことができます。

fabric_network_example_1

アライアンスの定義とチャネルの作成

R1R2C1チャネルを介してビジネスのやり取りを行うため、ネットワーク内でアライアンスを定義する必要があります。R1R4の両方がネットワークの設定を行えるため、アライアンスを定義することができます。

その後、このアライアンスのためにC1チャネルを作成します(オーダリングサービスO4に接続)。

fabric_network_example_2

ノードの参加、スマートコントラクトのデプロイとアプリケーション

P1ノードは既に作成されたC1チャネルに参加し、台帳L1を維持しています。

この時点で、ノードにスマートコントラクトをインストールしてインスタンス化することができます。Fabricのスマートコントラクトはチェーンコードであり、チェーンコードはノードのファイルシステムに保存され、特定のチャネルで起動およびインスタンス化する必要があります。その後、アプリケーションはトランザクション提案を背書ノードに送信することができます(チェーンコードの背書ポリシーに従う必要があります)。

以下の図は、P1ノードがチェーンコードS5をインストールし、C1チャネルでインスタンス化した後、アプリケーションA1からのチェーンコード呼び出しに応答できるようになる様子を示しています。P2ノードはチェーンコードS5をインストールし、C1チャネルでインスタンス化した後、アプリケーションA2からのチェーンコード呼び出しに応答できるようになります。

チャネル内の各ノードはコミットノードであり、新しいブロック(オーダリングノードからのもの)を受け取り、検証して台帳にコミットすることができます。また、チェーンコードがデプロイされた一部のノードは背書ノードになることもできます。

fabric_network_example_4

新しいアライアンスの定義と新しいチャネルの作成

新しいアライアンスをネットワークに定義し、C2チャネルに参加します。

fabric_network_example_5

新しいノードの参加、スマートコントラクトのデプロイとアプリケーション

注意すべきは、一部のノードが複数のチャネルに同時に参加し、異なるビジネスで異なる役割を果たすことです。他の手順は同じです。

fabric_network_example_6

ネットワークの構築完了

hyperledger_fabric_network_example

Fabricは、権限管理、チャネルなどのメカニズムを採用し、異なるノードの機能を分散させることで、システムの実行効率を向上させ、複雑なビジネスシナリオにおけるセキュリティとプライバシーを保護しています。強力なチェーンコードとカスタマイズ可能な背書ポリシーなども、システムの拡張性を保証し、複雑なビジネスロジックを処理することができます。

Hyperledger Fabric セキュリティ分析#

Fabric セキュリティメカニズム#

Fabricは、システムのセキュリティを保護するために多くのメカニズムを設計しています。

システムの設定とメンバー管理#

ビットコインやイーサリアムなどのパブリックチェーンとは異なり、Fabricネットワークへの参加には権限の検証が必要です。Fabric CAはメンバー管理にX.509証明書メカニズムを使用しており、スプーフィング攻撃などの潜在的な攻撃を防ぐために権限を保護しています。

既存のシステムメンバーは新しいメンバーの参加ルールを定める必要があります。たとえば、多数決などの手法を使用することがあります。既存のメンバーはネットワークやスマートコントラクトの更新や変更を決定する必要があり、これにより悪意のあるノードによるシステムのセキュリティを大幅に防止することができます。既存のノードは自分自身で権限をアップグレードすることはできません。さらに、システムの一般的なデータモデルなどの設定も決定する必要があります。

FabricのネットワークトランスポートはTLSv1.2を使用しており、データの安全性を保証しています。また、システム内の操作(トランザクションの発行、背書など)はデジタル署名技術を使用して記録され、悪意のある操作を容易に追跡することができます。ただし、注意が必要なのは、オーダリングノードはシステム内のすべてのノードのトランザクションデータにアクセスできるため、オーダリングサービスノードの設定はシステム全体のセキュリティに特に重要であり、その公正性はシステム全体の運営に大きく影響し、システムの信頼性を決定するため、ビジネスとシステムの構造に基づいて慎重に選択する必要があります。

パブリックチェーンシステムでは、すべてのノードがブロックチェーンの台帳のコピーを持ち、スマートコントラクトを実行します。一方、Fabricシステムでは、ビジネス関連のノードはノードグループを形成し、トランザクション(ビジネス)に関連する台帳を保持し、チェーンコードによる台帳の更新もノードグループの範囲内に制限されるため、システム全体の安定性が保証されます。

スマートコントラクトの実行はトランザクションと呼ばれ、Fabricシステム内のトランザクションも一貫性を保つ必要があります。これには、トランザクションの改ざんを防ぐために暗号技術を使用することが一般的です。SHA256ECDSAなどの検証によって変更が検出されることが多いです。Fabricはモジュール化されたプラグインアーキテクチャを採用しており、トランザクションの実行、検証、合意を分離するため、異なる合意メカニズムやルールを選択することができます。これにより、要件に応じて異なる合意メカニズムを選択できるだけでなく、システムの拡張性も向上し、セキュリティも向上します。

これらの設定とルールは、システムのセキュリティを決定するため、ビジネス要件、効率、セキュリティのバランスを取る必要があります。

スマートコントラクトのセキュリティ#

Fabricのチェーンコードはノードにインストールしてインスタンス化する必要があり、チェーンコードのインストールには CA の検証が必要なため、権限管理に注意する必要があります。チェーンコードは独立した Docker コンテナで実行されるため、より軽量ですが、Fabricネットワークにアクセスできるため、厳格なコードレビューやネットワークの分離が行われていない場合、悪意のある結果をもたらす可能性があります。

Fabricのチェーンコードは、GoJavaなどのさまざまな汎用プログラミング言語で記述することができます。これにより、システムの拡張性が向上し、既存のシステムやツールにも容易に統合できますが、実行結果は非決定的です。プログラミング言語のいくつかの特性(ランダム数、システムタイムスタンプ、ポインタなど)により、異なる背書ノードでの実行結果が異なる場合があり、システムの一貫性が損なわれる可能性があります。また、チェーンコードは外部の Web サービス、システムコマンド、ファイルシステム、サードパーティライブラリなどにアクセスすることもでき、潜在的なリスクを引き起こす可能性があります。したがって、これらの汎用言語で開発されたチェーンコードは、比較的独立しており、コードレビューが強化される必要があります。

トランザクションのプライバシー#

Fabricは、チャネルメカニズムを使用してシステム全体を複数のサブブロックチェーン(台帳)に分割しています。チャネルに参加しているノードのみがトランザクション情報を表示および保存できますが、オーダリングノードは表示できます。

では、チャネル内の一部のプライベートデータのプライバシーを保護する方法はありますか?

Fabricは、チャネル内のノードが特定のデータ共有対象(ノード)を選択できるようにするプライベートデータの保存方法を提供しています。

fabric_security_private_data

このメカニズムでは、実際のデータは指定されたノードにgossipプロトコルを介して送信され、データはプライベートデータベースに格納されます。認可されたノードのみがチェーンコードを介してアクセスできますが、このプロセスはオーダリングサービスを含まないため、オーダリングノードはアクセスできません。

また、システム内で伝播、ソート、および台帳への書き込みが行われるデータは、ハッシュ暗号化されたバージョンであり、トランザクションは各ノードによって検証されますが、ハッシュの特性により、元のデータが漏洩することはありません。

ただし、背書ノードがトランザクションプロセス中にデータを使用する場合、背書ノードの読み取り可能性と他のノードへの非表示性(非対称暗号など)を保証するために、追加のメカニズムが必要です。

まとめ#

以上がHyperledger Fabricネットワークの構築とセキュリティシステムの分析です。次に、Goとチェーンコードの開発を学び、プロジェクト実践を通じてより深く理解する予定です!

参考文献

  1. FITE3011 Distributed Ledger and Blockchain, Allen Au,HKU
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。