Domanda:
In che modo sono utili gli algoritmi di hashing se l'implementazione è pubblica?
Jan Trindal
2020-03-06 06:46:58 UTC
view on stackexchange narkive permalink

Potrei aver frainteso, ma se voglio usare un algoritmo di hashing come argon2, cosa impedisce a qualcuno di vedere come funziona e invertire quello che fa?

Principio di Kerckhoffs: un sistema crittografico dovrebbe essere sicuro anche se tutto ciò che riguarda il sistema, tranne la chiave, è di dominio pubblico.
Inoltre, notato da alcune risposte ma non da tutte, un hash in realtà non è tecnicamente "reversibile" (il che significa che non è una funzione uno a uno, cioè per alcuni passaggi, 2 input diversi potrebbero dare lo stesso output, quindi dato l'output,non puoi essere sicuro di quello che era prima)
Sai come funzionano i controlli delle password.Fornisci una password e il sistema controlla se è quella corretta.Saresti in grado di indovinare la password "invertendo ciò che fa"?
Niente li ferma, ma devi considerare che migliaia delle migliori persone sulla Terra ci provano per decenni e falliscono ... quindi diamo per scontato che domani nessuno potrà farlo anche lui.Inoltre la maggior parte della crittografia moderna si basa su noti problemi matematici.Quindi se qualcuno arrivasse e li risolvesse, risolverebbero indirettamente anche quei problemi.Molti di questi problemi sono irrisolti dagli anni '50 o prima e quindi sarebbe un'enorme scoperta con molte conseguenze, non limitate all'inversione di quello specifico algoritmo di hash / crittografia.
L'algoritmo per trasformare una mucca in carne macinata è disponibile al pubblico.Cosa impedisce a qualcuno di invertire quello che fa e trasformare la carne macinata in una mucca?
Inizia con una domanda più semplice: cosa ti impedisce * di farlo?
Il design di un'arma nucleare a pistola è di dominio pubblico.Ciò che impedisce alle persone di produrre armi nucleari nel cortile è un vincolo completamente diverso: la disponibilità dell'U-235.Solo perché puoi dire "fai X" non significa che fare X sia effettivamente fattibile.
ecco la mia funzione hash: somma tutti i byte.ho un messaggio il cui hash è 2437. qual è il messaggio?
Se posso ipotizzare un po ', OP, sospetto che tu faccia questa domanda perché, intuitivamente, l'hashing di una password sembra che dovrebbe essere un'operazione più semplice e meno distruttiva rispetto, ad esempio, trasformare una mucca in carne macinata.Ancora troppo complesso per un laico comune (come te), ma qualcosa che qualcuno con un Ph. D e una forza di volontà sufficiente potrebbe capire.
Questo risponde alla tua domanda?[Perché le funzioni hash sono unidirezionali?Se conosco l'algoritmo, perché non posso calcolarne l'input?] (Https://security.stackexchange.com/questions/11717/why-are-hash-functions-one-way-if-i-know-l-algoritmo-perché-non-posso-calcolare-t)
Una semplice domanda: ho un numero casuale e lo divido per 7. Il resto è 2. Qual è il mio numero originale?Sai tutto quello che ho fatto, quindi cerca di invertirlo.
@TheHansinator Non penso che tu abbia bisogno di un dottorato di ricerca per trasformare una mucca in carne macinata.
@JosefsaysReinstateMonica Scusa, ho scritto male - volevo dire quanto fosse facile invertire ogni algoritmo.Per chi non lo sapesse, sembra che invertire un algoritmo di hashing della password sia qualcosa che potresti fare con un dottorato di ricerca e molta pazienza, perché non sanno che sarebbe come trasformare la carne macinata di nuovo in una mucca.
Tredici risposte:
ThoriumBR
2020-03-06 07:21:49 UTC
view on stackexchange narkive permalink

Essere pubblici è esattamente il punto: mostri a tutti come è fatto e quanto sia difficile invertirlo. È come mostrarti un enorme puzzle con un trilione di pezzi, ma con ogni pezzo al suo posto e mescolare tutto. Sai che tutti i pezzi formano il puzzle (l'hai appena visto), e sai che è molto, molto difficile rimettere tutto a posto. Un hash pubblico mostra come è fatto (il risultato) e quanto è difficile fare tutto al contrario.

Una funzione hash pubblica è solo un insieme di operazioni matematiche. Chiunque può (ma solo pochi lo faranno) eseguire le operazioni a mano e dimostrare che l'algoritmo funziona come previsto. Chiunque può invertirlo, ma ci vuole così tanto tempo (trilioni di anni con tutta la potenza di calcolo del nostro pianeta combinata) che il modo più economico per invertirlo è una forza bruta.

A meno che non sia carino funzione hash insicura di base.

"Anche chiunque può invertirlo, ma ci vuole così tanto tempo" - una funzione di hashing * non * può essere invertita, non importa quanto tempo ci dedichi (supponendo che sia quella in cui l'intervallo di valori di input è maggiore dell'intervallodei valori di output).Il meglio che puoi sperare è trovare un input che produca lo stesso output, ma non puoi mai identificare l'input originale.
@JonBentley: se non ci sono collisioni, il tuo "input che crea lo stesso output" è l'input iniziale.
@WoJ il principio della casella: tutte le funzioni hash hanno collisioni
@JacobKrall: hai ragione ovviamente, non ero chiaro.Buone funzioni hash ridurranno al minimo il rischio di una collisione, quindi quando trovi un input che è sottoposto a hash su un dato output, allora si può presumere che l'input sia lo stesso di quello originale.Ma sì, questa non è davvero una certezza.Sono corretto.
@WoJ Considerando che un tipico algoritmo hash comunemente usato accetterà un input di dimensioni arbitrarie, esiste un numero infinito di input per un dato output.Quindi non è possibile che l'input "possa essere assunto come quello originale" o che sia * probabile * che siano gli stessi.Ridurre al minimo il rischio di collisioni non significa che la * quantità * di possibili collisioni sia bassa, ma piuttosto che la probabilità di * trovarne * una sia bassa.
@WoJ A meno che tu non conosca la dimensione dell'input originale e anche quella corrisponde, in realtà non puoi assolutamente presumere che un input che produce l'output corretto sia l'input originale.E anche in questo caso, se la dimensione dell'input è significativamente (più ordini di grandezza) maggiore della dimensione dell'output hash, non puoi ancora fare questa ipotesi a meno che tu non sappia di più sull'input originale (come la struttura interna prevista per quel fileil tipo è).
Anche se quando hai conoscenze aggiuntive come "L'input era una stringa ben formata di byte UTF tra 8 e 24 caratteri con almeno un numero superiore e un carattere speciale salato con X e condito con Y" puoi essere abbastanza sicuro di trovartitrovare con quelle caratteristiche è l'originale;)
* Chiunque può (ma solo pochi lo faranno) eseguire le operazioni a mano e dimostrare che l'algoritmo funziona come previsto. * - Sono abbastanza sicuro che nessuna delle funzioni hash comunemente usate abbia effettivamente dimostrato matematicamente di essere resistente alle collisioni.
@Affe Circa due anni fa o giù di lì qualcuno ha ottenuto la prima (e unica?) Istanza nota di collisione di SHA1 cercando di fare un commit git.Quindi da qualche parte là fuori c'è un progetto che ha il codice sorgente in due momenti diversi nel tempo che sono diversi che genera lo stesso valore hash
@WoJ - Penso che quello che Jon intende dire è che così com'è questa risposta è un po 'confusa perché dice: "Chiunque può anche invertirlo, ma ci vuole così tanto tempo .. che il modo più economico per invertirlo è una forza bruta".Il che implica che gli hash hanno un modo di invertire la forza bruta ma la forza bruta è più efficace.Questa risposta forse non capisce che la forza bruta e l'inversione di un hash sono esattamente la stessa cosa.Questo rende sciocca l'ultima frase nella risposta: `puoi provare a invertire l'hash con la forza bruta ma ci vuole così tanto tempo che dovresti invece forzarla '
... Se esiste un algoritmo di hashing che può essere invertito senza forzatura bruta allora non è una funzione hash, è una mappa (o in matematica diciamo che è una * funzione *)
@JonBentley mentre le funzioni hash di solito hanno un input più grande della dimensione dell'output, la dimensione dell'output (almeno per quelle crittografiche) di solito è ancora abbastanza grande da non poter provare abbastanza input per ottenere una collisione.Il punto è che dovrebbe essere impossibile persino trovare una singola pre-immagine (non importa se è l'originale o un'altra) o una collisione.
Dire che un hash non può essere invertito, nemmeno con la forza bruta, sembra un po 'troppo semplificato.Voglio dire, nel caso generale, un hash potrebbe essere invertito per generare una famiglia di messaggi che, se sottoposti a hash, produrrebbe lo stesso hash.Quindi, se ciò fosse pratico, un utente malintenzionato potrebbe essere in grado di indovinare ragionevolmente messaggi particolari.
keithRozario
2020-03-06 10:39:11 UTC
view on stackexchange narkive permalink

Probabilmente non è la risposta che stai cercando, ma considera questo.

Prendi un numero di 10 cifre, qualcosa come 3.481.031.813, e poi ora con carta e penna trova il quadrato (cioè moltiplicalo da solo). Anche se noioso, questo è relativamente semplice e può essere realizzato dopo un po 'di tempo.

Ora con la stessa penna e carta, prova a calcolare la radice quadrata di un numero di 20 cifre. Questo è un compito molto molto più difficile, anche se è effettivamente il contrario del primo compito.

Le funzioni matematiche possono essere create, in modo che la funzione inversa sia molto più difficile da risolvere. Gli hash in un modo portano questo alla loro conclusione logica: la funzione è così difficile da risolvere da essere resa praticamente irrisolvibile.

A questo si aggiunge il fatto che le informazioni vengono perse lungo il percorso. Il quadrato di 2 è 4, ma la radice quadrata di 4 è sia +2 che -2. Le informazioni sono andate perse durante la funzione quadrato, su quale fosse il segno del numero originale. Anche le funzioni hash lo fanno in modo efficace, le informazioni vengono perse quando prendi un file da 10 GB e lo riduci a un hash a 256 bit, semplicemente non c'è più modo di ricostruire il messaggio originale.

-1 Anche se capisco il punto che stai cercando di fare non funziona davvero.È facile prendere le radici quadrate sui numeri reali (o su Z dove devi solo sottolineare che per la maggior parte dei numeri non ci sono radici quadrate).Anche con carta e penna è possibile inserire un numero di 20 cifre in tempi ragionevoli.Vuoi davvero usare qualcosa come il factoring come esempio che è effettivamente lento.Inoltre stai confondendo due cose che è il fatto che una funzione hash non è iniettiva e che è difficile trovare una preimage.Questi non sono necessariamente correlati.
@DRF - Concordato.Keith, penso che dovrai cambiare il tuo esempio.La differenza tra l'hashing e "l'inversione teorica di un hash" è "Trivial" e "Basically Impossible".La differenza nel tuo esempio è "Meh" e "Ugh, benissimo".
@DRF hai ragione su entrambi gli account, ma penso comunque che questo esempio non sia male: la funzione quadrato è effettivamente sia _facile da calcolare che trovare una preimage_ (anche se anche questo non è veramente _difficile_), e non iniettiva (anche se inun modo molto innocuo).Quindi ha le caratteristiche essenziali di una funzione hash, solo che entrambe sono troppo deboli per essere effettivamente utilizzabili.
Il suo esempio è un modo molto semplice per illustrare che qualcosa può essere più difficile da ripristinare che da calcolare.Che non si adatti bene alla differenza tra hashing e un-hashing non importa a quello che sta cercando di dire.
@leftaroundabout Ebbene, l'esempio non fallisce del tutto ma presenta alcuni problemi molto specifici.In realtà potrei avere un problema più grande con il fatto che il non-iniettivo implica che sia difficile trovare la preimage - mi rendo conto che non è quello che dice il poster, ma sembra un po 'così - quindi con il fatto che la radice quadrata è facile da invertire.Puoi avere funzioni in cui è più difficile calcolare la funzione che trovare la pre-immagine, ad esempio il valore assoluto.
Ma penso che la cosa più importante sia che questa sarebbe la migliore risposta in termini di spiegazione dei concetti necessari se solo poche cose fossero cambiate per non essere fuorvianti.(inoltre non hai idea di quante volte ho dovuto spiegare a qualcuno che non essere in grado di invertire una funzione non è la stessa cosa che non riuscire a trovare una pre-immagine)
Esistono anche molti metodi per accelerare manualmente le radici quadrate (stima iniziale, metodo babilonese) https://en.wikipedia.org/wiki/Methods_of_computing_square_roots
@DRF Penso che tu abbia analizzato troppo il punto di ciò che questa risposta stava cercando di ottenere con l'esempio della radice quadrata.Voleva semplicemente mostrare, in un modo semplice che qualcuno senza conoscenze matematiche avanzate può comprendere, che puoi avere una funzione che è più difficile da risolvere in una direzione che nell'altra.Il * grado * della differenza di difficoltà non è quello che veniva dimostrato, né altri concetti relativi all'hashing.
Una funzione hash è impossibile da calcolare al contrario, non solo difficile.Questa è un'analogia ragionevole per la crittografia asimmetrica, ma non per le funzioni hash.
Conosco un metodo per calcolare la radice quadrata di un numero su carta che ha la stessa complessità della divisione lunga.
La moltiplicazione standard di carta e matita di un intero n-bit richiede n ^ 2 volte, mentre la radice quadrata richiede n ^ 2 log (n) tempo usando il metodo "indovina e controlla" insegnato alla scuola elementare.
Mike Ounsworth
2020-03-06 07:15:57 UTC
view on stackexchange narkive permalink

Non credo che sarò in grado di dare una risposta che ti soddisfi pienamente, ma la risposta breve è che perché una cosa sia chiamata "funzione hash crittografica" deve essere una funzione abbastanza complessa che questo tipo di il reverse engineering non è facile. Questo non vuol dire che sia impossibile, ma non appena qualcuno fa anche solo un po 'di progresso nel reverse engineering di una funzione hash crittografica, la considereremo non funzionante e passeremo a qualcosa di più forte. Puoi leggere di più sulle proprietà delle funzioni hash crittografiche qui (wikipedia).

Come esempio diamo un'occhiata a SHA-1, le proprietà di una funzione hash crittografica sono:

  • Resistenza pre-immagine
  • Seconda resistenza pre-immagine
  • Resistenza alle collisioni

Nel 2005 è stato inventato che può trovare collisioni in circa 2 60 operazioni. Sono ancora milioni di $ USD per eseguire quell'attacco e, per quanto ne so, non ci sono ancora attacchi alle altre due proprietà crittografiche (pre-immagine e seconda pre-immagine), ma questo è sufficiente per considerare SHA-1 completamente rotto.

user253751
2020-03-06 18:24:20 UTC
view on stackexchange narkive permalink

Perché non puoi invertirli.

Fondamentalmente, se è così facile, perché non lo fai? Bene, c'erano funzioni hash più semplici e le persone hanno capito come invertirle, e poi altre persone hanno fatto in modo che quei modi non funzionassero. Ormai, abbiamo funzioni hash che nessuno sa come invertire.

Potrebbe essere illuminante provare effettivamente a invertire qualcosa come MD4 e vedere dove sei bloccato. Quindi scopri come è stato invertito MD4. Per quest'ultima parte, dovrai trovare e leggere i documenti accademici: è più facile se sei uno studente universitario e la tua università paga per darti accesso ai luoghi in cui vengono caricati i documenti, ma spesso puoi trovarli su Internet altrove.

Facciamo un esempio di questa irreversibilità: lascia che la funzione hash sia quella di dividere il numero in due parti e sommarle insieme.Cose semplici.Inizia ad esempio con 8734, dividilo in 87 e 34, sommali insieme a 121. Quindi ti imbatti nell'hash 675. Qual era il numero originale?Puoi trovare molti candidati, ma non puoi essere sicuro di quale fosse.Un algoritmo di hash crittografico rende persino ridicolmente difficile trovare i candidati.
@Suppen Questo non è il tipo di irreversibilità che di solito è importante con le funzioni hash.5566 ha anche hash a 121. Quindi, dopo aver ottenuto l'hash in qualche modo, posso anche accedere con il passcode 5566. Non importa che non sia il passcode previsto.
Matija Nalis
2020-03-07 03:21:28 UTC
view on stackexchange narkive permalink

Per fare l'analogia, conoscere "come funziona la funzione di hashing" è come "conoscere una ricetta per i pancake". È semplice: prendi farina, acqua, uovo, un pizzico di sale e zucchero e mescolali insieme, poi mettili in padella con olio caldo, e poi riempi con marmellata o quello che vuoi.

Semplice, veloce e facile da sapere come fare, e la sua conoscenza (proprio come la conoscenza di come funziona la funzione di hashing) è pubblica (quindi non c'è nemmeno bisogno di decodificarla)

Ora, vuoi "invertire l'hash". Applica la stessa analogia con il pancake: hai un delizioso pancake alla marmellata caldo finito e vuoi estrarre da esso "l'uovo crudo originale non strapazzato".

Buona fortuna con questo: nessuna quantità di "processo di reverse engineering per fare pancake" ti aiuterà a farlo.

Allo stesso modo in cui funziona la matematica utilizzata nelle funzioni hash crittografiche - lo è estremamente semplice da fare in un modo, ma non è possibile farlo al contrario.

Oppure prova a estrarre la ricetta mangiando una torta.Questo è almeno teoricamente possibile e puoi forzarlo a qualcosa di simile se hai abbastanza ingredienti.
kelalaka
2020-03-07 19:08:22 UTC
view on stackexchange narkive permalink

TL; DR; Le funzioni di hash crittografico sono progettate per essere unidirezionali indipendentemente dal fatto che siano progettate apertamente o meno.


Prima di tutto, Argon2 è un algoritmo di hashing della password per coloro che vogliamo da loro

  • essere lento : quindi la ricerca della password richiederà un costo maggiore
  • requisiti di memoria di grandi dimensioni: in modo che la ricerca parallela con ASIC / FPGA / GPU sia vietata
  • e l ' indipendenza dei dati al fine di prevenire gli attacchi del canale laterale ( Argon2i in questo caso).

Per l'hashing della password, la resistenza alle collisioni non è richiesta, sono richieste le resistenze pre-immagine.

Per le funzioni hash crittografiche come SHA2, SHA3, serie Blake, il primo requisito è la resistenza alle collisioni. Una volta che hai una resistenza alle collisioni, puoi avere le resistenze pre-immagine (la seconda dimostrata implica che la prima è complicata e richiede un grande input).

cosa impedisce a qualcuno di vedere come funziona e di invertire quello che fa?

Nella crittografia moderna, lavoriamo con i principi di Kerckhoffs. Insomma, a parte la chiave, tutto è pubblico. Non tutte le funzioni hash crittografiche sono senza chiave, esistono funzioni hash con chiave come HMAC e NMAC.

Le funzioni hash sono progettate per funzionare con lunghezza di dimensione arbitraria e dimensione di output fissa. Ciò implica:

  • Secondo il principio della buca, le collisioni sono inevitabili.
  • Se in qualche modo si trova una pre-immagine di una funzione hash, non si può decidere che sia la pre-immagine o meno senza informazioni aggiuntive.

Pertanto, essendo invertibile , anche se non lo vogliamo e non esiste un attacco simile a funzioni hash ben progettate, potrebbe non essere molto utile.

Perché non può essere reversibile;

La risposta esatta dipende dal design della funzione hash. Ad esempio, diamo un'occhiata alla serie SHA256. Usano la funzione di compressione e che è progettata da un codice a blocchi altamente iterato in cui il messaggio è la chiave. La funzione di compressione che accetta i precedenti 256 bit come testo normale e l'attuale messaggio a 512 bit come chiave e produce un output a 256 bit. Nell'interno, la funzione round del cifrario a blocchi utilizza l'operazione AND . L'operazione AND perde informazioni e questo impedisce la reversibilità. Quindi, anche se hai solo un messaggio con hash a 256 bit (che richiede riempimento) non puoi tornare indietro poiché la funzione di compressione non è reversibile .

Ciò non significa che non sia possibile attacco alle funzioni hash crittografiche. MD5 ha un attacco di collisione, SHA-1 ha un attacco di collisione e recentemente questo si è trasformato in un messaggio di falsificazione ( un elenco degli attacchi a SHA-1).

freakish
2020-03-06 18:47:14 UTC
view on stackexchange narkive permalink

Diamo un'occhiata al problema da un punto di vista matematico. Per il bene dell'argomento, supponiamo che una funzione di hashing sia una qualsiasi funzione, diciamo f (x) che mappa un insieme di input X su un insieme di output Y .

Quindi mi stai chiedendo: se conosco f e so y perché non riesco a trovare semplicemente x tale che f (x) = y ? La bellezza (e l'unica ragione per cui ha senso) della crittografia è che ci sono funzioni progettate in modo tale che risolvere f (x) = y è follemente difficile, anche quando sai esattamente cosa f e y lo sono.

Questa è solo matematica, alcune equazioni sono difficili. Infatti, per alcune funzioni (come la famiglia SHA) non è noto alcun metodo efficiente per risolvere queste equazioni. Questa è anche nota come resistenza preimage, una delle caratteristiche fondamentali delle funzioni crittograficamente sicure.

gnasher729
2020-03-08 11:27:03 UTC
view on stackexchange narkive permalink

Esistono operazioni matematiche facilmente reversibili. Ad esempio, "aggiungi 312,579" può essere facilmente annullato eseguendo "sottrarre 312,579". Se Argon usasse solo operazioni facilmente reversibili, potresti essere in grado di invertirlo. Non è così.

Un'operazione abbastanza semplice che non può essere annullata è calcolare x ^ 3 modulo p, dove p è un numero elevato. Se ti do un numero y e ti dico che y = x ^ 3 modulo p, non esiste un modo noto per trovare x in un tempo ragionevole a meno che non ti fornisca alcune informazioni aggiuntive su p. (Questa è all'incirca la base per RSA).

Per l'hashing, che esegue l'hashing arbitrario di grandi quantità di dati in dati di dimensioni fisse, c'è anche il problema che molti valori di input diversi produrranno lo stesso output con hash. Quindi le funzioni di hashing non possono essere reversibili. (Tuttavia, per le password con hash questo non fermerebbe un hacker perché se trova la password "sbagliata" con l'hash corretto, anche quella password "sbagliata" funzionerebbe. Le tue possibilità di trovare una password "sbagliata" sono pari a zero).

Non è per questo che RSA non è reversibile senza la chiave privata.* Penso * che l'inverso del cubing mod sia possibile e poco costoso, ma non ne sono sicuro.
Artelius
2020-03-07 11:05:22 UTC
view on stackexchange narkive permalink

Accetti già che gli algoritmi di crittografia (buoni) possano essere resi pubblici fintanto che la key rimane privata? In tal caso, considera questa analogia:

Quando si crittografa qualcosa, non è possibile invertire la crittografia senza la chiave, tranne che provando miliardi di chiavi con la forza bruta.

Per gli scopi di questa analogia, l'hashing è simile, tranne per il fatto che il messaggio originale è anche usato come chiave. Quindi se non hai il messaggio, non hai la chiave. Non puoi invertire * l'hash senza la chiave. Tranne che provando miliardi di chiavi con la forza bruta.

(Puoi tecnicamente creare algoritmi simili a hash da algoritmi di crittografia in questo modo, ma non dovresti. Potrebbero non avere le proprietà necessarie delle funzioni hash crittografiche .)

* La parola corretta qui è verifica ma rompe l'analogia.

curiousdannii
2020-03-07 20:57:03 UTC
view on stackexchange narkive permalink

L'hashing non può essere annullato perché il processo di hashing di qualcosa perde la maggior parte delle informazioni. Per ogni singolo risultato di un algoritmo di hash ci sono un numero infinito di input diversi che daranno lo stesso risultato.

Considera uno degli algoritmi di hash più semplici, il semplice checksum. Immagina di aver selezionato una pagina da un libro a caso. Per ogni lettera sulla pagina, converti la lettera in un numero, A = 1, B = 2, ecc. E somma i numeri. Per il checksum più semplice, questo è tutto.

Se un amico fa questo e ti dà il risultato di 28543, come farai a capire quale libro e quale pagina stavano guardando? Ora un checksum normalmente non è effettivamente considerato una funzione di hashing perché è semplicemente troppo semplice. È estremamente facile trovare o creare input che danno lo stesso checksum, che si chiama ricerca di una collisione . Ecco un modo: prendi il checksum di 28543, dividi per 26, per ottenere 1097 Z, con 21 rimasti, che è una U. Anche i checksum sono facili da manipolare. Supponi di aver trovato una pagina nel tuo libro che ha aggiunto fino a 28540, beh puoi semplicemente aggiungere una C alla fine per ottenere lo stesso checksum.

Gli hash crittografici devono essere progettati con cura per renderlo molto difficile per trovare le collisioni. Garantiscono che input simili forniscano output completamente diversi. Idealmente, la modifica di un solo bit dell'ingresso provocherà il capovolgimento di metà dei bit di uscita. Ma anche così, con una potenza di calcolo sufficiente, è ancora possibile trovare collisioni. E le collisioni possono essere utili. Se un computer esegue l'hash delle password, se riesci a trovare una collisione puoi accedere con quella che hai trovato anche se potrebbe essere diversa dalla password originariamente sottoposta ad hashing. Se due password hanno lo stesso hash, il computer non può distinguerle. Ma anche se riesci a trovare una collisione, ciò non equivale a invertire l'algoritmo di hashing. Trovare una collisione non ti dirà quale degli infiniti input è stato originariamente sottoposto ad hashing.

gnasher729
2020-03-10 03:15:36 UTC
view on stackexchange narkive permalink

Un esempio di una funzione di hashing che non è una funzione di hashing particolarmente buona o cattiva, ma può essere vista come molto difficile da invertire senza una matematica approfondita:

Prendi un intero a 64 bit x. Per calcolare l'hash h (x), calcola sin (x) con una precisione di 100 cifre, quindi prendi le cifre da 81 a 100 di sin (x) come codice hash. Ok, non è particolarmente facile da calcolare, richiede un po 'di tempo, ma non è neanche particolarmente difficile.

Ora, se ti do le cifre da 81 a 100 di sin (x), come faresti per trovare x? Le prime 20 cifre ti darebbero buone informazioni. Ma non hai nessuna delle prime 80 cifre. Sai che x è un numero intero, il che rende il problema risolvibile in teoria, ma sembra che non ci sia algoritmo migliore del calcolo di sin x per x = 1, 2, 3 ecc. Finché non trovi quello giusto. Nel peggiore dei casi devi controllare sin (x) per 2 ^ 64 valori x.

Asteroids With Wings
2020-03-08 22:11:36 UTC
view on stackexchange narkive permalink

Sapere come si fa una cosa non sempre significa che puoi annullarla.

Certo, se ti dico che l'unico modo per entrare in casa mia è indovinare un codice a tre cifre, allora hai informazioni sufficienti per dargli un buon tentativo con la forza bruta.

Ma se invece scopri che devi conoscere qualche frase segreta che solo io conosco, non ti gioverà. Non ti aiuta a capire la frase. (Suppongo che ti dia abbastanza informazioni per rapirmi e torturarmi, ma non lasciamoci prendere la mano.)

Un principio fondamentale di tutti algoritmi crittografici decenti è proprio questo sapere come è fatto non dovrebbe permetterti di annullarlo . Dovrebbero essere necessarie altre informazioni per decrittografare le informazioni, come una chiave segreta. Altrimenti l'algoritmo sarebbe piuttosto inutile, in particolare come un ipotetico algoritmo non documentato la cui segretezza è la crittografia non può essere condivisa e quindi non può essere utilizzato per crittografare le comunicazioni tra due o più entità.

Infine, è importante capire che l'hashing non è crittografia . Niente di quanto sopra si applica all'hashing perché l'hashing è unidirezionale per sua stessa natura. È con perdite. Non è lì per fare qualcosa di segreto: è lì per creare un digest portatile che mostra se alcune informazioni sono state danneggiate (o manipolate) senza dover esaminare l'intero payload. È un verificatore, non un segretario.

a161803398874
2020-03-10 09:35:00 UTC
view on stackexchange narkive permalink

Solo per aggiungere alla domanda:

I tuoi valori hash devono essere di una certa "difficoltà" perché se un utente malintenzionato conosce il tuo algoritmo, può creare delle tabelle "arcobaleno" in cui gli hash questa tabella è stata precedentemente creata da un utente malintenzionato e controlla se "il tuo hash" corrisponde a un hash nella tabella 'made' .... quindi sapendo qual era il valore originale hash da te.

Puoi facilmente trova online gli hash invertiti per parole come: "Hello World", "Password123", ecc ...

Il termine è "tavoli arcobaleno".E la "difficoltà" non è la cosa importante.Rendere unica la stringa di input è ciò che stai cercando di dire (ecco perché vengono utilizzati i sali).L'algoritmo più "difficile" è facile da trasformare in una tabella arcobaleno quanto l'algoritmo "più semplice". \


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...