メインコンテンツまでスキップ

4. Message Padding and Parsing (メッセージのパディングと解析)

本文書で規定されているハッシュ関数は、入力として提供されるメッセージまたはデータファイルのメッセージダイジェストを計算するために使用されます。メッセージまたはデータファイルはビット列として扱われるべきです。メッセージの長さは、メッセージ内のビット数です(空のメッセージの長さは0です)。メッセージ内のビット数が8の倍数である場合、コンパクトさのためにメッセージを16進数で表現できます。メッセージパディングの目的は、パディングされたメッセージの全長をSHA-224とSHA-256では512の倍数に、SHA-384とSHA-512では1024の倍数にすることです。

以下は、このパディングがどのように実行されるかを規定します。要約すると、"1"に続いて m 個の"0"、さらに64ビットまたは128ビットの整数を追加してメッセージの末尾に付加し、長さ512nまたは1024nのパディングされたメッセージを生成します。付加される整数は元のメッセージの長さです。パディングされたメッセージは、その後ハッシュ関数によって n 個の512ビットまたは1024ビットブロックとして処理されます。

4.1. SHA-224とSHA-256

メッセージの長さが L < 2^64 であるとします。ハッシュ関数に入力される前に、メッセージは次のように右側でパディングされます:

a. "1"が付加されます。例: 元のメッセージが"01010000"の場合、これは"010100001"にパディングされます。

b. K 個の"0"が付加されます。ここで K は次の方程式の最小の非負解です

( L + 1 + K ) mod 512 = 448

c. 次に、L の2進表現である64ビットブロックを付加します。このブロックを付加した後、メッセージの長さは512ビットの倍数になります。

例: 元のメッセージが次のビット列であるとします

01100001 01100010 01100011 01100100 01100101

ステップ(a)の後、これは次のようになります

01100001 01100010 01100011 01100100 01100101 1

L = 40 なので、上記のビット数は41であり、K = 407 個の"0"が付加され、合計が448になります。これは16進数で次のようになります:

61626364 65800000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000

L = 40 の64ビット表現は16進数 00000000 00000028 です。したがって、最終的にパディングされたメッセージは次の16進数になります:

61626364 65800000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000028

4.2. SHA-384とSHA-512

メッセージの長さが L < 2^128 であるとします。ハッシュ関数に入力される前に、メッセージは次のように右側でパディングされます:

a. "1"が付加されます。例: 元のメッセージが"01010000"の場合、これは"010100001"にパディングされます。

b. K 個の"0"が付加されます。ここで K は次の方程式の最小の非負解です

( L + 1 + K ) mod 1024 = 896

c. 次に、L の2進表現である128ビットブロックを付加します。このブロックを付加した後、メッセージの長さは1024ビットの倍数になります。

例: 元のメッセージが次のビット列であるとします

01100001 01100010 01100011 01100100 01100101

ステップ(a)の後、これは次のようになります

01100001 01100010 01100011 01100100 01100101 1

L = 40 なので、上記のビット数は41であり、K = 855 個の"0"が付加され、合計が896になります。これは16進数で次のようになります:

61626364 65800000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000

L = 40 の128ビット表現は16進数 00000000 00000000 00000000 00000028 です。したがって、最終的にパディングされたメッセージは次の16進数になります:

61626364 65800000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000028