見出し画像

web3についてのレポートを読んでみた(6/N)

引き続きレポートを読んでいきます。

第8章 ブロックチェーン

これまでに記述した「web3」「NFT」「DeFi」などはこの「ブロックチェーン」技術から成り立っている。「ブロックチェーン」=「暗号資産」のイメージであるかもしれないが、実際は「暗号資産」は「ブロックチェーン」技術を使っているといったほうが近い。今回はブロックチェーン技術を理解するうえでの基本的な知識について記載してみたいと思う。

暗号化

非ITにとってはそもそも暗号資産の「暗号」とは何かを理解することから始めないといけないと思ったので暗号について調べることにした。暗号化とは簡単に説明すると「データ保護のために平文(暗号化されていないデータ)から暗号文をつくること」。平文から暗号文を作ることを「暗号化」、暗号文から平文にすることを「復号化」という。

暗号化と復号化

この暗号化及び復号化する際の考え方に「秘密鍵」(自身しか知らない)「公開鍵」(みんなが知ってる)という概念を使用する。「秘密鍵」と「公開鍵」はペアであり、「秘密鍵」から「公開鍵」を作ることは簡単であるが、「公開鍵」から「秘密鍵」を導くことは非常に困難という特徴をもっている。そのため「秘密鍵」は絶対に他人に知られてはいけない。「秘密鍵」さえあればなんでもできるといっても過言ではない。このように秘密鍵と公開鍵を使用する暗号方式のことを「公開鍵暗号方式」(非対象暗号化方式)と呼び、ブロックチェーンではこの方式を用いている。では次に、「秘密鍵」と「公開鍵」について具体的な役割について記述してみる。

秘密鍵と公開鍵

具体的なイメージで考えてみる。例えばAさんがBさんに1BTCを送付するとする。ブロックチェーンでは中央集権ではなくネットワークに参加している各コンピュータが内容を検証するので、取引の内容と間違いなくAさんから送られていることを確認したい。手順としては以下のとおりである。

  1. 各コンピュータはAさんの「公開鍵」を取得

  2. Aさんは「Bさんに1BTC送付する」という取引内容とそれを自身の「秘密鍵」で暗号化した取引内容を公開する

  3. 各コンピュータは公開された暗号化された取引内容をAさんの「公開鍵」を使って復号化する

  4. 各コンピュータは復号化した内容と公開された内容を比べ同一のものかを検証し一致すればAさんが「AさんからBさんに1BTC」を送付したい旨が間違いないことが証明できる

秘密鍵 と 公開鍵 

Aさんは「秘密鍵」を使って暗号化する。「公開鍵」は公開されているので、暗号化されたものを復号化する。「公開鍵は公開されてるから、誰でも解けるけど意味あるのか」思うかもしれないが、むしろ「誰でも解ける」必要がある。それは第三者であるコンピュータが検証をすることで内容が正しいこと証明する仕組みでブロックチェーンは成り立っているからである。逆にいうとブロックチェーン上ではAさんがBさんに1BTCを送付したい内容は公開されることになる。もちろんAさん自身ではなくあくまでもAさんがもっているウォレットからBさんの持っているウォレットへ送付したいという内容が公開されるだけなのでAさん自身の情報が公開されることはない。(Aさんとウォレットを繋ぐ情報が洩れてしまうとそのウォレットがAさんのものがわかってしまうので注意しなければならない。)

参考)3.トランザクション 電子署名とは?

ビットコインはどのようにして動いているのか?
大石哲之

ブロックチェーン

暗号について述べたところでブロックチェーンについて記述していきたい。
まずは、定義については以下

定義1
ビザンチン障害を含む不特定多数のノードを用い、時間の経過とともにその時点の合意が覆る確率が0へ収束するプロトコル、またはその実装をブロックチェーンと呼ぶ。
定義2
電子署名とハッシュポインタを使用し改竄検出が容易なデータ構造を持ち、且つ、当該データをネットワーク上に分散する多数のノードに保持させることで、高可用性及びデータ同一性等を実現する技術を広義のブロックチェーンと呼ぶ。


一般社団法人 日本ブロックチェーン協会
(JBA)
https://jba-web.jp/aboutus

