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

2.1 The ChaCha Quarter Round (ChaCha クォーターラウンド)

2.1 The ChaCha Quarter Round (ChaCha クォーターラウンド)

ChaChaアルゴリズムの基本操作はクォーターラウンド (quarter round) です。これは4つの32ビット符号なし整数 a, b, c, d に対して動作します。操作は次のとおりです (C言語風の表記法):

a += b; d ^= a; d <<<= 16;
c += d; b ^= c; b <<<= 12;
a += b; d ^= a; d <<<= 8;
c += d; b ^= c; b <<<= 7;

ここで "+" は 2^32 を法とする整数加算を表し, "^" はビット単位の排他的論理和 (XOR) を表し, "<<< n" は n ビット左ローテーション (高位ビット方向) を表します。

例として, 4行目の加算, XOR, ローテーション操作をサンプル数値で見てみましょう:

a = 0x11111111
b = 0x01020304
c = 0x77777777
d = 0x01234567
c = c + d = 0x77777777 + 0x01234567 = 0x789abcde
b = b ^ c = 0x01020304 ^ 0x789abcde = 0x7998bfda
b = b <<< 7 = 0x7998bfda <<< 7 = 0xcc5fed3c

2.1.1 Test Vector for the ChaCha Quarter Round (ChaCha クォーターラウンドのテストベクトル)

テストベクトルとして, 例と同じ数値を使用し, c にランダムな値を追加します。

a = 0x11111111
b = 0x01020304
c = 0x9b8d6f43
d = 0x01234567

これら4つの数値にクォーターラウンドを実行すると, 次の結果が得られます:

a = 0xea2a92f4
b = 0xcb1cf8ce
c = 0x4581472e
d = 0x5881c4bb