最終更新:

ハッシュとは?暗号化との違い・衝突・パスワード保存を解説


SHA-256:計算と照合の例 1 入力をバイト列にする hello(改行なし) UTF-8:68 65 6c 6c 6f 文字コード・改行で値が変わる 2 SHA-256で計算 出力は256ビット=32バイト 16進表記では64文字 2cf24dba5fb0a30e… 3 信頼する期待値と比較 同じバイト列なら同じ値 期待値の入手経路も大切 パスワードには専用方式を使用 復号操作はなくても候補を推測できる SHA-256:計算と照合の例 1 入力をバイト列にする hello(改行なし) UTF-8:68 65 6c 6c 6f 文字コード・改行で値が変わる 2 SHA-256で計算 出力は256ビット=32バイト 16進表記では64文字 2cf24dba5fb0a30e… 3 信頼する期待値と比較 同じバイト列なら同じ値 期待値の入手経路も大切 パスワードには専用方式を使用 復号操作はなくても候補を推測できる
復号操作はなくても候補を推測できる
ひよこ ひよこ
ハッシュは何をしているの?
ペンギン先生 ペンギン先生
入力データから一定の規則でハッシュ値を計算する関数だよ。SHA-256なら出力は256ビット。同じバイト列からは同じ値になる。ハッシュにはデータ構造用と暗号学的な用途があり、安全性の要求は同じではないんだ。
ひよこ ひよこ
暗号化とは違う?
ペンギン先生 ペンギン先生
暗号化は鍵を使って元の内容を復号する仕組み。ハッシュには、そのような復号操作がないよ。ただし「元の候補が絶対に分からない」という意味ではない。候補を計算して同じ値になるか試す攻撃はできるんだ。
ひよこ ひよこ
パスワードのハッシュが漏れたら?
ペンギン先生 ペンギン先生
短いパスワードやよくある単語なら、攻撃者が候補を試して当てる可能性があるよ。だから高速なSHA-256を一回計算するだけでは適さない。パスワード保存にはArgon2idなど、試行に時間やメモリがかかる専用方式を使うんだ。
ひよこ ひよこ
ソルトを加えると何が変わる?
ペンギン先生 ペンギン先生
パスワードごとに異なるランダムな値を加え、同じパスワードでも保存値が同じになりにくくする。事前計算した辞書を使い回しにくくするためだよ。ソルトは秘密鍵ではなく、保存値と一緒に保管できる。弱いパスワードの推測まで不可能にするわけではないね。
ひよこ ひよこ
違う入力なのに同じ値になる?
ペンギン先生 ペンギン先生
それが衝突だよ。出力の種類が有限なので、異なる入力に同じ出力があること自体は避けられない。暗号学的ハッシュでは、そのような組を実用的な計算量で見つけにくいことが重要なんだ。
ひよこ ひよこ
ダウンロードしたファイルの確認にも使える?
ペンギン先生 ペンギン先生
信頼できる経路で得た期待値と比較すれば、違いを見つけるのに役立つよ。ただし攻撃者がファイルと掲載ハッシュの両方を差し替えられるなら、それだけでは正当性を証明できない。署名や共有秘密を使うHMACは、鍵も使って検証する別の仕組みだね。
ひよこ ひよこ
ハッシュテーブルも同じ安全性が必要?
ペンギン先生 ペンギン先生
通常は検索先を振り分けるために使うので、速さや分散の良さが重要だよ。別のキーが同じ場所に入る衝突は、キーの比較などで処理する。検索が平均的に高速でも、入力や実装次第で常にO(1)とは限らないんだ。
ひよこ ひよこ
どう使い分ければいい?
ペンギン先生 ペンギン先生
ファイルの照合にはSHA-256など、パスワード保存にはArgon2idなど、秘密を共有する相手とのメッセージ検証にはHMACを検討する。目的が違うので、「最新のハッシュ一つで全部解決」とは考えず、標準のライブラリを使おう。

SHA-256の短い確認例

UTF-8でエンコードした hello(改行なし)のSHA-256は次の値です。256ビット=32バイトで、16進表記では64文字になります。

2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

hello と hello の末尾に改行を付けたデータでは入力バイト列が違うので、値も異なります。照合が合わないときは、文字コード・改行・空白・ファイルそのものの違いを確認してください。

用途別の選び方

目的方式の例誤解しやすい点
内容の照合SHA-256期待値を取得した経路も信頼できる必要がある
パスワード保存Argon2id+個別ソルトパラメータと負荷を評価。漏えい時の推測は可能
共有秘密を使う認証HMAC単に秘密文字列と本文を連結してハッシュしない
キー検索ハッシュテーブル用の関数衝突を扱う仕組みが必要。暗号用途とは別

ソルトと違い、ペッパーは秘密として別に管理する追加の値です。採用する場合は保管・ローテーション・漏えい時の対応が必要で、強いパスワード保存方式の代わりにはなりません。MD5やSHA-1を新しい安全性要件のある衝突耐性用途に選ばないでください。

参考資料

確認日:2026年9月27日。製品の仕様・料金・対応環境は導入時にも確認してください。