非ITからすると定義自体に使用されている単語の意味が不明なので、1つずつ調べてみた。

  • ビザンチン障害

  • ノード

  • プロコトル

  • ハッシュポインタ


「ビザンチン障害」
「ビザンチン障害」について調べてみると「ビザンチン将軍問題」という合意形成の問題に関する障害のことを指すようだ。「ビザンチン将軍問題」とは、複数の将軍が戦争における行動に関する合意についての問題。複数の将軍はそれぞれ別の場所に駐屯しており、合意形成には伝令を使う必要があった。しかし、仮に伝令が敵につかまったり、伝令の意図的(裏切り)な内容の改ざんがあった場合に合意できないもしくは合意内容を間違えてしまうといった問題(障害)が発生してまう。下記にブロックチェーンに置き換えたイメージを作成してみた。

例えば、AさんがBさんへ1000円を支払ったとする。その情報があるコンピュータからブロックチェーン上の別のコンピュータへ伝令される。(ここではすでにAさんからBさんへ1000円を支払ったという事実は間違いないと検証されたとする。)

イメージ1

次に、情報を受け取ったコンピュータはまた別のコンピュータへ伝令をする。この時、一部のコンピュータが改ざんをし誤った伝令を行ったとする。この場合、その誤った伝令を受けたコンピュータは情報が一致しないため合意形成ができない。つまり、AさんがBさんへ1000円を支払ったことを合意できない状態となる。

イメージ2

このように合意形成ができない障害を「ビザンチン障害」と呼ばれる。
「ビザンチン将軍問題」については、https://www.nii.ac.jp/today/69/4.htmlを参考にした。


「ノード」

ノードとは、ネットワークの一部を形成する個々のコンピュータシステムのことを指します。暗号資産ネットワークにおいては、分散ノードが中央集権に代わって、トランザクションデータを検証し、中継します。この分散化により単一障害点が排除され、ネットワーク全体のレジリエンス(回復力)を高めます。

OKCOIN JAPAN 「ノード(Node)とは」
https://support.okcoin.jp/hc/ja/articles/4403551726361

ノードについては、https://note.com/jyagaimotarokun/n/nedf8580e6ad4 でも少し触れた。各ブロックチェーンに参加している個々のコンピュータを指している。ノードの役割については4つある。

  1. ルーティング:データを適切に転送すること(経路制御)

  2. ブロックチェーンデータベース:記録を残す

  3. マイニング:承認、検証および新規発行

  4. ウォレット:資産管理

ノードには種類があり、すべてのノードが上記のすべてをできるわけではない。すべてをできるノード(フルノード)や一部の機能のみのノードがある。


「プロコトル」

プロトコルとは、コンピュータでデータをやりとりするために定められた手順や規約、信号の電気的規則、通信における送受信の手順などを定めた規格を意味します。異なるメーカーのソフトウエアやハードウエア同士でも、共通のプロトコルに従うことによって、正しい通信が可能になります。
目的別にさまざまなプロトコルがあり、身近なものとして、インターネット接続に用いるTCP/IPや、Web閲覧などに用いるHTTP、メール送受信に用いるPOPやSMTPなどが挙げられます。いずれも末尾の「P」はProtocol(プロトコル)の略です。

https://www.keyence.co.jp/ss/general/iot-glossary/protocol.jsp

「ハッシュポインタ」

ハッシュポインタとは、ハッシュ値を使って隣同士のデータを連結するポインタ(変数)のことです。


ブロック

前置きが長くなったが、ブロックチェーンは文字どおり複数のブロックから構成されている。そのため、ブロックについて記述してみる。ブロックとは、記録の塊である。塊の中身は、「取引データ」「前ブロックのハッシュ値」「ナンス値」で構成されている。構成する要素のうち、「取引データ」「前ブロックのハッシュ値」は決められており「ナンス値」を決定し次のブロックへ「当該ブロックのハッシュ値」としてつないでいく。この塊は「マークルツリー構造」と呼ばれるデータ構造になっている。「マークルツリー構造」とはデータA、Bからそれぞれからハッシュ値を計算したあと、そのハッシュ値を足し合わせたものからさらにハッシュ値を算出する(ハッシュ化)。データの数が奇数の場合は、1つを複製して2つにしてそれをハッシュ化する方法で常にデータの数を偶数とする。このブロックはビットコインにおいては10分ごとに生成される。その10分間の取引データが格納される。

