バナナでもわかる話

開設当初は計量経済学・統計学が専門の大学院生でした。今はデータを扱うお仕事をしています。統計学・経済学・投資理論・マーケティング等々に関する勉強・解説ブログ。ときどき趣味も。極力数式は使わずイメージで説明出来るよう心掛けていますが、時々暴走します。

【初心者向け】ビットコインシステムとハッシュ値

ビットコインについて書いてきますということで、第一回の記事になります。
ビットコインの仕組みを徹底解説するカテゴリー始めます - バナナでもわかる話



ビットコインは、ブロックチェーンの仕組みによって

後からの不正改竄が事実上不可能である所に大きな特徴がある

と言われています。


その不正改竄が事実上不可能となる仕組みの根本の一つである仕組みに「ハッシュ関数」というものがあります。

そこで本記事では、ビットコインシステムを説明する前段として、ハッシュ値とは何かについて説明していきます。


ハッシュ値とは何か


何らかの会員制のウェブサイトを想像してみてください。

会員登録をする際、まず最初にパスワードを設定しますよね。


例えばパスワードを「banana」としたとします。

このパスワード、当然ウェブサイト側に保存されているわけですが、もし「banana」という文字列の状態のまま保存していたら、ちょっとしたハッカーがチョチョイとハッキングして、そのウェブサイトを管理しているサーバーにアクセスしてしまえば、簡単に盗むことが出来ちゃいます

そんでもってハッカー集団に、ああ、この人のパスワードは「banana」なんだなーとすぐにバレてしまいます。

なんなら、ハッカーではなく管理者側にも筒抜けです。
まあ管理者側が悪用するとはあまり思えませんが、それでも誰かにパスワードを知られているというのは嫌ですよね



そういうわけで、普通良心的な(まともな)ウェブサイトであれば、パスワードを「banana」のまま管理するようなことはしないわけです。



どう保存しているかというと、私たちが設定したパスワードを「ハッシュ値」という値に変換して保存しています。


こんな感じです。
f:id:bananarian:20180922013459p:plain

この「4b27f71097fc9e6e855b2c5c6b20a81c」がハッシュ値です。

管理者側は「4b27f71097fc9e6e855b2c5c6b20a81c」しかわかりませんし、「4b27f71097fc9e6e855b2c5c6b20a81c」から「banana」を特定するという逆の操作は難しくなります。


ちなみに、図からも明らかなように、この文字列をハッシュ値に変換する仕組みがハッシュ関数です。


※言うて「banana」程度の短い文字列なら総当たりすることでハッシュ値から直接パスワードを特定することが出来てしまいますし、簡単にハッシュ値から文字列を特定できてしまうハッシュ関数も存在します。そこで、より暗号を強度にする仕組みとして、実際にはsaltというランダムな文字列を追加生成して、ハッシュ化したり、何重にもハッシュ化することなどが行われています。


ハッシュ値を出して遊んでみる

ハッシュ関数にはたくさんの種類があります。インプットしたものが同じでも、関数が違えば当然違う結果が返ってきます。

以下のサイトでは、適当に文字を打ったら、それぞれのアルゴリズム(ハッシュ関数)でどんな値が返ってくるのかを確認することが出来るみたいです。
good-tool.net

ちょっと色々入力して遊んでみると理解が深まるかもしれません。