その他科学

ハッシュとは?誰でもわかる暗号の基本

昨今、「情報」の重要性は増してる気がします。

大学の研究でも得られた貴重な研究成果の情報が漏洩してしまったら、長い時間をかけた研究が台無しになってしまいます。

あらゆる情報がデジタル化した今、資料作成はとても簡単になりましたが、同時に盗み出すことも簡単になっています。

会社では非常に情報セキュリティ意識は高いですが、大学では低いことが多いのではないでしょうか?会社では、「大切な情報の漏えい」は深刻な問題となります。
自社はもちろん顧客情報が入ったPCやUSBの紛失などをやらかすとけん責、降級や解雇もありえます。

実際に情報漏えいが原因で懲戒解雇、トラブル回避のため論旨解雇(自主的な退職)を求められるケースもあります。

情報は漏洩だけでなく、消失も問題となりますよね?

でも情報の漏洩や消失はあなたが何もしなくても起こる可能性があるのです。

ハッシュとは?

情報漏えいを防ぐ一つの方法として、コンピューターウイルスなどの悪意のあるアプリケーションの侵入を防ぐ方法があります。

ウイルス感染を防ぐ方法としては、
・アンチウイルスソフトウェアの導入
・不要なデバイスの接続を行わない(USB等)
・怪しいサイトを訪れない
・よく知らないファイル、メール、ソフトウェアをダウンロード・インストールしない
・適切なパスワード管理
・OS,ソフトウェアの更新を怠らない
等々たくさんありますが、対策はとれていますか?

ハッシュという言葉をご存知でしょうか?
ファイルをダウンロードする時にハッシュ値がどうこう という文言を見たことがありますか?

この「ハッシュ値」が身近なところでどのように使えるかというと、「ファイルが誰かに書き換えられたかどうかを確認できる手段」として使えます。

Hashは英語では「薄くとか細かく刻んだ状態」を意味します。
ハッシュドポテト、ハッシュドポーク・ビーフなどの料理を思い浮かべると想像できると思います。

ハッシュ値は手元の様々なファイル情報を元にハッシュ関数を用いて算出したもので、ファイルのデータの一部が少しでも異なると同じハッシュ関数で算出されたハッシュ値は変化するので、ハッシュ値を照会することによって、ファイル内容が正しいかどうかチェックできます。

もう少し噛み砕いて説明しますと

データを文書とします。

あいうえおかきくこ →ハッシュ関数で変換→ 12345(ハッシュ値)
もしもデータが
あいうえおかきくこ →ハッシュ関数で変換→ 83741(ハッシュ値)

このようにハッシュ関数は「け→く」に変わるだけで大きく変化する特徴があります。

文章のデータが短いのでどこが変化したかわかりやすいですよね? でもこれが、100万字だったらその中の一文字変わっても気づくのは困難ですよね?全データを見比べると時間がかかってしまうので、元のデータをつかって計算してあんまり長くない特定の長さの数列などに変換すれば見比べるのは簡単ですよね?

AさんがwordファイルをメールなどでBさんに送る

Aさん以外の誰かに改ざんされたり、ダウンロードがうまく行かずにファイルが壊れていたりする(本でいえば落丁のようなもの)かを確認したい

→ハッシュ値を確認すれば良い!

予めAさんがオリジナルファイルをもとにハッシュ関数で計算したハッシュ値をBさんに教えておく。

→Bさんはダウンロードしたファイルのハッシュ値を計算して教えてもらったハッシュ値と見比べる

このようにハッシュ値は正しいファイルかどうかの判定につかえます

上の図は、LinuxベースOSで有名なUbuntuのダウンロード画面です。ダウンロードリンクの隣に(md5sum:・・とあります。このmd5はハッシュ関数でコロンの右にあるビット列はハッシュ値です。このように予め計算しておいたハッシュ値を公開しておくことでデータの安全性や健全性を保てます。

ハッシュ関数、ハッシュ値の特性

ハッシュ関数の基本として

ハッシュ関数は元データが一緒ならハッシュ値は同じものに必ずなります。

そうでないと、上述した確認作業はできませんよね

ハッシュ関数の基本的性質

1.ハッシュ値から元データが推測しにくいように設計

例えばパスワードの文字列をハッシュ関数を使用して算出したハッシュ値を暗号文として保存したり、送信したりするときに、誰かに盗まれた際に簡単に元のデータがばれないようにしておきたい。

2.ハッシュ値はすばやく計算できるようになるべく平易にしてある。(通信など(例えば無線LANとか)で確認するとき大変だから)

3.元データが少しでも違うとハッシュ値は全然かわるようにして世界に一つだけのハッシュ値状態にしておく設計

→別のデータなのに同じハッシュ値になる!ということが起こらないようにしないといけない(強衝突耐性という) 元データの推測もしにくくなる。

ハッシュ関数の種類

よくあるものでは

1.MD5

2.SHA-1

3.SHA-2、SHA-256

4.RIPEMD

1.MD5(エムディーファイブ)はMD4の改良版。現在は脆弱性が見つかっているので信頼性を重視する場合は使用しないほうが良い。

2.SHA-1(シャーワン)はNISTによって開発、SHAはsecure hash algorithmの略。現在は攻撃法が発見されていて使用しない。

3.SHA-2,SHA-256、SHA-2はSHA-1の改良版として利用されている。強固なハッシュ化が可能であるとされる。ブロックチェーン技術を利用したビットコインなどでSHA-256が利用されている。

4.RIPEMD(ライプエムディー) MD4を基に設計、オープンソースでSHA-1と同等のパフォーマンスをもち、広く利用されている。RIPEMD-160が利用されている。

ほかにも、BLAKEやCRC32/CRC64などがあります。

まとめ

ハッシュ関数は暗号化にも、データの健全性、安全性をチェックするのに使えます。ネット上からしらないファイルをダウンロードする場合でも、ハッシュ値が書いてある場合は、そのハッシュ値を確認することでより安全性を高めることも可能です。今度データを送るときはハッシュ値を利用してみると良いかもしれません。

今回書ききれなかった暗号化とハッシュ値の関係性と実際にハッシュ値を計算する方法などは、今後紹介していきます。

follow us in feedly
良かったらFeedlyで購読してくださいね!

ABOUT ME
こめやん
こめやん
こめやんは理学博士です!化学の面白さと学ぶメリットを少しでも伝えるために日々頑張ります! ツイッターにて疑問点や依頼などを募集しています! 論文の和訳やレポートのチェックなどでもお気軽にお待ちしております