Passa al contenuto principale

3. Operations on Words (Operazioni sulle parole)

I seguenti operatori logici verranno applicati alle parole in tutte le quattro operazioni hash specificate nel presente documento. SHA-224 e SHA-256 operano su parole a 32 bit mentre SHA-384 e SHA-512 operano su parole a 64 bit.

Nelle operazioni seguenti, x<<n si ottiene come segue: scartare i n bit più a sinistra di x e quindi riempire il risultato con n bit a zero sulla destra (il risultato avrà comunque lo stesso numero di bit). Allo stesso modo, x>>n si ottiene come segue: scartare i n bit più a destra di x e quindi anteporre il risultato con n bit a zero sulla sinistra (il risultato avrà comunque lo stesso numero di bit).

a. Operazioni logiche bit a bit sulle parole (Bitwise Logical Word Operations)

X AND Y  =  "and" logico bit a bit di X e Y.

X OR Y = "or inclusivo" logico bit a bit di X e Y.

X XOR Y = "or esclusivo" logico bit a bit di X e Y.

NOT X = "complemento" logico bit a bit di X.

Esempio:

         01101100101110011101001001111011
XOR 01100101110000010110100110110111
--------------------------------
= 00001001011110001011101111001100

b. L'operazione X + Y è definita come segue: le parole X e Y rappresentano interi a w bit x e y, dove 0 <= x < 2^w e 0 <= y < 2^w. Per gli interi positivi n e m, sia

n mod m

il resto della divisione di n per m. Calcolare

z  =  (x + y) mod 2^w.

Quindi 0 <= x < 2^w. Convertire z in una parola Z e definire Z = X + Y.

c. L'operazione di spostamento a destra (Right Shift Operation) SHR^n(x), dove x è una parola di w bit e n è un intero con 0 <= n < w, è definita da

SHR^n(x) = `x>>n`

d. L'operazione di rotazione a destra (spostamento circolare a destra / Rotate Right / Circular Right Shift) ROTR^n(x), dove x è una parola di w bit e n è un intero con 0 <= n < w, è definita da

ROTR^n(x) = (`x>>n`) OR (x<<(w-n))

e. L'operazione di rotazione a sinistra (spostamento circolare a sinistra / Rotate Left / Circular Left Shift) ROTL^n(x), dove x è una parola di w bit e n è un intero con 0 <= n < w, è definita da

ROTL^n(X) = (`x<<n`) OR (x>>(w-n))

Notare le seguenti relazioni di equivalenza, dove w è fisso in ogni relazione:

ROTL^n(x) = ROTR^(w-n)(x)

ROTR^n(x) = ROTL^(w-n)(x)