ブロックチェーン まとめ

目次:
*暗号通貨とは?

*トランザクションについて

*1つ目の問題「多重支払い」とブロックチェーンの関係性

*2つ目の問題「改ざん」とProof of workの関係性

*Bitcoinが解決した2つの問題

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

*暗号通貨とは?

暗号通貨は、2008年にSatoshi Nakamotoが提案したBitcoinを始め、インターネット上でしか使えない非中央集権かつ分散型の電子マネーのことです。

・非中央集権かつ分散型の意味

非中央集権かつ分散型とは、管理や決定権などが中央に集中しておらず、ある程度の広がりがあることを指します。逆に中央集権の場合、貨幣で考えると、国が貨幣を発行したり管理したり何か問題が起きればその機関しか解決することが出来ず、仲介コストがかかります。

これが中央集権の問題ともされています。この問題を避ける為に提案されたのが、非中央集権かつ分散型の仕組みです。しかし、この提案には技術的な問題が大きく2つありました。

・2つの問題提起

1つ目が、「多重支払い問題」でこれは、貨幣としての価値や信頼を失うことが一番大きな損失ではないでしょうか。物理的な貨幣の移動だと自分の手元から1枚のコインがなくなり相手に渡される。これが意味するのは、自分が持っていたコイン1枚分の価値が自分から無くなり、相手に移動したということです。

しかしインターネット上で不正を働けば、この価値の移動を操作することが出来てしまうのです。例えば、1枚のコインを相手と自分に送るようにします。すると自分はこのコインを無限に生産することが出来てしまい、コイン自体の価値がなくなってしまいます。なぜなら、無限にコストをかけずに作ることが出来、誰もそのコインの価値を信頼しないからです。また、不正の際にどこに価値が移動したらわからなくなり、価値があると信じ受け取った相手のコインには実は価値が無く、自分に送っていたコインに価値があるなどもあると思います。これは、商品と貨幣の価値の交換(商品購入)の際に相手を騙して自分だけ商品を貰うと考えるとわかりやすいかもしれません。

2つ目は、「改ざんの問題」があります。これは、これまで行った取引の中で価値の移動を変えることなどが挙げられます。これも商品購入の例で例えると考えやすいのですが、商品を購入してその取引を改ざんしお金は支払っていない(自分からお金の移動がなかったことにする)が商品は購入したなどの行為がわかりやすいと思います。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

*トランザクションについて

暗号通貨でのトランザクションは、取引の記録として使われる事が多いです。暗号通貨の受け渡しでは、コインの所有権の移動というデータを記録します。送金の際には、不正が行われないように電子署名技術が使われており、Bitcoinのリファレンス実装ではECDSA(楕円曲線暗号)を用いています。

ここからAlisからBobへの送金のトランザクションの中身を考えていきます。このトランザクションで必要なデータが3つあり、

一、コインの所有権がAlisにある事

二、送金先がBobな事

三、トランザクション作成者はAlisな事

です。それぞれで考えていきます。

一、ではまず、Alisの前の所有者からAlisへコインが送金された証明データ(トランザクションデータ)を記載すれば大丈夫です。これは、トランザクションを作成する際に過去のUTXOの情報を取得し参照されるコードがありそれを使っています。

二、では送金先への指定にBobのアドレス情報(公開鍵)を使います。

三、送金で使う金額分のUTXOに対し、Alisの秘密鍵で電子署名を行い使用可能にします。コードで書くと、トランザクション作成時はUTXOのアンロック時にだけ使うイメージではなくトランザクション全体に秘密鍵での電子署名を利用している為

コインのinputの総量とoutputの総量は同じだが、outputの中には手数料が含まれている。その理由としては、マイナーの給料代とトランザクション乱発によるいたずら防止があります。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

*1つ目の問題「多重支払い」とブロックチェーンの関係性

多重支払いを確実に検知する為には、2つのルールを適用してみる。

一、トランザクションに順序をつける

