セキュリティ

ハッシュ値とは?MD5・SHA-256の違いと使い方をわかりやすく解説

ハッシュ値は、データのセキュリティや整合性確認に欠かせない技術です。ファイルのダウンロード検証、パスワードの保存、デジタル署名など幅広い場面で使われています。この記事では、ハッシュ値の仕組みからMD5・SHA-256・SHA-512の違い、そして実際の使い方まで解説します。

ハッシュ値とは?

ハッシュ値(ハッシュダイジェスト)は、ハッシュ関数によって任意のデータから生成される固定長の文字列です。同じデータからは必ず同じハッシュ値が生成され、少しでもデータが変わると全く異なるハッシュ値になります。

例えば「Hello」のSHA-256ハッシュ値は:

185f8db32921bd46d35ef6d97a717ccd

ハッシュ値の重要な特性として「一方向性」があります。ハッシュ値から元のデータを復元することは計算上不可能に近く、これがセキュリティ上の大きな強みです。

主なハッシュアルゴリズムの比較

アルゴリズム出力長セキュリティ用途
MD5128bit(32文字)低(非推奨)ファイル整合性確認(レガシー)
SHA-1160bit(40文字)低(非推奨)Git のコミットID(レガシー)
SHA-256256bit(64文字)高(推奨)デジタル署名、TLS証明書、ビットコイン
SHA-512512bit(128文字)非常に高い高セキュリティが必要な用途

ハッシュ値の主な用途

1. ファイルの整合性確認

ソフトウェアのダウンロードページでは、SHA-256ハッシュ値が公開されていることがあります。ダウンロードしたファイルのハッシュ値を計算し、公開値と一致すれば「改ざんされていない・正しくダウンロードできた」ことを確認できます。

2. パスワードの安全な保存

Webサービスでは、パスワードをそのまま保存するのではなく、ハッシュ値に変換して保存します。データベースが漏洩してもハッシュ値からパスワードを復元できないため安全です。現代ではbcryptやArgon2などの専用アルゴリズムが推奨されます。

3. データの重複検出

大量のファイルから重複を見つけるとき、ファイル名でなくハッシュ値を比較することで確実に同一内容のファイルを検出できます。クラウドストレージサービスの重複除去などにも活用されています。

4. デジタル署名・証明書

TLS/SSL証明書(HTTPSで使われる)やコードサイニング証明書では、SHA-256ハッシュが使われています。文書全体でなくハッシュ値に署名することで、効率的かつ安全に整合性を保証できます。

ツールの使い方

  1. テキストエリアにハッシュ化したい文字列を入力します
  2. 使用するアルゴリズム(MD5・SHA-1・SHA-256・SHA-512)を選択します
  3. 生成されたハッシュ値が表示されます
  4. コピーボタンでクリップボードにコピーして使用します

注意事項

ハッシュ値は暗号化ではありません。ハッシュ値から元のデータを復元することはできませんが、辞書攻撃(よく使われる文字列のハッシュ値との照合)には弱い場合があります。パスワードには必ず強力な文字列を使用してください。

JavaScriptでのハッシュ生成

ブラウザやNode.jsでSHA-256ハッシュを生成する例:

// Web Crypto API(ブラウザ・Node.js 15+)
async function sha256(message) {
  const msgBuffer = new TextEncoder().encode(message);
  const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
  const hashArray = Array.from(new Uint8Array(hashBuffer));
  return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}

const hash = await sha256('Hello');
console.log(hash); // 185f8db32921bd46d35ef6d97a717ccd...

よくある質問

Q. MD5はもう使えないのですか?

A. セキュリティ目的(パスワード保存・デジタル署名など)には推奨されません。衝突攻撃(異なるデータから同じハッシュ値を生成する攻撃)が現実的に可能になっているためです。ただし、セキュリティを要求しない単純なファイル識別やチェックサム目的での使用はまだ行われています。

Q. ハッシュ値が同じなら必ず同じデータですか?

A. 理論上は異なるデータが同じハッシュ値になる「衝突」が存在する可能性があります。しかしSHA-256では衝突を意図的に起こすことは現在の技術では不可能に近く、実用上は同じハッシュ値=同じデータと見なせます。

Q. ハッシュ値と暗号化の違いは何ですか?

A. 暗号化は復号化(元のデータを取り出すこと)が前提の技術です。一方ハッシュ化は一方向の処理で元のデータを復元できません。パスワードの保存にはハッシュ化が適していますが、機密データを送受信する際は暗号化(AESなど)を使います。

Q. 入力したテキストはサーバーに送信されますか?

A. いいえ。ハッシュ計算はすべてブラウザ内で処理されており、入力したデータはサーバーに送信されません。機密性の高い文字列も安心してハッシュ化できます。

Q. SHA-256とSHA-512どちらを選ぶべきですか?

A. 一般的な用途ではSHA-256で十分です。SHA-512は出力が長く処理時間も若干長くなりますが、より高いセキュリティが必要な場合(政府・軍事・金融系システムなど)に使われます。日常的な用途ではSHA-256を選んでおくのが無難です。

まとめ

ハッシュ値はデータの整合性確認やセキュリティに欠かせない技術です。MD5は古くセキュリティ目的には非推奨ですが、SHA-256は現在も広く使われる信頼性の高いアルゴリズムです。ファイル検証やパスワード管理など、用途に合わせて適切なアルゴリズムを選択してください。

▶ 今すぐ使ってみる

st0z.com 無料ハッシュ生成ツール