💻 ITパスポート | テクノロジ系 / セキュリティ
ハッシュ関数
とは?
任意の長さのデータを、決まった長さの「指紋」に変換する一方向の変換関数。
🎬 こんなシーンを想像
ショッピングサイトのパスワードを「password123」と設定した。でも、このサービスのデータベースには「
a3f8b…c92d
」という暗号のような文字列しか保存されていない。
→ パスワードをハッシュ値に変換して保存=元に戻せない「指紋」!
🔑 ハッシュ変換の仕組み(1方向・不可逆)
ハッシュ関数
(SHA-256 など)
「password123」(短い)
「1GBの動画ファイル」(巨大)
「password124」(1文字違い)
a3f8b…c92d(256bit)
9e2f1…04ab(256bit)
ff12c…8a71(256bit)
← ハッシュ値から元データに戻すことは「できない」
入力がどんな長さでも、出力(ハッシュ値)は
常に固定長
(例:SHA-256 は 256 ビット)
一方向性
:ハッシュ値から元データを復元できない(不可逆)
同じ入力からは
必ず同じハッシュ値
が出る(再現性)
1文字でも違うと
まったく違うハッシュ値
になる(雪崩効果)
🛠️ ハッシュ関数の主な使いどころ
パスワード保管
パスワードはハッシュ値で保存。ハッキングされても元のパスワードが分からない。
改ざん検知
ファイルのハッシュ値を事前に記録。受け取ったファイルのハッシュと比較→違えば改ざんあり。
デジタル署名
文書全体ではなく「文書のハッシュ値」に署名する。処理が速く安全。
ブロックチェーン
前のブロックのハッシュ値を次のブロックに含める→チェーンが繋がり改ざん不可能に。
⚠️ ひっかけ注意ポイント
「暗号化」と混同しやすい
暗号化は
復号(元に戻す)できる
(鍵が必要)。ハッシュは
一方向で元に戻せない
。試験で「ハッシュ化したデータを復号する」という選択肢は誤り。
「衝突」という概念
理論上、異なる入力から同じハッシュ値が出ることを「衝突」という。MD5 などの古いアルゴリズムは衝突発見→現在は SHA-256 以上を推奨。
「完全に安全」は誤り
ハッシュ化されたパスワードも「レインボーテーブル攻撃」(よく使うパスワードのハッシュ一覧で照合)で解析されることがある。対策は「ソルト」を加えることで同じパスワードでも異なるハッシュ値になる。
🧠 覚え方(無理やりゴロ)
「ハッシュは一方通行のミンチ機」
牛肉(元データ)を入れたらミンチ(ハッシュ値)が出る。
ミンチから元の牛肉には戻らない=不可逆!
同じ肉を入れると
→
必ず同じミンチ
(再現性)
1gでも肉を変えると
→
まったく別のミンチ
(雪崩効果)