「ハッシュ化」と「暗号化」の違いとは?セキュリティの基本と不可逆性の仕組み
セキュリティ

「ハッシュ化」と「暗号化」の違いとは?セキュリティの基本と不可逆性の仕組み

Web開発やセキュリティの基本となる「ハッシュ化」。暗号化との違い、なぜ元に戻せないのか、パスワード保存になぜ必須なのか。仕組みからハッシュ関数の種類(SHA-256など)まで徹底解説します。

パスワードが「そのまま」保存されていたら危険!

あなたがWebサービスに登録したパスワード。 もし、データベースに password123 のようにそのまま(平文で)保存されていたらどうなるでしょうか?

万が一、サイバー攻撃によってデータベースの中身が流出した場合、あなたのパスワードは攻撃者に丸見えになってしまいます。 これでは、同じパスワードを使い回している他のサービス(銀行、SNSなど)まで乗っ取られてしまいます。

これを防ぐための技術が「ハッシュ化」です。

ハッシュ値生成MD5・SHA-1・SHA-256ハッシュ値生成

似ているようで全く違う!3つの用語

IT用語でよく混同されるのが「暗号化」「ハッシュ化」「エンコード」の3つです。 セキュリティを理解するには、まずこの違いを明確にする必要があります。

用語不可逆性用途具体例
暗号化× (戻せる)必要通信、個人情報保護AES, RSA
ハッシュ化○ (戻せない)不要パスワード保存、改ざん検知SHA-256, MD5
エンコード× (戻せる)不要データの形式変換Base64, URLエンコード

1. 暗号化 (Encryption)

「鍵」を使ってデータを読めない状態にします。正しい鍵さえあれば、元のデータに戻す(復号する)ことができます。クレジットカード番号などは、必要な時に見る必要があるので暗号化します。

2. ハッシュ化 (Hashing)

一方通行の変換です。一度ハッシュ値にしてしまったら、元のデータに戻すことは絶対にできません。 これがパスワード保存に適している理由です。 「ユーザーが入力したパスワード」をハッシュ化し、登録されている「ハッシュ値」と一致するかどうかだけを確認すれば、元のパスワードを知る必要がないからです。

3. エンコード (Encoding)

これはセキュリティ技術ではなく、単なる「形式の変換」です。Base64などが有名ですが、ルールを知っていれば誰でも元に戻せるので、パスワードを隠す目的では使ってはいけません。


ハッシュ関数の仕組みと特徴

ハッシュ関数は、任意の長さのデータ(入力)を、決まった長さの文字列(ハッシュ値)に変換する計算式のことです。

特徴1: 不可逆性

前述の通り、ハッシュ値から元のデータを計算することは不可能です。 「ミンチ肉から元のステーキ肉を復元できない」のと同じイメージです。

特徴2: 入力が少しでも変わると、結果は激変する

これを「雪崩(なだれ)効果」と呼びます。 例えば、SHA-256でハッシュ化してみましょう。

  • 入力: apple

  • 出力: 3a7bd...

  • 入力: appl**f** (1文字だけ違う)

  • 出力: 9d2b1...

一見して、微塵も似ていない全く別の文字列になります。この性質があるため、ハッシュ値から元の文字列を推測するのは極めて困難です。

特徴3: 固定長

入力が1文字でも、辞書1冊分でも、出力されるハッシュ値の長さは常に同じです(SHA-256なら64文字)。


パスワード以外での活用例

ハッシュ化はパスワード保護以外にも広く使われています。

ファイルの改ざん検知(チェックサム)

ソフトウェアをダウンロードする際、公式サイトに「MD5」や「SHA-256」の値が書かれていることがあります。 手元のファイルのハッシュ値を計算し、公式サイトの値と一致すれば、「ダウンロード中にファイルが壊れていない」「誰かにウイルスを混入されていない」という証明になります。

ブロックチェーン

ビットコインなどの仮想通貨技術の中核もハッシュ関数です。 前のブロックのハッシュ値を次のブロックに含めることで、データを鎖(チェーン)のように繋ぎ、過去のデータを改ざんするとそれ以降のすべてのハッシュ値が変わってしまう仕組みを作っています。


そのパスワード保存、本当に安全?

レインボーテーブル攻撃の脅威

ハッシュ化は不可逆ですが、「よくあるパスワード(password123など)」と「そのハッシュ値」の対応表(レインボーテーブル)を攻撃者が持っていると、マッチングによって元のパスワードがバレてしまいます。

対策:ソルト(Salt)とストレッチング

これを防ぐために、以下の対策を行います。

  • ソルト: パスワードにランダムな文字列(塩)を混ぜてからハッシュ化する。
  • ストレッチング: ハッシュ化を数千回〜数万回繰り返す。計算に時間をかけさせることで、総当たり攻撃を遅らせる。

現在は、これらを自動で行ってくれる BcryptArgon2 というアルゴリズムを使うのが標準です。


よくある質問 (FAQ)

Q. MD5は使っちゃダメなの?

A. はい、セキュリティ目的では非推奨です。 MD5は計算速度が速すぎて総当たり攻撃に弱い上、「衝突(異なるデータから同じハッシュ値が生まれること)」を見つける攻撃手法が確立されています。SHA-1も同様です。現在は SHA-256 以上、または Bcrypt を使いましょう。

Q. 忘れたパスワードを「通知」してくれるサイトは?

A. もし「あなたの今のパスワードは〇〇です」とメールで送ってくるサイトがあれば、即座に退会・パスワード変更すべきです。 それは、そのサイトがパスワードをハッシュ化せずに保存している(または復号できる暗号化で保存している)証拠であり、セキュリティ意識が極めて低いと言えます。 本来は「パスワードの再設定(リセット)」しかできないはずです。


まとめ

ハッシュ化は、デジタル社会の信頼を支える「縁の下の力持ち」です。 普段意識することはありませんが、ログインするたび、アプリを更新するたび、仮想通貨を送るたびに、裏側でハッシュ関数が働いています。

Jeneeのツールを使えば、好きな言葉をハッシュ化して、その「不可逆な姿」を目にすることができます。 ぜひ体験してみてください。

ハッシュ値生成MD5・SHA-1・SHA-256ハッシュ値生成

関連記事