2.1 The ChaCha Quarter Round (ChaCha 四分之一轮)
2.1 The ChaCha Quarter Round (ChaCha 四分之一轮)
ChaCha 算法的基本操作是四分之一轮 (quarter round)。它对四个 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 位左循环移位 (向高位方向)。
例如, 让我们看看第四行的加法, 异或和循环移位操作的示例数字:
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
在这四个数字上运行四分之一轮后, 我们得到:
a = 0xea2a92f4
b = 0xcb1cf8ce
c = 0x4581472e
d = 0x5881c4bb