A mia conoscenza, un file può avere solo un hash e un hash corrisponde solo a quel file (tenendo da parte il 2 file one hash bug
). Usando questa conoscenza è possibile creare un algoritmo per ricreare un file usando esclusivamente l'hash?
Teoricamente sì, tecnicamente estremamente difficile anche se gli hash sono funzioni matematicamente irreversibili.
Facciamo un esempio. La dimensione massima di input per un algoritmo SHA1 è 2 ^ 64-1 bit. Quindi con un algoritmo di hashing apparentemente stai mappando tutti i possibili file sotto 2 ^ 64-1 bit su un valore di 160 bit di lunghezza fissa.
Quindi in teoria ci possono essere numerose collisioni mentre stiamo mappando da un set più grande ad un set più piccolo.
In questo caso se c'è una tabella di ricerca con hash di tutti i possibili valori di {M} possiamo cercare i valori hash nella tabella e possiamo restringere i possibili messaggi per un hash a una manciata di collisioni che il valore hash può avere. Nell'esempio sopra, se viene dato il valore hash A, possiamo essere certi che il messaggio sia M1 o M4 o M10. Se conosciamo la dimensione approssimativa del file, è possibile formulare un'ipotesi per indicare il vero messaggio.
Tecnicamente è impossibile a causa del gran numero di messaggi possibili.
Prima di tutto, l'hashing è sempre una funzione a senso unico. (Idealmente) Non c'è modo di "decodificare" la funzione hash analizzando i valori dell'hash.
In secondo luogo, non è possibile che un hash possa trasportare informazioni (o metadati) sul file.
Gli algoritmi di hash (come MD4 e gli algoritmi SHA successivi) usano variabili a 32 bit con funzioni booleane bit a bit, come gli operatori logici AND, OR e XOR per lavorare dal file di input / testo all'hash di output.
Leggi altre domande sui tag hash file-encryption md5