⚠️ 記事内に広告を含みます。

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

ハッシュとは?基礎暗号理論Ⅰ

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

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

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

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

懲戒解雇の例

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

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

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

ハッシュとは?

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

ウイルス感染を防ぐ方法としては、

  • アンチウイルスソフトウェアの導入
  • 不要なデバイスの接続を行わない(USB等)
  • 怪しいサイトを訪れない
  • よく知らないファイル、メール、ソフトウェアをダウンロード・インストールしない
  • 適切なパスワード管理
  • OS,ソフトウェアの更新を怠らない

等々たくさんありますが、対策はとれていますか?

ハッシュ値はファイル内容の検査=改ざんの検知に利用

ハッシュという言葉をファイルのダウンロード時や圧縮・解凍時に見たことがありませんか?

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

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

ハッシュ値とは「手元のファイル情報を元にハッシュ関数を用いて算出したもの」です。

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

具体的な例で紹介

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

下記の文章があったとします。

元データ

あいうえおかきくこ →ハッシュ関数で変換→ 12345(ハッシュ値)

元データに対して下記の比較データのハッシュ値を出します。

比較データ

あいうえおかきくくこ →ハッシュ関数で変換→ 83741(ハッシュ値) ↑のハッシュ値と大きく違う

このように比較データは一文字「け→く」が変化しているだけですが、ハッシュ値は大きく変化しています。

このようにハッシュ値は元のデータのわずかな違いでも大きく変化する特徴があります。

ハッシュ値はデータが改ざんされていないかを短時間に調べられる

100万文字の文章の内容が同じかどうか比較するのに目を通すのは大変ですが、ハッシュ値を計算してしまえば算出されたハッシュ値は元の文章のように長くないのですぐにわかります。

word文書のハッシュ値を比較して圧縮したファイルが壊れていないかを確認する。

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

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

予めAさんがオリジナルファイルをもとにハッシュ関数で計算したハッシュ値をBさんに教えておく。
→Bさんはダウンロードしたファイルのハッシュ値を計算して教えてもらったハッシュ値と見比べる

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

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

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

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

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

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

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

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

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

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

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

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

ハッシュ関数の種類

よくあるものでは

  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で購読してくださいね!

コメントを残す

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