ブロックチェーンについて勉強する機会が会ったので共有します。
開発とかの部分とかではなくて、ブロックチェーンの仕組み、改ざんできない理由をなるべくわかりやすく書きました!
対象者
・ブロックチェーンは聞いたことあるけどよくわからない人
・ブロックチェーンの概要を勉強したい人
・ブロックチェーンを人に説明できるくらいにはなりたい人
#ブロックチェーンとは?
ブロックチェーンとは、「デジタル上の透明性を高め、データの改ざんを難しくする仕組み」のことです。よく分散型台帳とか言われていますね。
ブロックチェーンは、データの改ざんが難しいと覚えておけば良いと思います。
ブロックチェーンの仕組み
わかりやすいのでビットコインを例に説明します。
例えば、
「AさんがBさんに10ビットコインを送金」するとします。
これは一つのブロック(トランザクション)となって、最初にトランザクションプールという場所に入ります。
この段階ではまだ取引は成立してません。
ブロックの中には、
・取引データ(ここでいうと、「AさんがBさんに10ビットコインを送金」というデータ)
・一つ前のブロックのハッシュ値
・ノンス
の3つのものが入ってます。
ハッシュ値とは、何かしらの文字列を通すとそれに対して返ってきたランダムな値のことです。(その処理を行う関数をハッシュ関数と言います。ハッシュ値はハッシュ関数を通した値って言い方もできます)
例えば、「いちご」をハッシュ関数に通すと、「39jieg52s9......」みたいな値になって返ってきます。(この値はランダムなので適当に書きました)
この「39jieg52s9......」がいちごのハッシュ値です。
ハッシュ値の特徴で、ハッシュ値からもとの文字列はわからないようになってます。つまり、「39jieg52s9......」をみても、「いちご」のハッシュ値だと理解することはできないようになってます。
ちなみにハッシュ値の桁数は一律に決まってます。(64桁か256桁かそんな桁数だったと思います、、)
次にノンスです
ノンスは「正しいハッシュ値を見つけるための文字列」のことです。ちゃんと説明しますね。
ブロックの中には先ほど言った3つのものが入ってます。それを取引として正式に承認するには、正しいブロックのハッシュ値が必要になります。
ブロックのハッシュ値とは、上の3つ(取引データ、一つ前のブロックのハッシュ値、ノンス)を合わせたハッシュ値のことです。
例えば
・取引データを「あああ」
・一つ前のブロックのハッシュ値を「いいい」
・ノンスを「ううう」
とすると
このブロックのハッシュ値は、上の3つ合わせた「あああいいいううう」をハッシュ関数に通した「gn74gfg900sw...」の様な値になります。(この値もランダムです)
「gn74gfg900sw...」がこのブロックのハッシュ値です。
仮に取引データを「ああえ」とかに変えると、ブロックのハッシュ値も変わります。(「ああえいいいううう」をハッシュ関数に通すことになるので)
いま、「AさんがBさんに10ビットコインを送金」という取引は承認されていません(トランザクションプールにいます)
これを承認するには、
「ブロックのハッシュ値の頭4つが0000から始まるハッシュ値になるようなノンスを見つける」ことが必要です。
頭4つが0000??って感じですよねw
ブロックの中身の3つのうち、2つは決まった値です。その2つは取引データと一つ前のブロックのハッシュ値です。
前者はもちろん決まってますし、後者もブロックは繋がっているので決まった値です。
逆に変えることができるのは、ノンスだけです。
このノンスを変えて頭4つが0000のハッシュ値を見つける必要があります。
例えば先ほどの例だと、
ブロックのハッシュ値は「gn74gfg900sw...」なので頭4つは「gn74」なのでこのままだと承認されません。
ここでノンスの値を変えます(仮に「かかか」とします)
そうするとブロックのハッシュ値ももちろん変わります。(仮に「hdownd57...」とします)
これもダメですね。頭4つが0000ではありません。
またノンスを変えましょう(「さささ」とします)
ブロックのハッシュ値も変わります。(「0000hd7kf...」とします)
お!頭4つが0000になりましたね!これでこのブロックは承認され、「AさんがBさんに10ビットコインを送金」という取引は成立します!
この場合、このブロックのノンスは「さささ」で、ブロックのハッシュ値は「0000hd7kf...」になります。
つまりこの「さささ」というノンスを見つけることでそのブロックの取引が承認されるのです。これを「マイニング」と言います。
承認されると一番後ろのブロック(一つ前に承認されたブロック)に繋がります。ブロックは基本的に一本に繋がっています。またブロックが生成されれば、それを承認するためにノンスを見つけます。
これがブロックチェーンの仕組みです!
改めて簡単にまとめると、
取引をするとブロックが生成される=>これを承認するにはノンスをいじって0000から始まるブロックのハッシュ値を見つける=>見つけたら承認され、チェーンの最後尾にそのブロックが追加される!!
こんな感じです!
ちなみにビットコインでは、10分に1つのブロックが承認されます。つまり「AさんがBさんに10ビットコインを送金」という取引以外にも、10分の間に行われた世界中の取引が一つのブロックの取引データとして入っています。
じゃあなぜ改ざんできないのか
改ざんできない理由は、
「ブロック自体に、一つ前のブロックのハッシュ値が入っている」からです。
例えば、
Bさんが「AさんがBさんに10ビットコインを送金」を
「AさんがBさんに50ビットコインを送金」にして儲けようとしたとします。
しかしこのデータの内容を(10から50)変えただけで、このブロックのハッシュ値も変わってしまいます。(頭4つが0000じゃなくなるので承認もされなくなります)
一つのハッシュ値が変わるとそれ以降に承認されたハッシュ値も全て変わってしまうので、どこが変更されたか一目瞭然でわかります。
なので改ざんするには、それ以降のブロックのハッシュ値に対するノンスを見つける必要があり、それは実質不可能です。
全てのブロック(一番目のブロック以外)は前のブロックに依存しているので、一つ変更しただけですぐにわかっちゃうということですね。
ちなみにブロックの承認にはみんなの合意が必要で、51%以上の合意があればそのブロックは承認され報酬がもらえます。(ビットコインが付与されます)
つまり、
一番最初にハッシュ値が0000~になるようなノンスを見つけた => みんなで本当にこのノンスが合っているのか答え合わせ => 51%以上合意が取れれば承認!見つけた人は報酬ゲット!
って流れです!
こうやってみんなでデータを共有しながら処理を進めていくので、ブロックチェーンは非中央集権的なシステムと言われています。
まとめ
ブロックチェーンはデータの改ざんが難しい!!
とりあえずこれがわかれば十分だと思います!
何か間違いとかあればご指摘お願いします!