どうもゴンザレスです。
将来的には小さなことでも良いので起業したいと思っていますが、そのジャンルとして個人的にはブロックチェーンに注目しています。
なので、まずはブロックチェーンを理解しないと始まらないということで今回はビットコインを例にブロックチェーンを分かりやすく解説します。
ブロックチェーン
下の図の右側のように、トランザクションと呼ばれる取引履歴(「誰の財布から誰の財布にどれだけのビットコインが移動したか」という情報)がまとめられたものを"ブロック"と呼びます。(ビットコインアドレスというのは、銀行でいうと口座番号のようなものです。)
そして、下の図の左側のように、過去のブロックから未来のブロックへある関連性を持ちながら繋がっていきます。
このようにブロックが鎖のように繋がっていくことから、ブロックチェーン、と言うわけです。
このブロックチェーンはインターネット上の複数のパソコンで管理されていて、それぞれのパソコンが一番最初のブロックから現在のブロックまでのすべてのデータを持っています。
ウォレット
ウォレットとは、ビットコインの財布の役割をするソフトウェアです。ソフトウェアの意味が分からない人は、WordやExcelを思い浮かべてください。同じようにダブルクリックするとウォレットというソフトが立ち上がるイメージです。
現実の財布と異なるのは、ウォレットにはビットコインは入っていない、ということです。
ウォレットには「秘密鍵」というものが入っています。「秘密鍵」とは0と1を無作為に256個並べたもの(「01101000100....」こんな感じ)です。「秘密鍵」と「ビットコインアドレス」には関連性があります。そのおかげて、例えばAさんのウォレットの残高を確認したいときは、Aさんのウォレットの「秘密鍵」を使ってブロックチェーン上の「Aさんのビットコインアドレス」に振り込まれて未使用のビットコインの枚数を数えます。数えた合計のビットコイン枚数がAさんのウォレットの残高ということになります。このように、ウォレットにはビットコインは入っておらず、ブロックチェーン上でAさんが所有権を持っているビットコイン枚数を数えて、あたかもそれがウォレットの中に入っているかのように見せているのです。
あと、「秘密鍵」は他人に漏らしてはいけません。「秘密鍵」が漏れることはビットコインの所有権が奪われるのと同じことです。
秘密鍵と公開鍵とビットコインアドレス
公開鍵という言葉が急に出てきましたが、秘密鍵から公開鍵を作り公開鍵からビットコインアドレスを作る、というように秘密鍵からビットコインアドレスを作るときの中間生成物です。また、上で秘密鍵とビットコインアドレスには関連性があると書いたのはこういうことです。
秘密鍵から公開鍵を作るときには楕円曲線上のスカラー倍算という計算が用いられ、公開鍵からビットコインアドレスを作るときはハッシュ関数を使って計算します。
そして、楕円曲線上のスカラー倍算とハッシュ関数は事実上一方向の計算しかできません。どういうことかというと、秘密鍵から公開鍵を求めることはできても公開鍵から秘密鍵を求めることはできません。同様に、ビットコインアドレスから公開鍵を求めることもできません。よって、公開鍵やビットコインアドレスを他人に知られても秘密鍵は漏れません。
ビットコイン取引の流れ
AさんからBさんへ1BTC(ビットコインを1枚)送ることを例にとって説明します。
AさんのウォレットからBさんのウォレットにビットコインを送るには、AさんはBさんのビットコインアドレスを知っていないといけません。なので、BさんはAさんにビットコインアドレスを教えます。
Aさんのウォレットにて、「AさんのビットコインアドレスからBさんのビットコインアドレスへ1BTC送る」というトランザクションを生成し、インターネット上のビットコインネットワークを構築するパソコン(ブロックチェーンを管理するパソコン)に送信します。
すると、このトランザクションを受け取ったパソコンは、ブロックチェーンに次に繋げようと準備しているブロックにトランザクションをコピーします。そして、隣のパソコンにトランザクションをパスします。隣のパソコンも同様の動作をして、次々にトランザクションをパスすることで、ビットコインネットワーク上のすべてのパソコンがトランザクションを準備しているブロックに取り込みます。
こんな感じです。先ほどのトランザクションが、トランザクション1なのか2なのか3なのかというのは分かりません。実際には、AさんからBさんへのトランザクション以外にもたくさんのトランザクションが流れているからです。
ここから各パソコンがある計算を始めます。この計算が完了したときにブロックが完成します。ブロックを完成させたパソコンは、すぐさま完成したブロックをネットワーク上のパソコンみんなに送ります。すると、すべてのパソコンが自分の持っているブロックチェーンの最後に送られてきたブロックを繋げます。繋げたブロックの中のトランザクションを確認して、現在計算中のブロック内に同じトランザクションがあった場合は、計算中のブロックの中から該当のトランザクションを削除して、今一度計算やり直しです。
こんな風にして、どんどんとブロックチェーンは長くなっていきます。
そのうち「AさんのビットコインアドレスからBさんのビットコインアドレスへ1BTC送る」トランザクションもブロックチェーンに取り込まれることになるわけです。
「AさんのビットコインアドレスからBさんのビットコインアドレスへ1BTC送る」というトランザクションがブロックチェーンに取り込まれたということは、BさんのウォレットからBさんの秘密鍵を使って「Bさんのビットコインアドレス」に振り込まれて未使用のビットコイン枚数を数えると1BTC増えていることになります。
まとめ
今回はブロックチェーンのイメージを掴んでいただくことを最優先に書きました。ですので、ブロックチェーンの透明性や改竄耐性、ブロックを完成させるための"ある計算"についての説明等、本質とも言える部分を端折った形になっています。次回はこのあたりを説明できたらと思います。
ここまで読んでいただき感謝いたします。
ブロックチェーンがなぜ改竄されにくいのかは以下。