おわかりいただけただろうか……
ちゃんと説明できたか不安だけど、要するに「悪いやつにデータをいじられない仕組みの、すんごいやつってこと~?」と思ってもらえたらいい。
あと1対1でなにか説明している様子を写真で撮ると、何か騙している感が半端ないこともわかりました。
参考文献:
杉井靖典「いちばんやさしいブロックチェーンの教本」
大石哲之 「ビットコインはどのようにして動いているのか?」
最近とある仕事でブロックチェーンを勉強する機会があった。
あれでしょ?仮想通貨のやつでしょ?すっごい暴落したやつ!というイメージがあるブロックチェーンだけど、実は仮想通貨に限らず、いろんなことに応用できる技術なのだ。
これは覚えたことを誰かに説明しておかないと忘れちゃう。説明しよう。レゴブロックで。
のっけからダジャレで恐縮である。でもそんなに遠くない気がするのだ。レゴブロックでなんとかイケるのでは?というぼんやりした確信を頼りに進めよう。
いやしかし、仮想通貨(最近は暗号資産と呼ぶ)には苦い思い出もある人も多かろう。トラウマを刺激するつもりはないので、ここは最初に言っておこう。
実はブロックチェーンは「データを安全に保管する仕組み」であって、仮想通貨オンリーの技術じゃないんですよ。
ブロックチェーンって、データが改ざんされるとすぐバレるようになってるんです。だからその技術をお金に使うのが一番わかりやすい。自分の残高いじられたら嫌だもんね。
でも、他人にいじられたら嫌なデータって他にもたくさんある。契約関係とか流通とか著作権とか。ブロックチェーンってそっち方面にも応用できるよねー、という話になっているのだ。
じゃぁどうやってデータを安全に保管できんのか、ってのをこれで説明しますね。
レゴのブロックをデータだと思ってください。ここでは奥のロン毛がデータを管理しています。
銀行とかいろんなシステムって、データを管理しているところがあって、そこをみんなで見に行ってるじゃないですか。上の写真では、ロン毛にお任せしている状態。
でもロン毛のセキュリティがガバガバだったり、悪意を持ったりしたら、エラいことになっちゃう。ロン毛の頑張りにかかっている。
ロン毛ひとりに任せるのも大変だし、じゃぁみんなで苦労を分散したらいいんじゃない?
同じデータをコピーして、みんなで持ってればいいじゃん。これならひとりがヘマしても他の人がカバーできるし。せっかくのインターネットやん?それって素敵やん?(これを分散型台帳技術と呼ぶ)
なかには「俺の都合のいいようにデータを改ざんするぞ」みたいなヤツも出るわけです。いやな世の中ですね。
ただ、さっきみたいにみんなでデータを持っていると「この人が絶対正義」ってのがない。リーダーがいないから。
だからこのままだと、「誰が本当のことを言ってるの?」ってパニックになっちゃう。
真面目にデータを持っている人もいるけど、デマを流す人がいるかもしれないし、マシンが壊れちゃった人がいるかもしれない。
ホントか嘘かわからない情報が流れるなかで、全員で「これが正しいよね!」と意見を一致させるのは難しいのだ。(これを「ビザンチン将軍問題」と呼ぶ)。
ここで、「そんならデータの保管の仕方を工夫しようぜ」と生み出されたのが、ブロックチェーンである。
ブロックチェーンってその名の通り、データの「ブロック」が、「チェーン」でつながっているもの。
データがある程度たまったら、それをひとつの「ブロック」にする。
それを「1番ブロック」「2番ブロック」「3番ブロック」……とつなげていく。ほら、ブロックでチェーンだ。
と、ここで、撮影を担当していた藤原さんから質問が。
えーっとですね、ビットコインを例にすると、さっきの「ブロック」ってのは「取引データ」のかたまりなんですね。
お金を送った、送られた、が積み重なったデータになってます。これを本来変えるタイミングでないときに変えちゃうのが『改ざん』です。
預金通帳を思い浮かべてもらうといいんですけど、新しく1万円預金するのが「残高の変更」で、昔5000円プラスされた記録を1万円プラスに変えるのが「残高の改ざん」になります。
さて、データをブロックにしてつなげただけでは、改ざんは防げない。そこで、チェーンの「つなぎ目」を工夫します。
ここからはブロックの「つなぎ目」となる、「ハッシュ値」と呼ばれるものを作る話になります。いよいよ核心だ。
子どもに作ってもらったんだな、と思うだろう。実際頼んだのだけど、納期(子どもが寝る時間)がギリギリだったので作ってもらえなかった。みんなが寝たあとそれっぽい感じに作ったよお父さんは。
さて、この「ハッシュ関数」。何者かというと……。
説明の都合で、ハッシュ値をブロック4つ分で表現しているけど、実際はもっと長い。ビットコインで使われているハッシュ関数のひとつ、SHA-256だと64文字(256バイト)だ。
「デイリーポータルZ」というデータなら、こんなハッシュ値になる。
ハッシュ値の文字の並びはデタラメで、どんな並びになるか予測不能。同じ「デイリーポータルZ」であれば、毎回おんなじハッシュ値になる。
ちなみに、「あ」1文字だけのSHA-256ハッシュがこれ。
さっきの「デイリーポータルZ」のときと同じ64文字だ。どんなデータを元にしても、ハッシュ値の長さは同じになる。
同じデータからは同じハッシュ値しか出てこないし、データが変わるとハッシュ値も変わっちゃう……
お?これって「データが変わったらすぐバレる」って仕組みに使えるんじゃない?
1番ブロックのデータからハッシュ値を作って、それを1番ブロックにくっつける。
そして、1番ブロックのハッシュ値を、2番ブロックにもくっつける。ハッシュ値をブロックのつなぎ目にしちゃう。
こうすると、データの改ざんがあったとき「つなぎ目のあっちとこっちで、ハッシュ値が違うじゃん!」ってわかるのだ。
おつかれさまです。しかし本番はここからなのです……。
さっきのハッシュ値を出すマシーン(ハッシュ関数)、実際は一瞬でハッシュ値を計算してくれる。あんなにデタラメな文字列がピャッと出てくる。
ってことは、全部のブロックのハッシュ値を計算しなおして、再びブロック同士をつなぎ直しても、全然時間がかからない。
1個の改ざんのために全部変えちゃう、悪いやつならそれくらいのことをする。
じゃぁどうするのか。ハッシュ値がすぐ計算できるのがよくない。ならば、ハッシュ値の計算を面倒くさくしよう、と考えたのだ。ブロックチェーンを考えた人は。
ブロックのつなぎ目に使うハッシュ値に、一定の条件をつけるのだ。例えば「先頭から0が○桁連続するものとする」と決めちゃう。
20桁と決めたなら、こういうハッシュ値以外あたしゃ認めないよ、となる。
いやいや、さっきハッシュ値は「文字の並びがデタラメで予測不能」って言ったやん。こんなん狙って作れるわけないじゃん。
そうなのだ。こんなハッシュ値は狙って作れない。だから、データを付け足して何回も何回も試すしかない。
このとき、オレンジと茶色のブロックみたいに付け足すデータを「ナンス(nonce)値」と呼ぶ(Number used once:一回しか使わない、の略)。
で、試行錯誤の末に条件を満たしたハッシュ値が出たら「ちゃんとこれで計算すると出たから!」と証明するために、ナンス値とハッシュ値をブロックに追加する。
めでたく面倒くさくなったので、データの改ざんが難しくなった。よかったよかった。
さてナンス値の試行錯誤は、何万回何十万回何千万回と繰り返すため、計算はめっちゃ大変。コンピューターの力がすんごい必要になる。
そんな大変なこと、誰がやってくれるの? 管理者とかリーダーとかいないんでしょ?
ここからはビットコインの場合の話なんですけど、ビットコインは最初にナンス値を計算できた人にご褒美(ビットコイン)をあげるようになっている。
そんなこと言われたら黙っちゃいられない。世界中の人が一番乗りを目指して、CPUをぶんぶん回しながらナンス値を計算することになる。
これが「マイニング(採掘)」と呼ばれる行為だ。
マイニング、言葉だけでも聞いたことある人が多いと思う。実はこういうことなんですって。
ご褒美ほしさにみんな頑張ることで、結果としてデータの改ざんを防げるようになる。悪者もやる気を無くす。うまい仕組みだなぁと思う。
はーここまで長かった。以上がブロックチェーンのざっくりとした仕組みである(間違っていたら優しく教えてください)
ちなみにこの「みんなが力業でハッシュ値を探す」というやり方を「Proof of Work」という。でもこれって、すんごいCPUパワーを使うので、電気代も馬鹿にならない。もっと環境にいいやり方はないの?ということで、最近では「Proof of Stake」「Proof of Consensus」と呼ばれる別のやり方もある。あと全体公開する「パブリックブロックチェーン」に対して閉じた環境で行う「プライベートブロックチェーン」ってのもあって……。
ちゃんと説明できたか不安だけど、要するに「悪いやつにデータをいじられない仕組みの、すんごいやつってこと~?」と思ってもらえたらいい。
あと1対1でなにか説明している様子を写真で撮ると、何か騙している感が半端ないこともわかりました。
参考文献:
杉井靖典「いちばんやさしいブロックチェーンの教本」
大石哲之 「ビットコインはどのようにして動いているのか?」
▽デイリーポータルZトップへ | ||
▲デイリーポータルZトップへ | バックナンバーいちらんへ |