みなさん、おはようございます!
この記事は、ビットコインのブロックチェーンを解説していくシリーズの第二回となります。前回の記事をまだお読みになっていない方は、この記事を読む前に第一回の記事をまず読んできていただきたいです。
前回は、ビットコインのブロックチェーンの一番最初のブロックはGenesis Blockと呼ばれ、下記の形のものだというところで終わりました。
000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
「えっ?全然ブロックじゃなくね?」と思う方もいるでしょう。正直、僕も最初見たときにびっくりしました。しかし、この数値とローマ字の組み合わせは、Genesis Blockの情報をSHA-256ハッシュ関数によって計算されたものです。
前回の記事と上記ですでにネタバレをしましたが、ハッシュというのは、情報を固定長の値に変換します。SHA-256では、それが上記のようなものになります。いくら長い文章でも、同じ長さの一行に変換されます。例えば、1,557文字の前回の記事をSHA-256でハッシュすると、以下がの文字列が出てきます。Genesis Blockと同じ64文字の長さのものに変換されます。
32EA2036E4D6A875DAC90E5C36BECA52F0A150B56C7B2B38088C6EE20381297D
それで?と思うかもしれませんが、以下の二つの文章のハッシュを比べてみてください。
私はジミーです
BE8BA34C000E37C44C919EBFD808128249649716C81D251B2E5E050392D2CB10
私はジミーです。
1D036DD7A72689B5CF9DFC8E1C6019E28D589751385049C4E36DCBCE80CC6B21
「。」を打つだけで出てくるハッシュが全然違うでしょう?
「結局一つのデータを違う形のデータにするだけで何がかっこいいの?」と思うでしょう。しかし、それだけではありません。暗号化のように、キーがあれば元の戻せるというtwo-way functionではなく、ハッシュ関数は、one-way functionです。つまり、上記のハッシュの元のデータを知りたかったら、同じハッシュ関数で自分で文字を入れ、出力を比べるしか方法がありません。もちろん、ハッシュ関数のソースコードを見てもですね。
何+何=50だと、何と何の場所に何が入るかという同じような問題です。
49+1 = 50
48+2 = 50
47+3 = 50
...
足算の答え(ハッシュ関数の出力)が分かっていても、入力を知ることは不可能に近いです。
前回の記事には、第2回の記事はブロックチェーンの中身について説明するという風に書きましたが、やはりハッシュ関数について知らないとなかなか理解しにくい記事になりそうだと思い、順番を変えさせていただきました。
上記の例のために下記のツールを使いました。気になる方は是非遊んでみてください。
https://passwordsgenerator.net/sha256-hash-generator/
Blockchain技術シリーズ:
誰にでも理解できる:Blockchain技術 ① - チェーンの意味と働き
誰にでも理解できる:Blockchain技術 ② - ハッシュとは?