ブロックチェーン:ネットワーキング、学生の署名と課題の検証、パート2

まえがき



最初の部分では、ブロックチェーン、構造、デジタル署名の可能性について話しました。この部分では、署名の検証、マイニング、おおよそのネットワーク組織について話します。 私は分散システムの専門家ではないことに注意してください(ネットワーク組織が間違っている可能性があります)。



ピアツーピアネットワーク(P2P)



ピアツーピア(ピアツーピア)ネットワークは、参加者の平等な権利に基づくネットワークです。 多くの場合、このようなネットワークには専用サーバーがなく、各ピアはクライアントであり、サーバーとして機能します。 クライアント/サーバーアーキテクチャとは異なり、このような組織では、使用可能なノードの任意の数と任意の組み合わせに対してネットワークの操作性を維持できます。 ネットワークメンバーはピアと呼ばれます。



ネットワーキング



まず、質問に答える必要があります。



P2Pネットワークアプリケーションに参加している各クライアントは、これらの問題を克服するために次の操作を実行できる必要があります。



接続されると、新しいクライアントは接続されたノードのリストを含むトラッカーに接続します。 そのようなトラッカーは多数存在する可能性があり、クライアント間の最適な通信に必要です。最適性により、地理的に近くにあるサイトからブロックのチェーンをダウンロードする方が、次のブロックよりも良いことが理解されます。 つまり、接続センター(トラッカー)を使用すると、既にネットワーク上にいる新しいクライアントを見つけて、最も「適切な」ノードのリストを提供できます。 ネットワークの例を図1に示します。



図1-接続されたノードのリストを含むトラッカーを持つ分散ネットワーク



マイニング



ブロックチェーンのタイプ(仕事の証明を使用した分散バージョンまたは信頼できるセンターで集中化されたバージョン)に応じて、トランザクションブロック(空)はマイナーまたはメインノード(センター)によって作成できます。 マイナーは、新しいブロック(トランザクションブロック)を計算するネットワークノードです。 新しいブロックを計算することはどういう意味ですか?なぜ計算する必要があるのですか? いくつかのタイプのブロックチェーンでは、新しいブロックを作成するのはそれほど簡単ではないため、番号を並べ替えることで難しい問題を解決する必要があります(正確には、〜0000000000HD83HA653JA ... 83JSの先頭に10個のゼロを含むハッシュを取得します)、これは他の参加者が行うためですブロックのチェーンをすばやく交換できませんでした そのようなハッシュの計算には、数時間、数日、数週間かかることがあります(1つを置き換えると、他のブロックを再カウントする必要があります)。 他のタイプのブロックチェーンでは、これらのハッシュは事前に計算されているため、マイナーをブロックマイナーとして使用する必要はありません。ここで、マイナーの目的はブロックを抽出することではなく、チェーンを格納するための独自のハードドライブを提供することです



ブロックチェーンデータの確認



新しいブロックを追加するか、すでに作成されたブロックのトランザクションリストに新しいデータを挿入した後、他のネットワーク参加者がこの情報を確認する必要があります。



トランザクションチェックアルゴリズム



トランザクション検証アルゴリズムを図2に示します。他のネットワーク参加者によるトランザクション検証は、段階に分けることができます。

  1. 新しいトランザクションからデータと署名を受け取ります。
  2. データからSHA512ハッシュを取得します。
  3. 同じブロックのアドレスから取得した署名と公開鍵は、RSADecode(署名、公開鍵)を使用して復号化されます。
  4. ステージ2で取得したハッシュと、ステージ3で復号化された署名から取得したハッシュを比較します。 一致する場合、データは正しく、所有者のキーで署名されているため、ブロック内のトランザクションに追加されます。 それらが一致しない場合、データは偽であり、トランザクションは拒否され、ブロックに追加されません。






図2-トランザクション検証アルゴリズム



ブロックチェックアルゴリズム



新しいブロックの確認は段階に分けられます:

  1. 最後に受信したブロックのアドレスが取得され(現在のブロックはまだ受け入れられておらず、最後ではありません)、現在のブロックのトランザクションのリストが取得されます。 次に、ハッシュが計算されます:

     = SHA512(block_prev_adress_hash + transaction_hash1 + transaction_hash2 + … + transaction_hashN)
          
          



  2. 受信したハッシュは、まだ受け入れられていないブロックのハッシュ(バインダー)と比較されます。 それらが一致する場合、ブロックは正しく、チェーン内の自分自身に追加されます。 そうでない場合、データは正しくなく、ブロックは受け入れられません。




C#署名検証の例



トランザクションから受け取ったメソッドをメソッドに渡します:データ、署名、ブロックアドレス(公開キー)。

 private static bool VerifyMessage(string originalData, string signedDataBase64, string publicKey) { //        bool verified; //    RSA   RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048); // ,        (   ) //     rsa.FromXmlString(publicKey); //       byte[] originalByteData = Encoding.UTF8.GetBytes(originalData); //    string   Base64    byte[] signedData = Convert.FromBase64String(signedDataBase64); //  originalByteDate   SHA512,     signedData //     verified verified = rsa.VerifyData(originalByteData, CryptoConfig.MapNameToOID("SHA512"), signedData); return verified; }
      
      







タスク



トラッカーで分散ネットワークを実装することにより、 最初の部分からPSを拡張する必要があります。 クライアントノードは、相互に対話できる必要があります(情報の送信/受信/検証)。 トラッカーノード-ノードのリストを更新/提供します。

トラッカーノードの機能:

  1. トラッカーへの接続時のクライアントの登録(リストへの追加);
  2. 接続されたノードのリストを返します。


お客様の特徴:

  1. トラッカーから受信したリストからトラッカーノードおよびネットワークノードへの接続。
  2. ネットワークノードに接続する場合、トランザクション履歴を同期し、別の参加者(チェーンが新しいか長い場合)からのトランザクション履歴を受け入れ、その後の検証で受け入れます。
  3. 新しいブロックまたはトランザクションを追加するとき-このブロックを他の参加者にアナウンス(転送)します。
  4. 他の参加者から新しいブロックまたはトランザクションを受信します。
  5. 他の参加者から新しいブロックまたはトランザクションを受信したら、それらを確認し、チェーンに挿入するか拒否するかを決定する必要があります。




ソース



  1. ProfessorWeb // P2Pネットワーク
  2. StackOverFlow // P2Pアプリケーションのプログラミング



All Articles