1. Kanayafrica
  2. 038. ハッシュ関数とビットコ..
2021-06-16 17:04

038. ハッシュ関数とビットコイン

エピソードをシェアする

Share on X Share on Facebook Share on Threads

先週発行のニュースレター『STEAM NEWS』から「ハッシュ関数」の説明をお送りします.

毎週金曜日朝7時にアート,リベラルアーツと科学技術に関するニュースレター『STEAM NEWS』を発行しています.YouTube,ポッドキャストでまとめもお送りしています.

📬ニュース | 🎧ポッドキャスト | 📺YouTube | 🕊Twitter

00:02
いちです、こんにちは。
今日はですね、新しい場所からお送りしています。
大学の中で引っ越しが大体完了しまして、
この部屋、YouTubeでご覧になっている方は新しい景色だと思うんですけれども、
建物は古いんですけれども、内装をやり直していただいて、
新築同様の雰囲気になっているかと思います。
内装工事も一通り終わりまして、荷物もほぼ運んでいただきまして、
梱包も解いて、大体作業できる空間になってきたかなというところです。
まだ背景に映っているこのMacなんですけれども、
これがまだ仮設で、僕が使いたいソフトウェアとかが一部動かなくて、
ここは何とかしないといけないところなんですけれども、
徐々に整っていくかなと思っています。
これまで、仮設の部屋にいまして大部屋についたて建ててもらって、
空間は共有していたんですけれども、音声がだだ漏れだったので、
録画したり録音したりとかがちょっと辛い環境だったんですね。
それでも遠隔授業とかはやっていたんですけれども、
声がだだ漏れで、大体授業が始まると、
どこからかその声が聞こえてくるという環境だったんですけれども、
ここは落ち着いて授業もできる、遠隔授業もできる感じになってきました。
今週じゃなくて、週明けから先週か、
先週の金曜日にまたニュースレターを送らせていただいて、
そのまとめを、この週末をお送りしたかったんですけれども、
ちょっとわたわたとしてしまって、
余談をYouTubeで2本、2本だったかな、
上げさせていただいたんですけれども、
ポッドキャストには転送していなくて、
先週のニュースレターの後のまとめとしては、
これが初めての投稿になります。
音声版の方は新しいアドレスで、
steam.fm の方でお送りしたんですけれども、
まとめはまだ送らせてもらっていませんでした。
なぜかというと、先週お送りしたニュースレターは、
ビットコインに関する内容だったんですけれども、
完結しなくてですね、前編だけで終わっていて、
今週おそらく後編をお送りして、
完結すると思っているんですけれども、
まとまってからお話した方がいいかなとも思ったので、
ちょっとペンディングにしてました。
03:03
ただ、前編の内容について、
やっぱりお送りしておこうかなと思って、
今日ちょうど授業も終わって、少し隙間時間があるので、
撮らせていただこうかなと、せっかくだからね、
新しい部屋から撮らせていただこうかなと思って、
カメラとマイクを、
マイクって言わないのかな、
回しています。
マイク回すって言わないですよね。失礼しました。
先週どんなお話をしたかというと、
ビットコインの基礎になっている技術、
基盤技術、ブロックチェーンですね、
さらにその基盤技術の一つである、
ハッシュ関数という数学なんですけれども、
ビットコインの基盤技術のブロックチェーンという言い方には、
若干正しくない響きがあって、
全然間違ってはいないんですけれども、
ビットコイン以外の暗号資産に関しても、
基盤技術というのはほとんどがブロックチェーンを使っているので、
基盤技術があることに全然間違いはないんですけれども、
ただ歴史的経緯から言って、
ブロックチェーンという基盤技術があったから、
ビットコインという応用が生まれたかというと、
そうじゃなくて、
ブロックチェーンそのものが、
ビットコインのために作られたような技術、
しかも、サトシ・ナカモトという謎の人物、
これもニュースレターの中で、
サトシ・ナカモトって誰?みたいなお話をさせていただいているんですけれども、
サトシ・ナカモトがブロックチェーンを開発して、
ビットコインを同時に作っているので、
これもビットコインのために設計されたといっても、
全然おかしくはないというか、
正しい言い方なので、
そういう基盤があってアプリケーションがあったというわけではなくて、
アプリケーションがあってその基盤が作られたというのが、
正しい順序なんですよね。
でもそんなものかもしれないですね、エンジニアリングってね。
ロケットエンジンを作ったからロケットを作ったんじゃなくて、
月に行きたいからロケットを作ったわけですよね。
エンジンできちゃったからこれで人間を月へ飛ばそうかじゃなくて、
人間を月へ飛ばしたいからロケットを作ったんですよね。
研究、特にエンジニアリングの研究というのは、
もうアプリケーションが全てみたいなところがあるので、
そういう意味ではついつい基盤技術というとね、
あるいは基礎研究というとね、
基礎を固めてから上の建物を建てますよみたいな話になりがちですけれども、
実際には目標があって、そこから基盤を作っていく、
06:04
基礎を固めていくということもよくあると思います。
そんな話で、ビットコインとブロックチェーンの関係というのは、
そういうふうになっていますよという話です。
そのブロックチェーン技術、この解説は、
今週お送りするニュースレターで詳しく書かせていただこうと思っていまして、
先週お送りしたのが、ブロックチェーンの基盤の基盤になっている、
これは本当に基礎的な研究になるんですけれども、
ハッシュ関数という考え方、そういう数学概念ですね、
についてお話をさせていただきました。
ハッシュというのは、マクドナルドとか、
これはあれですかね、自分のチャンネルだからいいのか、
こういう名詞出しちゃっていいんですよね。
朝マックスとかあるじゃないですか、ハッシュブラウンじゃない、
ハッシュドポテト。
ハッシュドポテトって、英語ではハッシュブラウンだったり、
ハッシュドブラウンだったりって言うんですけれども、
ハッシュって何かっていうと、
ジャガイモとかの素材を切り刻んで、
混ぜ合わせたものという意味ですよね。
切り刻んで混ぜ合わせる。
これが数学のハッシュ関数のハッシュと同じ意味で、
ハッシュというのは、元データ、文章であったりとか、
画像であったりとか、音声であったりとか、
データ、何でもいいです。デジタルデータは何でもいいです。
デジタルデータを切り刻んで混ぜ合わせて、
1個の数字にするんですね。
元がどんなに小さいデータでも、
例えば1文字とか小さなデータでも、
それからウィキペディア全部とかの超でかいデータでも、
1バイトだろうと何兆バイトだろうと、
とにかく1個の数字にするんです。
これがハッシュ関数という関数です。
その数字なんですけども、
比較的小さな数字です。
小さいといっても、
二進数で少なくとも128ビットぐらい、
実際には256ビットとか512ビットとかにはなるんでしょうけども、
元データに比べれば十分小さい数字ということに
なります。
だいたい2の10乗が1024でしょ。
だから0から1023までの数字を表すだけですよね。
それの約1000とすると、
2の20乗で1000かける1000ですよね。
100万。
あってる?
あれ、計算あってるかな。
そんなもんですよね。
09:01
だいたい2の10乗が1000だと思って数えていくと、
どのぐらいの大きさの数字までかというのが想像がつくと思います。
ニュースレターの方には、
具体的にハッシュを計算するという例も示しているんですが、
だいたい1行2行で収まる、
十進数で書いても1行2行で収まるような128ビットのハッシュだとね、
そのぐらいになるというお話を伝えさせていただいているんですけども、
なので元データがどれだけ膨大でも1個の整数値にしますよというのが、
ハッシュ関数の考え方です。
これは何が重要なのかというと、
同じデータからは同じ数値が必ず出てきます。
これはハッシュ関数の選び方によるんですけども、
1つハッシュ関数のこれを使います。
ハッシュ関数の名前がついています。
有名なものは名前がついています。
このハッシュ関数を使うと、このデータからはこの数値が出てきますということは、
もう一義に決まります。
ということは、そのデータの指紋として使えるんですね。
というのは、常に同じ値が出てくるのと、
同じデータからは常に同じ値が出てくるのと、
元データが少し変化する。
例えば1ビットでも変化したとしたら、
ハッシュ値というのは違う値になる。
元データが何兆倍とあろうと、
その中の1ビットでも変化があれば、
ハッシュ値は全然違う値になる。
ということで、元データを代表する数値、
これはダイジェストと呼ぶんですけども、
元データを代表する数値になるので、
元データがちょっとでも変わると、
違う数値になるから、元データが書き換わった。
エラーで書き換わったのか、改ざんによって書き換わったのか、
それはわからないんですけども、
書き換わったということがわかる。
あるいはちょっと縮まったとか、ちょっと伸びたとか、
とにかくオリジナルとちょっと違うぞということは、
ハッシュ値を見ればわかるということが言えるわけですね。
ということは、ハッシュの値さえ保存しておけば、
元データが改ざんされたかどうか、
間違えられたかどうかということが検証できるということで、
ハッシュ値というのはよく使われています。
逆に、ハッシュ値から元のデータというのは復元できないんですね。
だって元データってひょっとしたら何兆バイトってあるかもしれないのに、
ハッシュ値は1個の整数だから、これは元に戻せないんですよ。
もう一つ特徴があって、
それは元が何兆バイトだからそれだけ種類があるわけですよね。
こっちは小さな整数ですから種類が少ない。
ということは、ハッシュの値が被るということがないかということなんですね。
12:04
専門用語でハッシュのコリジョンというふうに言いますけども、
衝突と言いますけども、
これが起こるんじゃないかという懸念。
これは実際に起こり得るそうです。
古い桁数の少ないハッシュ関数だと今の基準で見れば頻繁に起こっています。
よく設計されたハッシュ関数だと、
実用的な時間内ではハッシュの値がぶつかるということは
早々起こらないだろうというふうに言われています。
ある日突然ハッシュの衝突で見つかったということがあるかもしれないですが、
今のところその心配はしなくてもいいという前提で
情報システムというのは設計されています。
ハッシュ値、例えばパスワードなんかも
皆さんがウェブサイトをログインするときのパスワードなんかも
ウェブサイト側もパスワードを付き合わせないといけないんですけれども、
ウェブサイトでパスワードを保存しておくと流出したときにまずいですよね。
生のパスワードがバレちゃいますよね。
なのでウェブサイト側もパスワードは保存しないで
パスワードのハッシュ値だけ保存していることが多いというか、
本来はそうあるべきなんですね。
たまに生のパスワードを保存していて
流出しちゃいました、生パスワードを保存してましたという
とんでもない事件が起こるんですけども、
基本、ちゃんと設計されたウェブサイトは生パスワードを保存していないです。
ハッシュ値だけ保存しています。
付き合わせるのはハッシュ値だけ。
だからネットワーク上を生のパスワードが流れていくことはなくて
毎回計算し直したハッシュ値が付き合わされるということに
今のジェスチャーあれですね。
衝突と付き合わせ同じジェスチャーしちゃいましたね。
良くないですね。
ハッシュ値というのはそういう使われ方をしているというお話で、
そのビットコインの基盤技術のブロックチェーンにも
そのハッシュ値というのは使われています。
一つがそのダイジェストという過去の取引、
ビットコインの台帳ですね。
台帳は最初の里市中本だと思うんですけどね、
ジェネシスブロックと言われている最初の取引、
里市中本による最初の取引から
全て過去の記録というのは残っているんですけども、
それが正しい記録であることを示すために
ハッシュ値というものが計算されています。
そのハッシュ値を比較すること、
ハッシュ値のコピーがばらまかれているので、
ハッシュ値を比較することで、
15:00
この台帳がオリジナルなものかどうなのかというのを
知ることができるような仕組みになっています。
詳しくはまたニュースレターのほうで
バックナンバーもお読みいただけるので
見ていただければと思います。
一応今週の金曜日朝7時にお送りするので、
ビットコインの話は一応完結する予定なんですが、
まだ書いている最中なので、
どうなるかはちょっとまだわかりません。
多分完結すると思います。
というわけで、また出筆とか、
事務作業もいろいろ残っていて、
引っ越しの後片付けもまだ残っていたりとかするので、
作業に戻りたいと思います。
今日は聞いてくださって、見てくださってありがとうございました。
新しい、ここは教授室になるのかな?
隣に学生実験室という、まだ学生いないので
机だけ置いてあるがらんとした部屋があるんですけども、
後で撮ってみようかな、その部屋も。
撮ってくっつけてみます。
YouTube ご覧の方は見ていただけると思います。
ポッドキャストはここまでで、
終わりにさせていただきます。
今日も最後まで見ていただいて、聞いていただいてありがとうございました。
またニュースレターもよろしくお願いします。
あと、余談の方で少しお話をさせていただきましたけども、
YouTube ライブも月3回させていただいてますし、
ニュースレターの音声版のポッドキャストもありますので、
あとクオラジオという素晴らしいポッドキャスト番組にも呼んでいただいているので、
ポッドキャストをお聞きの方はそちらもチェックしてみてください。
聞いてくださって、見てくださってありがとうございました。
いちでした。
17:04

コメント

スクロール