ブロックチェーンの特徴の1つに「対改ざん性(一度格納した情報は、たとえ管理者権限を持っている人でも改ざんができない)」があります。その改ざんを困難にするためのマイニングと呼ばれる仕組みをゲーム感覚で学べるサービスを作ってみました:
https://dotnsf.github.io/nonce/
少しだけ補足すると、これはブロックチェーンのマイニングの仕組みをシミュレーションするサービスです。実際のマイニングよりもかなりシンプルなマイニング作業を実際に行いながら、nonce やハッシュの仕組みを理解し、ブロックチェーンがなぜ改ざんできない仕組みと言われているのかを遊びながら理解することを目的に作りました。
なお、画面含めて今後変更が加わる可能性があることを申し上げておきます。以下は 2019/01/28 時点でのサービス内容をもとに紹介しています。
ではチュートリアルっぽく、このサービスを紹介していきます。まず上記 URL に(PC の)ウェブブラウザでアクセスすると、以下のような画面が表示されます(スマホのブラウザで見えないことはないと思いますが、情報量の多いページで横スクロールも併用する必要があり、現状スマホからはかなり使いにくいと思っています。どうしてもスマホで利用する場合は画面を横にしてお使いください):
この画面は目的別のパーツに分かれています。ここからは各パーツの意味も含めて順に紹介していきます:
↑の表や意味は後でもう一度確認するとして、まずは一度ゲームを進めてみます。
その前に1つだけ、ゲームスタート時点で hash 値のボタンが上図のように赤ではなく、稀に緑になっている可能性があります。その場合は(本当はゲーム的にはすごくラッキーなんですが・・・)hash 値のボタンが赤くなるまで何度か nonce 値の、初期状態で1と書かれているボタンを押してください(ボタンを押すたびに数値が増えていきますが、とりあえずは無視してください)。以下の説明では hash 値のボタンが赤で始まることを想定しています。このボタンの色の意味は後述します。
【ゲームの目的】
一定の数(オプション Goal の値、デフォルトでは3)のブロックをブロックチェーンに格納することが目的です。なるべく短い時間でブロックチェーンを完成させましょう。
ブロックはマイニングルールと呼ばれるある条件を満たせばブロックチェーンに格納することができます。マイニングルールを満たしていないブロックはブロックチェーンに格納できません。その条件を満たすよう、注意しながら操作し、条件を満たしたタイミングでブロックチェーンに格納します。これを一定の数繰り返すことでゲームをクリアできます。
【ゲームの遊び方】
ややこしい話は後回しにして、とりあえずゲームとしての遊び方を紹介します。すごくシンプルです。
nonce 値のボタンを1回押すごとに nonce 値は1つ増え、同時に hash 値が変化します:
そして nonce 値を増やしていくと hash 値がある条件を満たした時にボタンは緑色になります:
そして hash 値のボタンを緑色の時に押すとブロックがブロックチェーンに格納されます。なお、赤の時に押してもマイニングルールを満たしていないためブロックは格納されません。以下のようなメッセージが表示されます。このままマイニングを続ける場合は「キャンセル」を選択してください:
表の一番右の列にブロックが格納されます(通常、この時点でブロックは暗号化されて格納されますが、このサービスでは暗号化せずにそのままマイニングしてそのまま格納しています)。1つのブロックが格納されると、次のブロックが下段に表示されます。このブロックも同様に hash 値のボタンが緑になるまで nonce 値のボタンを押し、緑になったら押してブロックチェーンに格納します:
これを繰り返して、ブロックをブロックチェーンに格納していきます:
一定数(デフォルトでは3)のブロックがブロックチェーンに格納できたらゲームクリアとなります。ゲームクリア時にゲーム開始からクリアまでかかった時間と合わせてゲームクリアの情報が表示されます:
なお途中で赤のボタンを押して、「自動計算しますか?」の問いに「OK」を選択するとギブアップしたことになります。ギブアップすると hash 値のボタンを緑にすることはできますが、クリア時に「途中で自動計算を使いました」というメッセージが表示されます):
また hash 値のボタンがいちど緑になった後、そのボタンを押す前に nonce 値のボタンを押してしまった場合、nonce 値を戻すことはできません。そのまま更に nonce 値を1つずつ増やして、再度マイニングルールを満たす nonce 値を探す必要があります。
と、こんな感じのゲーム感覚でマイニングを体験するサイトです。サービスそのものは Github Pages を使って、(CDN 以外は)1枚の HTML で作りました:
https://github.com/dotnsf/nonce/tree/gh-pages
本当は別の機会にちゃんと説明したいのですが、長くなりそうなのでシンプルに「なぜブロックチェーンに記録されたデータの改ざんが難しいのか」を説明しておきます。要するに記録したデータに対して、マイニングというそれなりに CPU パワーを必要とする処理を施した上でのチェックビットのような仕組みを加え、かつそのマイニング結果を前後のブロックに持たせてつなげる(「ハッシュポインタ」)ことが対改ざん性としての鍵になっているのです(更に実際にはデータに暗号化を加えることもあります)。 この仕組みによって、記録したデータを単純に(例えば振込額を増やすとか、振込先を変えるとか)書き換えるとその hash 値が変わり、記録内容とは異なってしまうので、書き換えたことがすぐにバレてしまいます。書き換えをごまかすためには hash 値を再計算する必要があるのですが、マイニングルールを満たす条件があるため、ここでそれなりの処理能力が必要になります。更に1つのブロックのマイニングが完了して書き換えに成功したとしても、次のブロックは1つ前の(つまり今書き換えたばかりの)ブロックの hash 値を持っているので、やはりここでも書き換えがバレてしまいます。これをごまかすためにはこのブロックの hash も書き換える必要があり、ここを書き換えると再度マイニングが必要になり・・・ とブロックチェーンの最後のブロックまで全てマイニングし直して書き換える必要がでてきてしまいます。マイニングルールが1桁とか2桁程度であればまだ処理できるかもしれませんが、実際の仮想通貨取引では 10 桁以上のマイニングルールが課せられており、全てのブロックを書き換えることは事実上不可能とされているのでした。
このサービスではマイニングが完了したブロックを仮想的なブロックチェーンに格納していますが、近い将来にこのページの HTML を改良して認証を加え、自動計算なしでクリアしたら本当にその記録をブロックチェーンに格納する、というものをリリースする予定です。お楽しみに。
https://dotnsf.github.io/nonce/
少しだけ補足すると、これはブロックチェーンのマイニングの仕組みをシミュレーションするサービスです。実際のマイニングよりもかなりシンプルなマイニング作業を実際に行いながら、nonce やハッシュの仕組みを理解し、ブロックチェーンがなぜ改ざんできない仕組みと言われているのかを遊びながら理解することを目的に作りました。
なお、画面含めて今後変更が加わる可能性があることを申し上げておきます。以下は 2019/01/28 時点でのサービス内容をもとに紹介しています。
ではチュートリアルっぽく、このサービスを紹介していきます。まず上記 URL に(PC の)ウェブブラウザでアクセスすると、以下のような画面が表示されます(スマホのブラウザで見えないことはないと思いますが、情報量の多いページで横スクロールも併用する必要があり、現状スマホからはかなり使いにくいと思っています。どうしてもスマホで利用する場合は画面を横にしてお使いください):
この画面は目的別のパーツに分かれています。ここからは各パーツの意味も含めて順に紹介していきます:
# | パーツ | 意味 |
---|---|---|
1 | オプションの内容 | このゲームのパラメータ(この図では初期値のまま Mining Level = 1 と Goal = 3 となっている) |
2 | ブロック番号 | 何番目のブロックかを示す数値。 上図の場合、1なのでこれが最初のブロック |
3 | body 値 | これからブロックチェーンに格納したいと思っている内容 |
4 | nonce 値 | 整数値(詳しくは後述、最初は1) |
5 | hash 値 | body と nonce(ブロック番号が2以上の場合は1つ前のブロックに格納されたハッシュ値も)から計算したハッシュ値 |
6 | 格納されたブロック | 上記の nonce 値とハッシュ値の値が確定してブロックチェーンに格納されたブロック(この図では空なので、まだ格納していない) |
↑の表や意味は後でもう一度確認するとして、まずは一度ゲームを進めてみます。
その前に1つだけ、ゲームスタート時点で hash 値のボタンが上図のように赤ではなく、稀に緑になっている可能性があります。その場合は(本当はゲーム的にはすごくラッキーなんですが・・・)hash 値のボタンが赤くなるまで何度か nonce 値の、初期状態で1と書かれているボタンを押してください(ボタンを押すたびに数値が増えていきますが、とりあえずは無視してください)。以下の説明では hash 値のボタンが赤で始まることを想定しています。このボタンの色の意味は後述します。
【ゲームの目的】
一定の数(オプション Goal の値、デフォルトでは3)のブロックをブロックチェーンに格納することが目的です。なるべく短い時間でブロックチェーンを完成させましょう。
ブロックはマイニングルールと呼ばれるある条件を満たせばブロックチェーンに格納することができます。マイニングルールを満たしていないブロックはブロックチェーンに格納できません。その条件を満たすよう、注意しながら操作し、条件を満たしたタイミングでブロックチェーンに格納します。これを一定の数繰り返すことでゲームをクリアできます。
【ゲームの遊び方】
ややこしい話は後回しにして、とりあえずゲームとしての遊び方を紹介します。すごくシンプルです。
nonce 値のボタンを1回押すごとに nonce 値は1つ増え、同時に hash 値が変化します:
そして nonce 値を増やしていくと hash 値がある条件を満たした時にボタンは緑色になります:
そして hash 値のボタンを緑色の時に押すとブロックがブロックチェーンに格納されます。なお、赤の時に押してもマイニングルールを満たしていないためブロックは格納されません。以下のようなメッセージが表示されます。このままマイニングを続ける場合は「キャンセル」を選択してください:
表の一番右の列にブロックが格納されます(通常、この時点でブロックは暗号化されて格納されますが、このサービスでは暗号化せずにそのままマイニングしてそのまま格納しています)。1つのブロックが格納されると、次のブロックが下段に表示されます。このブロックも同様に hash 値のボタンが緑になるまで nonce 値のボタンを押し、緑になったら押してブロックチェーンに格納します:
これを繰り返して、ブロックをブロックチェーンに格納していきます:
一定数(デフォルトでは3)のブロックがブロックチェーンに格納できたらゲームクリアとなります。ゲームクリア時にゲーム開始からクリアまでかかった時間と合わせてゲームクリアの情報が表示されます:
なお途中で赤のボタンを押して、「自動計算しますか?」の問いに「OK」を選択するとギブアップしたことになります。ギブアップすると hash 値のボタンを緑にすることはできますが、クリア時に「途中で自動計算を使いました」というメッセージが表示されます):
また hash 値のボタンがいちど緑になった後、そのボタンを押す前に nonce 値のボタンを押してしまった場合、nonce 値を戻すことはできません。そのまま更に nonce 値を1つずつ増やして、再度マイニングルールを満たす nonce 値を探す必要があります。
と、こんな感じのゲーム感覚でマイニングを体験するサイトです。サービスそのものは Github Pages を使って、(CDN 以外は)1枚の HTML で作りました:
https://github.com/dotnsf/nonce/tree/gh-pages
本当は別の機会にちゃんと説明したいのですが、長くなりそうなのでシンプルに「なぜブロックチェーンに記録されたデータの改ざんが難しいのか」を説明しておきます。要するに記録したデータに対して、マイニングというそれなりに CPU パワーを必要とする処理を施した上でのチェックビットのような仕組みを加え、かつそのマイニング結果を前後のブロックに持たせてつなげる(「ハッシュポインタ」)ことが対改ざん性としての鍵になっているのです(更に実際にはデータに暗号化を加えることもあります)。 この仕組みによって、記録したデータを単純に(例えば振込額を増やすとか、振込先を変えるとか)書き換えるとその hash 値が変わり、記録内容とは異なってしまうので、書き換えたことがすぐにバレてしまいます。書き換えをごまかすためには hash 値を再計算する必要があるのですが、マイニングルールを満たす条件があるため、ここでそれなりの処理能力が必要になります。更に1つのブロックのマイニングが完了して書き換えに成功したとしても、次のブロックは1つ前の(つまり今書き換えたばかりの)ブロックの hash 値を持っているので、やはりここでも書き換えがバレてしまいます。これをごまかすためにはこのブロックの hash も書き換える必要があり、ここを書き換えると再度マイニングが必要になり・・・ とブロックチェーンの最後のブロックまで全てマイニングし直して書き換える必要がでてきてしまいます。マイニングルールが1桁とか2桁程度であればまだ処理できるかもしれませんが、実際の仮想通貨取引では 10 桁以上のマイニングルールが課せられており、全てのブロックを書き換えることは事実上不可能とされているのでした。
このサービスではマイニングが完了したブロックを仮想的なブロックチェーンに格納していますが、近い将来にこのページの HTML を改良して認証を加え、自動計算なしでクリアしたら本当にその記録をブロックチェーンに格納する、というものをリリースする予定です。お楽しみに。