ハッシュについて
データが改ざんされていないかどうか、簡単に確認する技術があります。
それがハッシュというもの。技術的な話はもう少し先にしたいところですが、この次より始まるサイバー攻撃の説明において、先にハッシュを理解していないと一部説明が難しくなるため、ここで先に触れておきます。
- ハッシュ値
- ハッシュ関数:MD5
- ハッシュ関数:SHA-1
- ハッシュ関数:SHA-256
第9講
演習です。皆さんも、デスクトップにメモ帳から「新しいテキストドキュメント」を作成して、適当な文字列を入力し、名前をつけて保存してください。
ファイル名は簡単に「test.txt」にしておきます。
このデータをデスクトップに置いたら、次にコマンドプロンプトを開いてください。
Windowsのシステムツールより、コマンドプロンプトを起動すると、赤枠に自身のコンピュータ名が出てきます。(※念のため、私のマシン名は隠させてください)
ここに「cd desktop」と入力して、デスクトップの階層にたどり着きます。
>cd desktop
cd はチェンジ・ディレクトリのコマンドだね! これは知ってる
デスクトップに移動できたら、以下のコードを入れてみてください。
>certutil -hashfile test.txt MD5
サート・ユーティル、ハッシュ・ファイル test.txt エムディー・ファイブ、と読みます
ハッシュ関数のMD5を使って、test.txtファイルのハッシュ値が生成されました。
さあ、意味が分からなくなってきたぞ。何、この文字列?
この値がハッシュ値だよ。さえちゃん、エクセル関数は得意だよね。コマンドプロンプト上で使える「MD5」と呼ばれるハッシュ関数を今使って値を出した、っていえば理解してくれるかな?
なるほど! test.txt ファイルが「MD5」という装置の中に入って、中でごにょごにょされてこの文字列が生成されたんだね!
そう! 関数の意味をしっかりわかっていると、話が早いね。ポイントは、このハッシュ関数は一方向のみ、このハッシュ値からtest.txtファイルを復元することはできないということ
もう一度、同じハッシュ関数MD5を使えば、当然同じコードが出てきます。
そりゃそうだよね。ん? どういうことだ?
それじゃあ、test.txt ファイルの中身を変更してみるよ。おはようございます!のビックリマークを消して、上書き保存をしてみるね
皆さんも、同じように操作をしてください。
コマンドプロンプトに戻り、3回目のハッシュ関数MD5、同じコードを叩いてみます。
わっ、文字列が変わった!
ハッシュ関数を使って出力されるハッシュ値を見ると、データが更新されたかどうかが確認できるの。つまり、ファイルが改ざんされたかどうか、そのときのハッシュ値を覚えていれば、これで手が加えられたかどうか、判別できるようになるのよ
なるほど、そういうことか! 更新や改ざんが行われていたら、自分の知っているファイルとは異なることがわかるからね!
MD5(Message Digest Algorithm 5)は、1991年にロナルド・リベストさんによって開発された、広く使われるハッシュ関数です。
128ビットのハッシュ値を生成し、主にデータの整合性チェックやパスワードのハッシュ化に利用されていました。
128ビット → 8ビットで1バイトだから16バイト → 1バイトで半角英数字2文字分なので、32文字のハッシュ値が生成できます。
しかし、MD5は衝突が発見され、暗号学的には安全ではないとされており、現在はより高度なハッシュ関数への移行が推奨されています。
衝突とは、異なる2つのデータが同じハッシュ値を生成してしまう現象です。これは、宝くじで2人が同じ番号を引いてしまうようなものです。
例えば「こんにちは」と「さようなら」という全く異なる文章において、ハッシュ関数を使った結果が「abc123」を生成してしまうケースを想定してみてください。
この衝突が起きると、どちらのデータ(宝くじの場合、どちらが当選者か)なのかわからなくなり、データの一意性が保証できなくなってしまいます。
今回は演習なので、一番シンプルなMD5で体験してもらいました。MD5は基本的なハッシュ関数の概念を理解するためはもってこいで、実際のセキュリティでは非推奨ですが学習目的には有用です
高度なハッシュ関数というのが、以下の2つ。
- ハッシュ関数:SHA-1
- ハッシュ関数:SHA-256
コマンドプロンプトのコードで、ハッシュ値の長さを確認してみてください。
>certutil -hashfile test.txt SHA1
>certutil -hashfile test.txt SHA256
SHA-1は「しゃーわん」、SHA-256は「しゃーにごろ」って呼んでいるわ。このハッシュ値が長ければ長いほど、衝突が起きにくいことがわかるよね
ただ、MD5よりも長いSHA-1も、もはや安全ではありません
もちろん、SHA-256も関数の仕組みとして理論上衝突してしまう確率は0%ではないけれども、MD5やSHA1に比べると、確率がぐっと低いため、現在最も広く推奨されています
ハッシュ関数は「SHA-256」が安全、って覚えておけばいいね!
SHA-1(Secure Hash Algorithm 1)とSHA-256(Secure Hash Algorithm 256)は、米国国家安全保障局(NSA)が設計し、米国国立標準技術研究所(NIST)によって発表されました。
SHA-1は160ビットのハッシュ値、SHA-256はそのまま256ビットのハッシュ値です。
160ビット → 20バイト → 40文字のハッシュ値
256ビット → 32バイト → 64文字のハッシュ値 【推奨】
NISTに関しては、またこれも別のところで詳しくご紹介します。
今回はハッシュ関数について、まずは自分でコマンドプロンプトを立ち上げて、ハッシュ関数を使ってみてくださいね!
第9講のまとめ
データの改ざんを検出するための技術としてハッシュ関数を学びました。
MD5、SHA-1、SHA-256の3つのハッシュ関数を使い、ファイルのハッシュ値を生成する方法を演習を通じて体験しました。
MD5やSHA-1は安全性に欠けるため、現在ではSHA-256が推奨されています。
ハッシュ関数の基本を理解することで、次に学ぶサイバー攻撃の仕組みもより深く理解できるはずです。次の講座に行く前にハッシュ関数の生成を自分の手で試してみてください。
コマンドプロンプトで難解なコードを記述していくの、楽しくないですか? 私はここから徐々にLinuxとかにハマっていきましたw