Passa al contenuto principale

2.1 The ChaCha Quarter Round (Il quarto di round ChaCha)

2.1 The ChaCha Quarter Round (Il quarto di round ChaCha)

L'operazione di base dell'algoritmo ChaCha è il quarto di round (quarter round). Opera su quattro interi senza segno a 32 bit, denotati a, b, c e d. L'operazione è la seguente (in notazione simile al 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;

Dove "+" denota l'addizione di interi modulo 2^32, "^" denota un OR esclusivo bit a bit (XOR), e "<<< n" denota una rotazione a sinistra di n bit (verso i bit alti).

Ad esempio, vediamo le operazioni di addizione, XOR e rotazione dalla quarta riga con numeri di esempio:

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 (Vettore di test per il quarto di round ChaCha)

Per un vettore di test, useremo gli stessi numeri dell'esempio, aggiungendo qualcosa di casuale per c.

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

Dopo aver eseguito un quarto di round su questi quattro numeri, otteniamo:

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