ブロックチェーン-クイックガイド

近年、Blockchainには多くの話題があります。多くの人がこれを10年で最も破壊的な技術だと説明しています。特に、金融市場が最も影響を受ける可能性があります。

このテクノロジーは、ヘルスケア、医薬品、保険、スマートプロパティ、自動車、さらには政府など、多くの分野に採用されています。

ただし、これまでのところ、ブロックチェーンの最も成功した実装はビットコインです-ちなみにブロックチェーンテクノロジーの最初の実装でもあるピアツーピア電子キャッシュシステムです。したがって、ブロックチェーンテクノロジーを理解するには、ビットコインシステムがどのように設計および実装されているかを理解するのが最善です。

この記事では、Blockchainとは何か、そのアーキテクチャ、実装方法、およびさまざまな機能について学習します。ブロックチェーンの複雑さを説明しながら、ビットコインの実装を紹介します。

ブロックチェーンアーキテクチャはそれほど簡単ではなく、多くの人が優れた記事、いくつかのビデオを含むチュートリアルを書いています。これらの聴衆は初心者から専門家まで多岐にわたります。このチュートリアルでは、初心者と専門家の両方を念頭に置いて、ブロックチェーンアーキテクチャの概念的な理解に焦点を当てます。ブロックチェーンを掘り下げる前に、なぜこの新しいテクノロジーの必要性が生じたのかを知ることが重要ですか?この質問への答えは、として知られているものにありますDouble − Spending

画像に示されている状況を考えてみましょう-

ここではっきりとわかるように、ボブは本と引き換えにリサに10ドル札を差し出している。リサがこの物理的な10ドル紙幣を受け取ると、物理的な通貨が現在リサに所有されているため、ボブがこのお金を他のトランザクションに再利用する方法はありません。

ここで、お金がデジタル形式で支払われる状況を考えてみましょう。これは画像に示されています-

両替の形式はデジタル形式であるため、基本的にはボブのデバイスのどこかに保存されているバイナリの物理ファイルです。ボブがこのファイル(デジタルマネー)をリサに渡した後、ファイルのコピーをアリスに渡すこともできます。どちらも、デジタルコインを認証する手段がなくてもお金を受け取ったと考えているため、それぞれの商品をボブに配達します。これはdouble-spending 送信者が複数のベンダーからサービスや商品を入手するために複数の場所で同じお金を使う場合。

この二重支払いの問題を解決するには、一元化された権限を使用してすべてのトランザクションを監視します。これは画像に示されています-

一般的には銀行である一元化された機関は、すべてのトランザクションを記録する元帳帳を維持します。今、ボブは彼のデジタルマネーを銀行に送金しなければなりません。銀行はボブの口座から借方に記入する元帳に入力します。ボブが送信したいデジタルマネーを支払うのに十分な残高があることを確認した後、そのお金をリサに送金し、元帳に自分のアカウントを入金します。

今、ボブがお金を二重に使うことができないことが保証されています。すべてのデジタルトランザクションがこのような一元化された機関を経由してルーティングされる場合、二重支払いの問題は解決されます。これは、トランザクションで受け取る各コイン(デジタルマネー)の信頼性を検証する上で別の利点も提供します。したがって、偽のお金(ボブがコピーを使用してアリスに支払う場合のように重複したお金)は簡単に検出され、流通を防ぐことができます。

中央集権化された権限の導入は、二重支払いの問題を解決しますが、別の大きな問題をもたらします。それは、中央集権化された権限自体を作成および維持するコストです。

銀行は業務にお金が必要なため、顧客のために行う通貨取引ごとに手数料を削減し始めます。これは、特に複数のエージェント(銀行)が取引全体に関与する可能性がある海外送金では、非常に高額になる場合があります。

上記のすべての問題は、ビットコインと呼ばれるデジタル通貨の導入によって解決されます。ここで、ビットコインの設計とアーキテクチャについて詳しく説明する前に、ビットコインとは何かについて簡単に説明します。

