Please enable JavaScript.
Coggle requires JavaScript to display documents.
Lezione 25: algoritmo SHA - Coggle Diagram
Lezione 25: algoritmo SHA
Serve a costruire un codice hash e si basa sulla ripetizione di una finzione fi compressione
f
che riceve in input un blocco di
n
bit dal passo precedente e un blocco di messaggio di
b
bit su cui si vuole eseguire hash
Se la funzione di compressione utilizzata è robusta alle collisioni allora lo sarà anche la funzione hash risultante
Ne esistono varie tipologie, il numero identifica la lunghezza del digest prodotto (tranne nel caso 1 che è 160)
SHA-256
Lunghezza messaggio < 2^64
Dimensione blocco = 512
Lunghezza word = 32
Lunghezza digest = 256
n° passi = 64
SHA-384
Lunghezza messaggio < 2^128
Dimensione blocco = 1024
Lunghezza word = 64
Lunghezza digest = 384
n° passi = 80
SHA-1
Lunghezza messaggio < 2^64
Dimensione blocco = 512
Lunghezza word = 32
Lunghezza digest = 160
n° passi = 80
SHA-512
Lunghezza messaggio < 2^128
Dimensione blocco = 1024
Lunghezza word = 64
Lunghezza digest = 512
n° passi = 80
Aggiunta bit di riempimento
Al messaggio si aggiungono da 1 a 1024 bit di riempimento
1.1. Si aggiunge un solo bit pari a
1
dopo il messaggio originale
1.2. Si aggiungono un numero di bit uguali a
0
fino a riempire il blocco lasciando solo 128 bit liberi
2.3. Si inserisce nei 128 bit lasciati liberi il valore della lunghezza del messaggio originale
Il messaggio originale ha infatti una lunghezza massima di 2^128, tale valore è rappresentabile tramite 128 bit
Inizializzazione del buffer hash (IV)
Buffer di appoggio costituito da 512 bit divisi in 8 registri da 64 indicati con le lettere A,B,C,D,E,F,G,H che vengono via via aggiornati
Inizialmente contengono un valore dato di primi 64 bit della parte frazionaria della radice quadrata dei primi otto numeri primi
Elaborazione del messaggio a blocchi di 1024 bit
Eseguita nel
modulo f
e costituita da 80 fasi
Prende in input buffer di 8 registri da 64 bit,
la word di 64 bit,
la costante di fase da 64 bit
Produce a ogni round il buffer aggiornato da usare nella fase successiva
Vengono effettuate operazioni di AND, NOT, XOR, rotazioni circolari + XOR logici, somme modulo 2^64 tra i registri in input
Le 80 word (W0-W79) sono generate a partire dal messaggio Mi
W0-W15 sono una copia del blocco
Wt (15<t<80) sono generate tramite operazioni di somma modulo 2^64 basate sulle word precedenti (Wt-16; Wt-15; Wt-7; Wt-2) che vengono sommate tra loro
A Wt-15 e Wt-2 vengono effettuate rispettivamente un'operazione di shift a sinistra con riempimento di zeri e una rotazione a destra
Le costanti K0-K79 sono generate prendendo gli iniziali 64 bit della parte frazionaria della radice cubica dei primi 80 numeri primi
Eliminare regolarità
L'uscita del modulo F viene messa in somma (modulo2^64) con l'input Hi-1 (valori registri iniziali)
Ogni registro dopo l'uscita dal round 79 (uscita dal modulo f) viene sommato indipendentemente con il valore del registro iniziale