SHA-256(Secure Hash Algorithm 256-bit)は、任意のサイズの入力データから固定サイズの256ビット(32バイト)のハッシュ値を生成する暗号学的ハッシュ関数です。以下に、その動作の簡略化された説明を示します:
1. 入力のパディング: 入力メッセージはアルゴリズムによって必要とされる512ビット(64バイト)の倍数の長さになるようにパディングされます。
2. 初期化: SHA-256は8つの32ビット変数(ハッシュ値として知られています)を特定の定数に初期化します。これらのハッシュ値は、入力メッセージのブロックを処理するための圧縮関数を初期化するために使用されます。
3. ブロックの処理: パディングされたメッセージは512ビットのブロックに分割されます。各ブロックは、固定サイズのバッファ(512ビット)で動作する圧縮関数を使用して一連の変換を行い、ハッシュ値を更新します。
4. 圧縮関数: 各ブロックについて、圧縮関数は複数の処理ラウンドで現在のハッシュ値をブロックデータと混合します。これにはビット演算(AND、OR、XORなど)、加算(2^32で割った余り)、および循環シフトが含まれます。
5. 最終的なハッシュ値:すべてのブロックの処理が完了すると、最終的なハッシュ値はプロセス全体で継続的に更新されたハッシュ値から導出されます。この最終的なハッシュ値は、元の入力メッセージを一意に表す256ビットの出力です。
SHA-256は、計算効率が高く、衝突攻撃(異なる入力で同じハッシュ値が生成される攻撃)や事前画像攻撃(指定された出力にハッシュされる入力を見つける攻撃)に対する高いセキュリティを提供するように設計されています。デジタル署名、メッセージ認証コード(MAC)、さまざまなセキュリティプロトコルで広く使用されています。