ビットコインは、2008年に「ビットコイン:ピアツーピア電子キャッシュシステム」というタイトルのリサーチスタイルのホワイトペーパーを通じて、中本聡によってこの世界に紹介されました。

ビットコインは二重支払いの問題を解決しただけでなく、さらに多くの利点を提供しました。ここで言及する価値のあるそのような利点の1つは、トランザクションの匿名性です。システムを作成し、このシステムで数枚のコインを取引した聡は、全世界に完全に匿名です。

想像してみてください。このソーシャルメディアの世界で、一人一人のプライバシーが危機に瀕しているとき、世界はこれまでサトシが誰であるかを追跡することができませんか?実は、聡が個人なのか集団なのかはわかりません。それをグーグルで調べると、中本聡が保持しているビットコインは約194億ドルの価値があるという事実も明らかになりました-そのお金は現在ビットコインシステムで請求されていないままです。では、ビットコインとは何ですか?見てみましょう!

ビットコインとは何ですか?

前に見たように、銀行は各トランザクションを記録する元帳を維持しています。この元帳は、銀行によって非公開で管理されています。聡は、この台帳を公開し、コミュニティが管理することを提案しました。

このような元帳を公開した瞬間に、いくつかの考慮事項が思い浮かびます。この元帳は、誰もそのエントリを変更できないように、改ざん防止されている必要があります。元帳の各エントリは公開されているため、匿名性を維持する方法を理解する必要があります。明らかに、私が100万ドルを支払ったことを世界中のすべての人に知られたくないでしょう。

また、世界のすべてのトランザクションを追跡する元帳は1つしかないため、元帳のサイズも大きな懸念事項になります。これらの複雑さに対する解決策を提供することは簡単ではありませんでした。それは、ビットコインの基礎となるアーキテクチャを簡単な言葉で理解できるようにするためにここで試みていることです。

この基盤となるアーキテクチャは Blockchainそれがこのチュートリアルの目的です。ブロックチェーンアーキテクチャを理解するには、それが基づいているいくつかの重要な機能を理解する必要があります。それでは、PKI(公開鍵暗号)を始めましょう。

公開鍵暗号または略してPKIは、非対称暗号とも呼ばれます。パブリックキーとプライベートキーの2組のキーを使用します。キーは、長い2進数です。公開鍵は世界中に配布されており、その名前が示すように真に公開されています。秘密鍵は厳密に秘密にされるべきであり、決して紛失してはなりません。

ビットコインの場合、ビットコインウォレットの秘密鍵を紛失した場合、ウォレットの内容全体が即座に盗難に遭いやすくなり、気付かないうちにすべてのお金(ウォレットの内容)が失われます。誰がそれを盗んだかを追跡するためのシステムのメカニズム-それは私が前に述べたシステムの匿名性です。

PKIは、認証と暗号化/復号化メカニズムによるメッセージプライバシーの2つの機能を備えています。これら両方の機能について説明します-

認証

両者がメッセージを交換するときは、送信者と受信者の間に信頼関係を確立することが重要です。特に、受信者はメッセージの送信元を信頼する必要があります。ボブがリサから商品を購入するためにリサにお金を送るという以前のシナリオ(図1に示されている)に移動して、PKIがボブとリサの間にこの信頼を構築する方法を見てみましょう。下の画像を見てください-

そもそも、ボブがリサにいくらかのお金を送りたいのなら、彼はそれ自身の秘密/公開鍵を作成しなければなりません。両方のキーは常にペアになっており、異なる個人または異なるインスタンスの秘密キーと公開キーを混在させることはできないことに注意してください。

今、ボブは彼がリサに10ドルを送っていると言います。そこで彼は、ボブ(送信者)の公開鍵、リサ(受信者)の公開鍵、および金額($ 10)を含むメッセージ(プレーンテキストメッセージ)を作成します。

