SHA-256とは?
SHA-256は、NIST(米国国立標準技術研究所)が標準化した暗号学的ハッシュ関数「SHA-2」ファミリーの一つです。任意の長さのメッセージを入力として受け取り、固定長256ビット(32バイト)のダイジェストを生成します。本ツールでは64文字の16進数として表示されます。同じ入力からは常に同じダイジェストが得られる一方で、たった1文字を変えただけでもまったく異なる出力になります(これを「アバランチ効果」と呼びます)。SHA-256はTLS証明書、電子署名、ブロックチェーン(ビットコイン)、ファイルの改ざん検知など、幅広い場面で利用されています。
$$\text{Hash} = \operatorname{SHA\text{-}256}\!\left(\text{Input Text}\right)$$
この計算ツールの使い方
入力欄に任意のテキストを入力または貼り付けて実行するだけです。ツールが入力をUTF-8でエンコードし、SHA-256アルゴリズムを実行して、16進数のダイジェストと入力のバイト長を返します。空欄のまま実行しても有効で、空文字列に対応するよく知られたダイジェストが得られます。
計算の仕組み
SHA-256はまず、メッセージの長さが512ビットの倍数になるようにパディングを行い、512ビット単位のブロックに分割します。各ブロックは64ラウンドにわたるビット演算(ローテーション、シフト、AND/XOR、剰余加算)で処理され、その過程で素数の平方根の小数部から初期化された8つの32ビット作業変数が混ぜ合わされます。各ブロックの処理後、8つのレジスタはそれまでのハッシュ状態に加算され、それらを連結したものが最終的な256ビットのダイジェストとなります。
具体例
入力 abc(3バイト)からは、ダイジェスト ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad が得られます。空文字列からは e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 が得られ、これは標準的なテストベクトルとして知られています。
$$\operatorname{SHA\text{-}256}\!\left(\text{abc}\right) = \text{ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad}$$
よくある質問
SHA-256は元に戻せますか? いいえ。SHA-256は一方向関数であり、ダイジェストから元の入力を復元することはできません。
バイト数が文字数より多くなるのはなぜですか? アクセント付き文字、絵文字、日本語などのCJK文字はUTF-8で複数バイトを使用します。そのため、バイト長が文字数を上回ることがあります。
SHA-256は今も安全ですか? はい。現時点でSHA-256に対する実用的な衝突攻撃や原像攻撃は存在せず、一般用途で推奨されるハッシュ関数であり続けています。