参考)ブロックチェーンって何?定義・データ構造から知る基本──『ブロックチェーン白書2019』より(1)

https://www.coindeskjapan.com/27446/#:~:text=%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0,%E3%81%A8%E5%91%BC%E3%81%B0%E3%82%8C%E3%82%8B%E7%90%86%E7%94%B1%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82

ハッシュ値

予想がつかない値を出力する関数に対し入力した場合に得られる決まった長さの値のこと。この関数(ハッシュ関数)は同じ入力であれば同じハッシュ値を出力する。ビットコインについてはSHA-256、RIPEMD(ライプエムディー)-160 という関数が採用されている。SHA-256については、NSA(米国国家安全保障局)が考案。RIPEMD-160はベルギーのルーヴェン・カトリック大学の学術的コミュニティーが考案。ちなみに256,160という数字はハッシュ長が256,160ビットであることを示している。(ほかにもRIPEMD-128,256,320などがある)

トランザクション

仮想通貨におけるトランザクション(Transaction)とは簡単にいえば取引のことで、前の持ち主から受け取った取引のハッシュ値と、送り先のアドレスなどを含め、所有者の秘密鍵で電子署名したものを言います。

https://bitbank.cc/glossary/transaction

ナンス値

number used once:一度だけ使用される数字
このナンス値自体に意味はない。ナンス値はランダムな値をとることができる。サイズは32ビットで、0から4,294,967,295(42億9496万7296)まで表現できる。ビットコインにおいては、膨大な計算で適切なナンス値を見つけることでビットコインが新規発行される。

合意形成の方法(コンセンサスアルゴリズム)

取引内容の合意形成の方法にはいくつかある。有名なものに「Proof of Work(PoW)」「Proof of Stake(PoS)」がある。ビットコインはPoW、イーサリアムはPoS(2022年9月15日にPoWからPoSへ移行した。The Merge (ザ・マージ))を採用している。今回はPoWにおける合意形成である「マイニング」について調べてみた。

マイニング(採掘)

ここでも具体的なイメージを使って記述してみる。前述した「AさんがBさんに1BTCを送付する」という場合を考えてみる。取引情報をもっているブロック1,2,3にそれぞれ「AさんがBさんに1BTCを送付する」という取引内容を加える。ブロック1からハッシュ値1が出力されそのハッシュ値1をブロック2に送る。ブロック2は取引内容にハッシュ値1を加えてハッシュ値2を算出しブロック3に送る。さらにナンス値を加えハッシュ値を算出する。このハッシュ値について、特定の条件(先頭に0が17個並ぶ)を満たすハッシュ値を算出するナンス値を見つける。これがマイニングである。

ブロック同士のつながり

マイニングする=ナンス値を見つける ということである。このナンス値を見つけるためには膨大が計算量が必要となる。ビットコインはこの導出に必要な時間を10分(ブロックの生成間隔)となるように難易度が自動的に調整される。そして、一番最初に適切なナンス値を見つけたコンピュータに新規のコインが与えられる。一番最初に適切なナンス値を見つけたコンピュータは新しいブロックを宣言して、見つけたナンス値とハッシュ値を含めたブロックの情報を他のコンピュータに伝達する。伝達されたコンピュータ側ではそのブロック情報が正しい(ナンス値を入れてみて0が17個並ぶかどうか)のか検証をする。署名、過去のデータとの整合性を確認して問題がなければデータが追加される。

ナンス値の発見とブロックの宣言


論文「ビットコイン: P2P 電子通貨システム」

最後にブロックチェーンの元となった論文について、読んだことはあるだろうか。これを機会に少し読んでみては…

https://bitcoin.org/files/bitcoin-paper/bitcoin_jp.pdf

今回はブロックチェーンという大きな枠組みであったため、かなりのボリュームになった。まだまだ調べきれていない部分や間違った理解をしている部分もあるだろう。前提となる技術にフォーカスしたためレポートの中身にはいることがほとんどできなかったので、また別途学習していきたと思う。

レポートも残り1/3となってきた。次は第9章のDAOについて記述してみたいと思う。

この記事が気に入ったらサポートをしてみませんか?