「カボチャをあなたから買いたい」などの送金の目的もメッセージに追加されています。これで、メッセージ全体がボブの秘密鍵を使用して署名されます。リサはこのメッセージを受信すると、PKIの署名検証アルゴリズムとボブの公開鍵を使用して、メッセージが実際にボブから発信されたことを確認します。PKIがどのように機能するかは、このチュートリアルの範囲を超えています。興味のある読者は、PKIの詳細について、このサイトを参照してください。これにより、メッセージの発信者の信頼性が確立されます。それでは、メッセージのプライバシーを見てみましょう。

メッセージのプライバシー

リサは支払いを受け取ったので、ボブが購入したい電子書籍へのリンクを送信したいと考えています。したがって、リサはメッセージを作成し、画像に示すようにボブに送信します-

リサは「あなたがリクエストした私の電子書籍へのリンクはここにあります」などのメッセージを作成し、ボブのリクエストメッセージで受け取ったボブの公開鍵で署名し、2人で共有される秘密鍵を使用してメッセージを暗号化しますHTTPSハンドシェイク中。

これで、リサは、ボブだけが保持している秘密鍵を使用してメッセージをデコードできるのはボブだけであると確信しています。また、ボブとアリスだけが保持する秘密鍵で内容が暗号化されているため、メッセージを傍受した人は内容を復元できません。これにより、リサは自分の電子書籍へのアクセスがボブにのみ許可されることが保証されます。

PKIによって暗示される認証とメッセージプライバシーの両方の機能を見てきたので、「ビットコインとは」の章で述べた公開台帳を保護するためにビットコインがPKIをどのように利用するかを見てみましょう。

ご存知のとおり-最も一般的なPKIアルゴリズムはRSAとECDSAですが、ビットコインは後者を使用します。

PKIで最も重要な機能の1つは、ハッシュ関数です。ハッシュ関数は、任意のサイズのデータ​​を固定サイズのデータ​​にマップします。ビットコインは、サイズ256ビット(32バイト)のハッシュ(出力)を生成するSHA-256ハッシュ関数を使用します。これは画像に示されています-

ボブは、リサに注文しているときに、上記のようなメッセージを作成します。このメッセージは、32バイトのハッシュを生成するハッシュ関数を介してハッシュされます。このハッシュの美しさは、すべての実用的な目的で、ハッシュ(256ビットの数値)がメッセージの内容に対して一意であると見なされることです。メッセージが変更されると、ハッシュ値が変更されます。ハッシュ値が与えられただけでなく、元のメッセージを再構築することは不可能です。

ハッシュの重要性を見た後、マイニングというビットコインの別の概念に移りましょう。

ボブがリサの購入リクエストを作成するとき、彼はそれをリサだけに送信しません。むしろ、要求メッセージは、彼が接続しているネットワーク全体にブロードキャストされます。ボブのネットワークが画像に描かれています。

メッセージは、接続されているすべてのノード(マシン)に送信されます。図の一部のノードはマイナーとしてマークされています。これらは、ビットコインメッセージをマイニングするためのソフトウェアを実行するマシンです。ここで、このマイニングの意味を説明します。

マイニングプロセス

ネットワーク全体が広く分散しているため、ネットワーク内のすべてのマイナーは、特定の期間に複数のベンダーから複数のメッセージを受信することが予想されます。鉱夫が行うことは、これらのメッセージを1つのブロックにまとめることです。これは画像に示されています-

メッセージのブロックが形成された後、マイナーは前述のハッシュ関数を使用してブロックにハッシュを作成します。これで、サードパーティがこのブロックの内容を変更した場合、そのハッシュは無効になります。ちなみに、各メッセージにはタイムスタンプが付けられているため、ブロックのハッシュ値に影響を与えずに時系列の順序を変更することはできません。したがって、ブロック内のメッセージは改ざんから完全に保護されます。この事実がネットワーク内のすべてのトランザクションを保護するためにどのように使用されるかについて、さらに説明します。

さまざまな鉱夫によって作成されたブロックは、真に分散された公共台帳として知られているものを形成するために一緒にチェーンされています。

