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