Come vengono calcolate le cifrature SHACAL-2?
Sto cercando di conoscere la funzionalità sottostante delle diverse funzioni hash (attualmente SHA) e sono piuttosto bloccato anche dopo aver visto un video di Stanford su di esso.
Un metodo di hashing consiste nell'usare la costruzione Merkel-Damgård con la funzione David Meyers e cifrari a blocchi SHACAL-2.
Per quanto ho capito MD è il messaggio diviso in una catena di blocchi a 64 bit contenenti il valore del blocco precedente o IV (vettore iniziale definito dalla funzione hash o una chiave salt personalizzata). Il valore di blocco o IV insieme al valore di blocco corrente e una chiave di bit x è dopo aver attraversato la funzione SHACAL-2, quindi il nuovo codice.
Questo è corretto capito? Se è: cosa succede all'interno della funzione SHACAL? Cos'è la matematica?
L'ho trovato ma non risponde alla mia domanda: SHACAL in SHA-256
Risposte
La costruzione MD utilizza una funzione di compressione $C$ ($F$ nelle figure) in modo che abbia due ingressi.
$$h_i = C(h_{i-1},m_i)$$
e il primo $h_{-1} = IV$ e l'ultimo $H = h_{2^k-1}$ è il valore hash.
La funzione di compressione può utilizzare un codice a blocchi, dove il messaggio al codice a blocchi è il valore hash precedente e la chiave è il messaggio. $h_i = E_{m}(h_{i-1})$
La prima descrizione dell'utilizzo di un cifrario a blocchi per la funzione di compressione esiste nella tesi di Merkle a pagina 11 . Questa costruzione è totalmente insicura poiché il codice a blocchi esistente è stato concatenato direttamente e si può dimostrare che lo è$\mathcal{O}(2^{n/2})$ seconda resistenza prima dell'immagine invece di $\mathcal{O}(2^{n})$.
Non vogliamo attacchi chiave correlati come esistono in alcuni cifrari a blocchi come AES e DES. Ciò non crea problemi per la crittografia poiché le chiavi vengono scelte in modo uniforme in modo casuale, tuttavia, le chiavi correlate possono essere utilizzate per attaccare la funzione hash. Questo è ampiamente discusso da Mannik e Preenel
Vogliamo input di grandi dimensioni a causa degli attacchi di collisione sulle funzioni di compressione [1] e quindi più round da elaborare. Quindi i progettisti creano un nuovo codice a blocchi per le costruzioni MD invece di utilizzare quelli esistenti. Per SHA-1 è chiamato SHACAL e per SHA-2 è chiamato SHACAL-2.
Il valore di divisione dipende dalla funzione di compressione, MD5, SHA-1 e SHA256 utilizzano blocchi di messaggi a 512 bit, SHA512 utilizza blocchi di messaggi a 1024 bit. I messaggi vengono riempiti in modo da essere multipli della dimensione del blocco con la dimensione del messaggio codificata alla fine.
Ad esempio, riempimento SHA-512 su NIST FIPS 180-4
Supponiamo che la lunghezza del messaggio, $M$, è $\ell$bit. Aggiungi il bit
1
alla fine del messaggio, seguito da$k$ zero bit, dove $k$ è la soluzione più piccola e non negativa dell'equazione $$\ell + 1 + k \equiv 896 \bmod 1024$$ Quindi aggiungi il blocco a 128 bit che è uguale al numero $\ell$ espresso utilizzando una rappresentazione binaria
Formalizza per dimensioni di blocco arbitrarie $b$ e $d$-dimensione del messaggio codificato in bit (64 per SHA-1 e SHA256, 128 per SHA512.
$$\ell + 1 + k \equiv b-d \bmod b$$
Quindi i criteri di progettazione prevedono un codice a blocchi con molti round, SHACAL ne ha 80, SHA-256 ne ha 64 e SHA512 ne ha 80 mantenendo la funzione di arrotondamento semplice.
E il codice a blocchi viene utilizzato come Davies – Meyer per creare una funzione di compressione unidirezionale.
Ad esempio, la matematica per SHA256 è
- $\operatorname{Ch}(E,F,G) = (E \land F) \oplus (\neg E \land G)$
- $\operatorname{Ma}(A,B,C) = (A \land B) \oplus (A \land C) \oplus (B \land C)$
- $\Sigma_0(A) = (A\!\ggg\!2) \oplus (A\!\ggg\!13) \oplus (A\!\ggg\!22)$
- $\Sigma_1(E) = (E\!\ggg\!6) \oplus (E\!\ggg\!11) \oplus (E\!\ggg\!25)$
La rotazione bit per bit utilizza costanti diverse per SHA-512. I numeri forniti sono per SHA-256.
Il rosso$\boxplus$ significare $ c = a + b \mod 2^{32}$, cioè addizione modulo.
Come possiamo vedere, operazioni semplici che le CPU possono gestire, funzioni rotonde leggere, con una struttura Feistel sbilanciata leggermente degradata.
E abbiamo imparato dall'algoritmo di Tiny Encryption che anche i round semplici possono essere protetti dopo 32 round.