中学生でもわかる、ブロックチェーンを支える「暗号」技術について①(読了5分)-51%アタックなど

本記事ではハッシュ関数を中学生でもわかるように説明します。

 

ごきげんよう。

本日は、ビットコイン、イーサリアムなどのブロックチェーンをささえる暗号技術「公開鍵暗号」と「ハッシュ関数」について解説したいと思います。(ちなみに出典:現代暗号入門です)本日は第一回ということでハッシュ関数について。

 

ちなみに、ブロックチェーンのどこで使われているのか?でいくと、

ハッシュ関数は主に【ブロックの承認(いわゆるマイニングの工程)】で使われています。

そして公開鍵暗号は【電子署名(トランザクションなどで利用)】で使われています。

 

ハッシュ関数について

 

ハッシュ という言葉を聞いて思い浮かぶのはマックのハッシュポテトですよね。(僕はそれ)

実はハッシュ関数のハッシュはハッシュポテトの「ハッシュ」と一緒で「切り刻んで混ぜる」という意味です。

 

具体的なSHA256とかMD5の関数についてはGoogleで調べてほしいのですが、

 

ハッシュ関数とは、簡単に言えば

ある文字列を切り刻んで別の一意に定まる文字列にするが、

その文字列から元の文字列を復元できず、

1文字でも違えば全く違う文字列になり、

他の文字列にかけた場合、同じ文字列が発生する確率がものすごく低い」

という条件を満たした関数になります。

 

まだ難しいですね。。。もっと翻訳すれば、

 

「お前は誰だ」という文字列を、文字列「ABCD」に変換するが、

「ABCD」からは「お前は誰だ」は復元できず、

「お前は誰か」と1文字かえたら「CDEX」と全く違う文字列になり

、他のあらゆる「XXXX」という文字列にかけても「ABCD」とならない関数

 

ということになります。

 

▼具体的には以下のイメージです。

 

 

例えば、「私が日本人です。」という言葉はSHA256というハッシュ関数を使うと、「E19187BFB94F0C0F4477E64EE95FF6F3C35169A8D35438E34DFB129213DB5572」という文字列をえることができます。(これは誰がやってもこの文字列となります)一文字でも変えれば上記の通り全く違う文字列になります。

 

そして、いろんな文字列をハッシュ関数にかけてこの「E19187BFB94F0C0F4477E64EE95FF6F3C35169A8D35438E34DFB129213DB5572」の文字列にならないことをしてもらえれば、あ、コレムリだということに気づいてもらえると思います。

 

あらためていいますが、

ハッシュ関数の大事な性質としては、「1文字(1byte)でも違えば全く異なる文字列になる」こと

そして「ハッシュされた文字列からは、元の文字列を戻すことはできない」こと。

最後に「他の文字列にハッシュをかけた際に同じハッシュ文字列にならない」ことです。

 

ブロックの生成を支えているハッシュ関数

 

ビットコインなどのProof of workの暗号通貨においては、

ブロックチェーンのブロック生成において、このハッシュ関数が使われています。

 

ブロックチェーンのブロックを生成する人は「マイニング」という行為をしているわけですが、

別にブロックをほっているわけではなく、「最初に0の個数がX個(ここのXを変えることで難易度が調整される)」となるハッシュ文字列を探す行為をしているのです。(ちなみに0の個数が18個だった場合、4,722,366,482,869,645,213,696 回のハッシュ化が必要です。京って。。)

 

 

先ほどの説明でもあったように、基本的にハッシュ関数は「違う文字列にかけたら同じ文字列にならない」ようになっていますし、1文字でも違えば全く異なる文字列になります。なので改竄することはそもそもできません。

そこで出てくるのが51%アタックです。

 

おまけ:51%アタックとは?

 

上記のハッシュの話があるので、改ざんした場合は必ず違う文字列になります。

なのでブロックチェーン上で改ざんする場合には、不正のブロックチェーンを伸ばしていく必要があります。(なお、できることは自らの取引履歴を消すこと、正当な取引の拒否くらいです。なぜならば改竄者は公開鍵に対応する電子署名を持っているわけではなく、過去を改ざんできるわけではないですからね。)

 

そうなると、他のマイナーのハッシュパワーよりハッシュパワーを持って連続して成功する必要があります。

つまり平均的に(51%以上、40%でもいいらしいですが)マイニングに成功することが必要なので、51%アタックと呼ばれている模様です。

 

まとめーハッシュ関数はブロックチェーンを支える超大事な技術。

 

ハッシュ関数というのは「一方向性」、「衝突困難性」、「一文字違えば全く違う」がある必要があります。

万が一、このいずれかに脆弱性が判明(衝突や、ハッシュの文字列を操作できるなど)した場合は、ブロックチェーンが成立しなくなるのでバブルは崩壊すると思います。ハッシュの過去の文字列すら作り出せちゃうのであればそれはブロックチェーン自体の価値がやばい(というかあらゆるウェブサービスがやばいと思うけど)となるということは知っておいたほうが良いかなと思いました。

 

次は公開鍵暗号について解説したいと思います!

やる気を出すためにも、ぜひはてブとかつけてもらえると嬉しいです。

 

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

%d人のブロガーが「いいね」をつけました。