図8で前述したように、チェーン内の各ブロックには複数のメッセージ(トランザクション)が含まれています。チェーン内のブロックは、どのマイナーからのものでもかまいません。ブロックのチェーンを作成している間、前のブロックのハッシュが現在のブロックに追加されるというルールを順守します。

したがって、マイナーはブロックの作成中に、チェーンの最後のブロックのハッシュを取得し、それを独自のメッセージセットと組み合わせて、新しく作成されたブロックのハッシュを作成します。この新しく作成されたブロックはチェーンの新しい端になり、鉱夫によってブロックが追加されるにつれてチェーンは成長し続けます。

すべてのトランザクションにはタイムスタンプが付いているため、ピアツーピアネットワークに分散タイムスタンプサーバーを実装する必要があります。これにはいくつかの追加の実装が必要であり、それがこれから説明するプルーフオブワークです。各ブロックに、というアイテムをもう1つ追加します。Nonce 下の図に示すように-

ノンスは、ブロックのハッシュが特定の基準を満たすような数値です。この基準は、生成されたハッシュの先頭の4桁がゼロでなければならないというものである可能性があります。

したがって、生成されたハッシュは000010101010xxxのようになります。通常、マイナーはNonce値0から開始し、生成されたハッシュが指定された基準を満たすまでそれをインクリメントし続けます。

ハッシュ生成はランダムに機能し、制御できないことに注意してください。つまり、ハッシュ関数に特定のハッシュを強制的に生成させることはできません。したがって、先行ゼロが4つある目的のハッシュが生成されるまで、数回の反復が必要になる場合があります。ビットコインシステムでブロックを生成するための予想時間は10分です。マイナーはブロックのマイニングに成功すると、システムでそれを解放し、チェーンの最後のブロックになります。

正当なブロックを生成するために競合する複数の鉱夫がいることに注意してください。ビットコインシステムは、彼に特定のビットコインを与えることによって、最初に成功した鉱夫を授与します。一般に、より多くの計算能力を持つマイナーが初期の勝者になる可能性があります。これは、巨大な処理能力を持っている人によるシステム全体への攻撃を引き起こす可能性があります。このチュートリアルの最後に、攻撃とそれらがどのように軽減されるかについて説明します。

ここで、上記の手順を要約します。これがネットワークで起こることです-

  • ネットワーク上でアドバタイズしたサードパーティからサービスを取得したい人は、最初にトランザクション(目的の受信者へのメッセージ)を作成します。

  • 一定の期間にわたって、そのようなトランザクションを作成する多くの送信者(買い手)と受信者(売り手)が存在する可能性があります。

  • すべてのトランザクションは、ネットワーク上ですべてのノードにブロードキャストされます。特定のトランザクションがネットワーク内の他のすべてのノードに到達する必要はないことに注意してください。

  • 各ノードは、新しいトランザクションを1つのブロックにアセンブルします。各ブロックのトランザクションのセットは、他のブロックで作成されたブロックのセットから独立しており、当然、他のブロックとは異なることに注意してください。これは問題ではありません。システムは、ネットワーク上でブロードキャストされるすべてのトランザクションが、妥当な時間にわたって何らかのブロックに含まれることを保証します。一般に、送信者は、その努力のためにマイナーに一定量のビットコインを提供することによってノードにインセンティブを与えます。鉱夫は、より高いインセンティブを持つ人々にブロックに含めることを優先することを選ぶかもしれません。

  • ノードは、組み立てられたブロックのプルーフオブワークを見つける作業を行います。

  • ノードはプルーフオブワークを見つけると、アセンブルされたブロックをネットワーク上でブロードキャストします。

  • 新しいブロックを受信するノードは、ブロック内のすべてのトランザクションが有効であり、まだ使用されていないことを確認した後にのみ、それを受け入れます。

  • ブロックが有効であると認められた場合、それ自体の新しいブロックで作業しているノードは、トランザクションが重複しないように、そのブロックでトランザクションを再アセンブルする必要があります。ノードは、新しく作成されたブロックでプルーフオブワークを見つける作業を行います。そうしている間、それは前のハッシュとして受け入れられたブロックのハッシュを取ります。

  • 同様に、ブロックチェーンは永遠に成長し続けます。