二、過去のトランザクションと矛盾するものは拒否する

Bitcoinでは一定期間に発生したトランザクションをまとめたブロックという形で取引を記録していきます。そして、作成された順にブロックをチェーン上に繋げていく事で多重支払いが出来ないようにする仕組みはブロックチェーンと言われています。ブロックは一番初めに作られたブロック(genesisblock)から順に番号がつけられています。BitcoinネットワークではP2Pネットワークを使っているので、たまたま同じタイミングでブロックが生成されることがあります。そうすると、次や次の次のブロックが積み重なりそこから一番長いブロックが正しいとみなされ、そこからブロックが続いていきます。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

*2つ目の問題「改ざん」とProof of workの関係性

どのノードでもブロックを自由に生成できると上記であるようにブロックを分岐させ、不正を施したトランザクションを含めたブロックを作り新しいブロックを積み重ねていきます。すると、長いブロックチェーンを正当だとみなすので簡単にトランザクションの改ざんが出来てしまうのです。

改ざんを防ぐ手段ということは、改ざんにかかるコストを莫大にしてあげれば改ざんをするより正しい事をちゃんとした方がいいということになります。詳しく見ていくと、ブロックを作成できるノードを、大量に計算コストが必要な問題を用意しそれを一番最初に解けた人が勝者となり、ブロックの生成権を獲得するというルールを作れば良さそうです。この仕組みをProof of workと言います。

ここで大量に解散コストが必要な問題を作る際に、コンピューターが問題を実行する際に適した問題としてハッシュキャッシュという問題を使います。

この問題は、作るのが簡単+とくのは難しい+答え合わせは簡単という性質を持っています。このハッシュとはハッシュ関数の事で、入力を与えるとランダムにハッシュ値を呼ばれる整数値がある値の範囲内で出力される関数の事を示します。この解くのが難しいとは、ハッシュ関数の性質上同じ出力を出す為の公式やヒントが一切ないことに由来しています。

ただし、答えあわせは同じ入力値であれば同じ出力値が出てくるので検証が簡単なのは明らかです。ハッシュキャッシュをブロック生成と組み合わせるには、ブロックにnonce値と呼ばれる、ハッシュ値調整用の変数領域を新たに付け加えます。nonceを沢山値を変えながら、ある値以下となったらブロックが生成されるとします。こうする事でハッシュ値を沢山計算した(=多くのCPUパワーを費やした)人が優先的にブロックを作成することになります。

このハッシュ値を計算し、正しいブロックを見つける行為のことをマイニングと言います。この仕組みでは、改ざん者は正規のブロックチェーンを分岐させ単純計算で、ネットワーク全体のCPUに足して過半数以上のハッシュレートを確保しなければいけないです。その大変さは、スーパーコンピューターを使って何百年もかかるということを見れば一目瞭然です。

すなわち、ここまで難しいことを本当に莫大なコストをかけてすることが懸命なのかということですね。

逆に、このマイニングをする人たちのモチベーションは、先ほど出てきたマイナーへの給料代=報酬とブロックを最初に作成した人にはBitcoinの新規発行権である12.5BTCが与えられるので、この2つが大きい要因ではないでしょうか。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

*Bitcoinが解決した2つの問題

・多重支払い

ブロックチェーンにより、トランザクションの順序化を行い過去のトランザクションと矛盾する要求を拒否することで解決。

・改ざん

Proof of workによりブロックの生成に高いCPUパワーを要求することで、参加ノードの過半数のCPUパワーを独占しない限り改ざんが出来ないようにすることで解決。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

*まとめ
今回は、講座の資料で学んだことをこれまでの知識とコードの力を借りてまとめて行きました。まだ説明が多く読みづらいが自分では昨日より理解がはるかに進みました。明日は、マイニングとPrrof of workについて記事を書いて行きます!

    冨澤 宝斗 (Takato Tomizawa)

    Written by

    琉球大学2年次 物理専攻 | ブロックチェーン | 今休学して東京にいます