暗号化は鍵を使って内容を保護し、復号して利用するための変換です。ハッシュ化は入力から照合用の値を求める処理で、元のデータを復号して取り出す方式ではありません。目的と使い方で区別しましょう。
暗号化とハッシュ化を比較する
| 観点 | 暗号化 | 暗号学的ハッシュ |
|---|---|---|
| 主な目的 | 機密性の確保 | 照合・改ざん検知の材料 |
| 元データの取得 | 適切な鍵で復号する | 復号のための方式ではない |
| 鍵 | 暗号鍵を利用する | 通常のハッシュ関数自体は鍵を使わない |
| 例 | 通信やファイルの保護 | ファイルのダイジェスト・署名の材料 |
鍵付きのMACなど、ハッシュを利用する別の仕組みもあります。「ハッシュに関係する処理なら何でも鍵が不要」と一般化しないようにします。
暗号化は、正しい鍵で復号する
暗号文を作り、復号する側が鍵を使って元の内容を取り出します。通信先や保存先で元のデータを使う必要がある場合に利用します。暗号化しても、方式やモード、鍵の管理によって安全性は変わり、改ざん検知には認証付き暗号などの仕組みも必要です。
ハッシュは候補との照合に使える
| 入力(UTF-8、改行なし) | SHA-256の先頭16桁 |
|---|---|
| ABC | b5d4045c3f466fa9… |
| ABC | b5d4045c3f466fa9… |
| ABD | 69f0fb8cb1d21953… |
上の表示は、計算例としてハッシュ値の先頭部分だけを示しています。SHA-256全体の出力は256ビットで、16進数では64桁です。照合に使う場合は、用途に適した全体の値を扱います。
同じ入力なら同じ値を求められます。一方向性は「値から入力を見つけることが計算上困難」という性質で、入力候補を試す攻撃を不可能にする意味ではありません。
パスワードは専用方式とソルトで保存する
パスワードの保存では、一般的な高速ハッシュを1回かけるだけでは不十分です。Argon2idなどのパスワード専用の方式で計算コストを調整し、利用者ごとのランダムなソルトを使います。ソルトは同じパスワードでも異なる結果にし、事前計算済みの表の再利用を難しくしますが、総当たりを不可能にするものではありません。
ログインでは、入力されたパスワードを保存時と同じ方式・パラメータ・ソルトで処理し、保存済みの結果と照合します。ソルトは秘密にすることを前提とせず、ユーザーごとに異なる値を使います。
ハッシュの一致だけで送信元は確認できない
ファイルから再計算した値を、信頼できる経路で入手した正しいハッシュ値と比較します。攻撃者がファイルと比較用のハッシュ値の両方を書き換えられるなら、単に一致しただけでは正当性を確認できません。送信元の確認には署名やMACなどの仕組みを組み合わせます。
デジタル署名は、署名者の秘密鍵で生成し、公開鍵で検証します。ハッシュは署名の材料として使われますが、単独のハッシュ照合と署名検証は同じ操作ではありません。
理解を確かめる確認問題
「SHA-256でパスワードを1回ハッシュ化すれば、ソルトや計算コストを考えなくてよい」は正しいでしょうか?
解答・解説を見る
誤りです。高速ハッシュだけでは候補を大量に試されやすくなります。パスワード専用の方式、適切な計算コスト、利用者ごとのランダムなソルトなどを利用します。

コメント