ここで、システム全体がどのように機能するかを見てきたので、いくつかの副作用とそれらを解決する方法について説明しましょう。

ビットコイン-マイニングの章で見たように、マイナーは任意の期間に多くのトランザクションで溢れる可能性があります。ブロックの最大サイズはシステムで事前に定義されているため、特定の数のトランザクションのみをブロックに含める必要があります。

ブロック内のトランザクションの数は、事前定義されたブロックサイズと各ブロックの平均の長さによって決まります。ここで重要なヒントは、送信者がメッセージにあまり多くの情報を含めないようにして、メッセージを短くし、それによってマイナーが他の長いメッセージの前にそれを受け入れるように促すことです。

送信者は通常、特定の数のビットコインに関して取引手数料を追加して、鉱夫がブロックに早期に含まれるようにインセンティブを与えます。

ブロックチェーンを構築する際のもう1つの結果は、その単なるサイズです。ある期間にわたって、ブロックチェーン全体が大きくなりすぎて、ノードがディスクに保存できない場合があります。これは、次に説明するマークルツリーを使用することで解決されます。

画像に示すように、ブロック内のすべてのトランザクションがマークルツリーでハッシュされるため、ノード内のディスクスペースの問題は簡単に克服できます。

ブロックヘッダーには、前のブロックのハッシュ、Nonce、および Root Hashマークルツリーの現在のブロック内のすべてのトランザクションの。このようにRoot Hashブロック内のすべてのトランザクションのハッシュが含まれます。これらのトランザクションは、ディスク領域を節約するためにプルーニングされる場合があります。これで、ブロックチェーンは下の画像のようになります-

これにより、ディスクスペースを大幅に節約できます。この戦略は、他の人からの支払いを受け取ることに関心がある通常のクライアントによって使用されます。ただし、マイナーは完全なブロックチェーンを保存する必要があります。ここで、受信したコインをその出所まで追跡する機能がなくても、受信者が支払いをどのように検証するのかという疑問が生じます。これについて次に説明します。

ベンダーとして、過去に行われた特定の支払いを確認したい場合を考えてみます。前の図に示すように、マシンで保持しているブロックチェーンにはブロックヘッダーのみが含まれているため、検索しているトランザクションがブロックチェーンのコピーに含まれていません。

これで、目的のトランザクションにタイムスタンプが付けられているブロックが見つかるまで、ブロックチェーンのコピーを逆方向に検索できます。次に、選択したブロックのマークルツリーをリクエストすると、探しているトランザクションが得られます。これを下の図に示します-

ここでは、Tx103を探していると仮定します。Tx103の内容を確認できない場合がありますが、これは、Tx103が属するブロックと、チェーン内の後続のすべてのブロックによって受け入れられていることがわかります。したがって、このトランザクションを安全に信頼して、ビジネスを進めることができます。

これまで見てきたように、ビットコインネットワークには複数のマイナーが含まれています。2人の異なるマイナーが同時にプルーフオブワークを解決し、チェーン内の最後の既知のブロックにブロックを追加する可能性があります。これは下の画像に示されています-

これで、ブロック3の後に2つのブランチがあります。両方のブランチが有効です。したがって、次のマイニングされたブロックは、いずれかのブランチに追加できます。マイナーが新しくマイニングされたブロックをブロック104-Aに追加するとします。ブロック104-Aを含むブランチは、ブロック104-Bを含むブランチよりも長くなります。これは下の画像に示されています-

ビットコインアーキテクチャでは、最も長いブランチが常に優先され、短いブランチは削除されます。したがって、ブロック104-Bをパージする必要があります。このブロックをパージする前に、このブロック内のすべてのトランザクションがトランザクションプールに返され、マイニングされて将来のブロックに追加されます。これは、競合が解決される方法であり、ブロックの単一のチェーンのみがシステムによって維持されます。

