it-swarm-eu.dev

Funzione hash reversibile?

Esiste una funzione hash reversibile?

La funzione hash come SHA e MD5 non sono reversibili. Vorrei sapere se esistono alcune funzioni hash reversibili?

17
Geek

La definizione di una funzione hash crittografica include la resistenza alle preimmagini: dato h (x) =, dovrebbe essere impossibile recuperare x. Una funzione hash "reversibile" è l'esatto opposto di quella proprietà. Pertanto, non si può avere più una "funzione hash reversibile" di quanto si possa avere un pesce allergico all'acqua.


Forse potresti volere una funzione hash che, per la maggior parte delle persone, è una funzione hash crittografica con tutte le sue proprietà, ma che include anche una sorta di Trapdoor che consente di invertirla if conosci un segreto specifico . Questo genere di cose potrebbe esiste ma richiede matematica, come la crittografia asimmetrica. Non sono a conoscenza di una simile costruzione in questo momento, ma si potrebbe probabilmente giurare qualcosa basato su un modulo RSA, o forse una curva ellittica con coordinate prese da un modulo RSA (non ho in mente un progetto preciso, ma Ho il intuizione che può essere fatto in quel modo).

26
Tom Leek

Anche un hash non crittografico di solito non può essere invertito (ciò indipendentemente dalle altre proprietà speciali degli hash crittografici, come la resistenza a collisioni/preimmagini). Il motivo per cui di solito non è possibile è che semplicemente non si dispone di informazioni sufficienti.

Una funzione hash (generalmente) trasforma N bit di input in M bit di output, dove M è una piccola costante e la maggior parte delle volte N > M è vero. Naturalmente Nnon deve essere maggiore di M, è perfettamente possibile generare ad es. a SHA hash da un singolo byte, ma di solito il messaggio con hash è più lungo (spesso molto più lungo) del valore di hash.

Ciò significa niente di più e niente di meno per invertire l'hash e ripristinare il messaggio originale, dovresti usare magia divinazione per inserire le informazioni mancanti. Ce ne sono 2N-M soluzioni, e ognuna di esse è corretta quanto le altre.

Quindi, se si ha un hash, ad esempio, una stringa di 36 byte con SHA e si tenta di invertire questo, ci sono 2128 soluzioni, tutte ugualmente corrette.
Se è noto che l'input ha determinate proprietà ben note (come iniziare con una sequenza ben nota, come From:, o un'entropia particolarmente bassa), potresti essere in grado di escludere la maggior parte delle soluzioni e alla fine trovare un testo plausibile, forse anche quello corretto - ma questo non è affatto banale e non puoi mai dimostrare di avere il giusto uno, a meno che non lo sapessi già prima o non hai un altro modo di verifica.

12
Damon

Alcuni algoritmi hash, come i CRC (come ho notato sopra) sono reversibili. Vedi questo documento per un approccio in tal senso. (I CRC sono veloci da calcolare e ideali per proteggere i dati dalla corruzione in assenza di requisiti di sicurezza).

La progettazione di hash crittograficamente sicuri mira a garantire che non ci sia tale scorciatoia e che trovare una corrispondenza hash richieda una ricerca completa dello spazio delle chiavi.

4
Rich

Forse stai cercando qualcosa come PKI, in cui una stringa può essere crittografata con una chiave pubblica a un'estremità e non crittografata con una chiave privata all'altra. Non un hash ovviamente, ma un modo per crittografare/decrittografare una stringa per passare un segreto in giro.

1
Scott Duffy

Potresti guardare Knuth's Multiplicative Hash , che genera una mappatura reversibile e casuale tra numeri interi all'interno dei limiti della tabella hash.

Ad esempio, Optimus implementa l'algoritmo di Knuth in PHP per motivi di offuscamento degli ID sequenziali. Tuttavia, non usa questo algoritmo per scopi di sicurezza .

Puoi leggere in dettaglio nel suo libro Art of Computer Programming, Vol. specialmente da pagina 513.

1
jchook

ELI5: Cos'è un hash?

Immagina di avere problemi a mettere le cose sulla tua credenza, quindi crei un sistema che definisce quale cassetto metterai tutto a seconda del codice a barre. Hai 7 cassetti, quindi scansiona il codice a barre sul tuo telefono e ti dice dove lo metti, da 1 a 7.

Immagina ora di ottenere la tua lista della spesa di 30 articoli, dopo aver archiviato tutto e cosa sapere cosa c'è nel cassetto 3, senza aprire il cassetto. Ciò che fai? Riesci a scorrere su ogni elemento della tua lista, inserisci il tuo programma e scrivi tutti gli elementi che dice sono nel cassetto 3. Facile.

Ora immagina che la tua lista abbia qualcosa tra, diciamo, 1030 a 109000 oggetti e il tuo armadio ha 2160 elementi. Senza aprire i cassetti, come puoi sapere cosa c'è su ogni cassetto? Esegui un attacco bruteforce: testa ripetutamente ogni singolo codice fino a quando non ne ottieni uno adatto al cassetto 3. Questo è ciò che la gente dice è invertire un hash, anche se un hash non può mai essere invertito. Puoi eseguirlo di nuovo solo fino a quando non ottieni lo stesso risultato.

Una funzione hash, per definizione, non può mai essere invertita. Se puoi, non è un hash. È codifica o crittografia.

0
ThoriumBR