データが改ざんされていないかどうか、簡単に確認する技術があります。
それがハッシュというもの。技術的な話はもう少し先にしたいところですが、この次より始まるサイバー攻撃の説明において、先にハッシュを理解していないと一部説明が難しくなるため、ここで先に触れておきます。
この講座の学習ポイント
- ハッシュ値
- ハッシュ関数:MD5
- ハッシュ関数:SHA-1
- ハッシュ関数:SHA-256
演習です。皆さんも、デスクトップにメモ帳から「新しいテキストドキュメント」を作成して、適当な文字列を入力し、名前をつけて保存してください。
ファイル名は簡単に「test.txt」にしておきます。

このデータをデスクトップに置いたら、次にコマンドプロンプトを開いてください。
Windowsのシステムツールより、コマンドプロンプトを起動すると、赤枠に自身のコンピュータ名が出てきます。(※念のため、私のマシン名は隠させてください)
ここに「cd desktop」と入力して、デスクトップの階層にたどり着きます。
>cd desktop

デスクトップに移動できたら、以下のコードを入れてみてください。
>certutil -hashfile test.txt MD5


ハッシュ関数のMD5を使って、test.txtファイルのハッシュ値が生成されました。
もう一度、同じハッシュ関数MD5を使えば、当然同じコードが出てきます。

皆さんも、同じように操作をしてください。

コマンドプロンプトに戻り、3回目のハッシュ関数MD5、同じコードを叩いてみます。

MD5(Message Digest Algorithm 5)は、1991年にロナルド・リベストさんによって開発された、広く使われるハッシュ関数です。
128ビットのハッシュ値を生成し、主にデータの整合性チェックやパスワードのハッシュ化に利用されていました。
128ビット → 8ビットで1バイトだから16バイト → 1バイトで半角英数字2文字分なので、32文字のハッシュ値が生成できます。
しかし、MD5は衝突が発見され、暗号学的には安全ではないとされており、現在はより高度なハッシュ関数への移行が推奨されています。
衝突とは、異なる2つのデータが同じハッシュ値を生成してしまう現象です。これは、宝くじで2人が同じ番号を引いてしまうようなものです。
例えば「こんにちは」と「さようなら」という全く異なる文章において、ハッシュ関数を使った結果が「abc123」を生成してしまうケースを想定してみてください。
この衝突が起きると、どちらのデータ(宝くじの場合、どちらが当選者か)なのかわからなくなり、データの一意性が保証できなくなってしまいます。
高度なハッシュ関数というのが、以下の2つ。
- ハッシュ関数:SHA-1
- ハッシュ関数:SHA-256
コマンドプロンプトのコードで、ハッシュ値の長さを確認してみてください。
>certutil -hashfile test.txt SHA1
>certutil -hashfile test.txt SHA256

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が推奨されています。
ハッシュ関数の基本を理解することで、次に学ぶサイバー攻撃の仕組みもより深く理解できるはずです。次の講座に行く前にハッシュ関数の生成を自分の手で試してみてください。