すべてのビットコイン取引を記録している台帳が真に公開されているため、プライバシーが危機に瀕しています。世界の誰もが誰が誰に支払ったかを知ることができるでしょうか?従来の銀行システムは、記録の機密を保持することにより、この種のプライバシーを維持することができます。

ビットコインシステムのプライバシーは、別の戦略によって達成されます。ビットコインの送信者は誰に支払うかを知る必要があると言ったことに注意してください。そこで彼は、支払いを希望するベンダーの公開鍵を要求します。この公開鍵は匿名にすることができます。

ある意味で、一部のサービスのベンダーとして、誰かが支払い先を尋ねたとき、あなたは単に彼にあなたの公開鍵を送るでしょう。この公開鍵とあなたとの関連付けは、元帳のどこにも記録されていません。そうすれば、この取引以外の人は、取引された金額と、そのお金がどの公開鍵に支払われるかしかわかりません。

より高度なプライバシーを実現するために、トランザクションごとに、トランザクションごとに新しい秘密/公開鍵を生成して、自分が行った複数のトランザクションをサードパーティがグループ化できないようにすることができます。部外者にとって、これは単に、より小さな値の複数のトランザクションが行われ、それらが共通のソースにリンクされることは決してないことを意味します。

最後に、オンラインインターネットベースのシステムは悪用に対して脆弱です。ここで、ビットコインシステムに対するいくつかの可能なタイプの攻撃と、それらがどのように軽減されるかについて説明します。

ビットコインシステムで発生する可能性のある3つの異なるタイプの攻撃について説明します-

レースアタック

攻撃者は、おそらく2つの異なるマシンを使用して、同じコインを異なるベンダーにすばやく連続して送信する可能性があります。ベンダーが商品を配達する前にブロックの確認を待たない場合、ベンダーはすぐに、マイニングプロセス中にトランザクションが拒否されたことに気付くでしょう。この種の攻撃の解決策は、ベンダーが商品を発送する前に少なくとも1つのブロック確認を待つ必要があることです。

フィニーアタック

この場合、攻撃者はマイナーです。マイナーはトランザクションでブロックをマイニングし、システムでそれを解放しません。彼は2回目のトランザクションで同じコインを使用し、事前にマイニングされたブロックを解放します。明らかに、2番目のトランザクションは最終的に他のマイナーによって拒否されますが、これにはしばらく時間がかかります。このリスクを軽減するために、売り手は商品をリリースする前に少なくとも6ブロックの確認を待つ必要があります。

51%の攻撃

この種の攻撃では、誰かがネットワークの計算能力の51%を所有しているという非現実的な仮定を思いつきます。この種の攻撃の攻撃者は、コインを二重に使うプライベートブロックチェーンをマイニングします。

彼はコンピューティング能力の大部分を所有しているため、ある時点でのプライベートブロックチェーンは「正直な」ネットワークのチェーンよりも長くなることが保証されています。次に、彼はシステム内のプライベートブロックチェーンを解放し、正直なブロックチェーンに以前に記録されたすべてのトランザクションを無効にします。

この種の攻撃は、ネットワーク全体の計算能力の51%以上の計算能力を取得するのに非常に費用がかかるため、架空のものです。

この短いチュートリアルでは、ビットコインをケーススタディとして取り上げ、ブロックチェーンのいくつかの概念を紹介しました。ビットコインは、ブロックチェーンの最初の成功した実装です。今日、世界はいくつかの業界でブロックチェーン技術のアプリケーションを見つけました。そこでは、中央集権的な当局の関与なしの信頼が望まれています。だから、Blockchainの世界へようこそ。

さらなる読み物-

  • サトシによるオリジナルペーパー-ビットコイン:ピアツーピア電子キャッシュシステム

  • 公式サイト-Bitcoin.org