【しゃーにごろ】

SHA-256 とは?

最終更新:
💡 データから、一定の長さの指紋を計算する

データから256ビット(32バイト)のハッシュ値を計算する暗号学的ハッシュ関数。16進数で表すと64桁になる。同じデータの確認などに使うが、暗号化やSHA-256単体での安全なパスワード保存とは異なる。

📌 このページのポイント
SHA-256:同じ長さの、データの指紋hello2cf24dba … 938b9824256ビット / 16進数64桁Hello185f8db3 … 6381969256ビット / 16進数64桁どちらも、SHA-256で計算同じバイト列 → 同じハッシュ値ハッシュは、復号するための暗号文ではないパスワード保存には、専用の方式を使おう
UTF-8、改行なしで計算した値を途中省略して表示。同じ出力になる衝突は数学的にはあり得ます。
ひよこ ひよこ
指紋って、64文字のこと?
ペンギン先生 ペンギン先生
SHA-256の出力は256ビット、つまり32バイトだよ。それを16進数の文字で書けば64桁になる。文字の数は表示方法の話で、64バイトのデータを出すという意味ではないんだ。同じ入力のバイト列には、同じ値が計算されるよ。
ひよこ ひよこ
大文字と小文字でも、変わる?
ペンギン先生 ペンギン先生
入力のバイト列が違えば、通常は大きく違うハッシュ値になるよ。図のhelloとHelloでも変わる。改行や文字コードが違う場合も入力が変わるので、見た目が似た文章でも同じ値とは限らない。比較するなら同じデータの扱い方で計算しよう。
ひよこ ひよこ
ハッシュが同じなら、完全に同じ?
ペンギン先生 ペンギン先生
違う入力が同じ値になる衝突は、数学的にはあり得るよ。暗号学的ハッシュは、そのような組を見つけるのが難しい性質を目指す。同じ値を整合性確認の手がかりに使えるけれど、違うデータなら絶対に違うと保証する説明ではないんだ。
ひよこ ひよこ
元のデータに戻せないなら、秘密になる?
ペンギン先生 ペンギン先生
暗号化とは違って、復号して元へ戻す仕組みではないよ。ただし候補の入力を試してハッシュを比較することはできる。短いパスワードなどをSHA-256単体で保存するのは適切ではなく、Argon2idなどの専用方式とソルトを使う。ハッシュ値だけなら安全、とは言えないんだ。
ひよこ ひよこ
ファイルを確認するときは、どう使う?
ペンギン先生 ペンギン先生
受け取ったファイルのハッシュを計算し、信頼できる経路で得た正しい値と比べるよ。攻撃者がファイルと掲載ハッシュの両方を書き換えられるなら、比較だけでは出所を保証できない。SHA-256で値を計算することと、誰が公開したデータかを確認することを分けよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「SHA-256」って出てきたら「データの確認に使う、256ビットの指紋を計算する関数」と思えばだいたいOK!
📖 おまけ:英語の意味
「Secure Hash Algorithm / SHA-256」 = 256ビットの出力を持つハッシュアルゴリズム
💬 SHA-2の一種で、NISTのSecure Hash Standardに記載されているよ。256は出力のビット数を表す。

参考資料

← 用語集にもどる