Hash di dati sovrapposti - li rende più facili da decifrare anche quando nessuno dei due è incrinato

3

Supponiamo di avere stringhe: stringA, StringB, stringC.

E faccio due hash: HashA = sha256 (stringaA + stringaB) HashB = sha256 (stringaB + stringaC)

Per l'argomento suggerisco sha256 ma rispondere genericamente alla domanda è altrettanto valido.

Non sono un strong matematico, ma suppongo di esserlo, e sto cercando di invertire gli hash di cui sopra, e ho saputo da un algoritmo in codice che c'è una stringa B (ancora sconosciuta a me) che è la parte successiva del stringa che entra in HashA e nella parte precedente di HashB.

Posso ridurre il numero di permutazioni richieste, al fine di capire quale stringaB avrebbe potuto essere, dal momento che i due hash danno le risposte che fanno, da input sovrapposti, se non riducono lo spazio di input I bisogno di bruteforce?

vale a dire. gli hash sono più deboli a causa di questo comportamento di sovrapposizione dei dati all'interno di essi.

Per chiarezza: Se stringA, stringB, stringC e stringD sono segreti.

E un utente malintenzionato ottiene tutto il codice / algorthm ecc tranne le stringhe e ha:

caso A: hashA = sha256 (stringaA + stringaB) e hashB = (stringaB + stringaC)

o caso B: hashC = sha256 (stringaA + stringaB) e hashD = (stringaC + stringaD)

Ho il sospetto che nel caso A sia più facile costruire i dati di origine in modo che corrispondano agli hash che nel caso B, ma non conosco abbastanza matematica per confermare i miei sospetti.

Ulteriore chiarezza : supponi che le stringhe siano salate, sebbene con lo stesso sale per record e hash per quel record, e che l'attaccante conosca i sali. Si può presupporre che i sali siano preposti prima che 'stringx + stringY' riesamini il mio testo se lo desideri.

Grazie.

    
posta pacifist 23.01.2014 - 06:44
fonte

2 risposte

1

Proverò a metterlo in parole semplici.

Ok, il primo è il primo, l'hashing è un algoritmo unidirezionale . Puoi solo passare dalla sorgente all'hash e mai dall'hash alla sorgente. Voglio dire, la stringa hash non ha tutte le informazioni originali, quindi non possiamo estrarla. L'unico modo per indovinare se un'informazione coincide con un hash è l'hashing delle informazioni e il confronto con l'hash originale. E anche in questo modo non saremo mai sicuri dal momento che due stringhe di hash potrebbero collidere.

[Modifica dopo il tuo chiarimento] CaseB è chiaramente più sicuro:

  1. Considera che in CaseA dovrai solo forzare lo spazio completo una volta sola, la seconda volta che avrai bisogno di forza bruta solo metà dello spazio (solo la parte StringC).
  2. In CaseB dovrai forzare la forza bruta due volte.

Lo spazio completo in CaseB è N ^ (lunghezza (a) + lunghezza (b)) + N ^ (lunghezza (c) + lunghezza (d), lo spazio completo nel caso A è N ^ (lunghezza (a) + length (b) + N ^ (length (c)) dove N è il numero di caratteri validi.

Ma non ci saranno scorciatoie per trovare "StringB" nel caso A solo perché viene usato quando si calcolano tutti gli hash. Dovrai applicarla alla stringa lungo la StringA o insieme a StringB (e quindi dovrai conoscere la lunghezza esatta di ogni stringa e così via ...)

Proprio come una nota a margine ... Sto pensando che potresti riferirti a un problema con la crittografia in modalità crittografia a blocchi ECB, che sarà un problema diverso e avrai una risposta molto diversa. Considera di dare un'occhiata a questa pagina di wikipedia.

    
risposta data 23.01.2014 - 08:13
fonte
1

Dalla tua risposta precedente alla mia domanda:

  1. Non conosciamo la lunghezza della stringa.
  2. Non abbiamo alcun valore di stringa letterale.
  3. Vogliamo dedurre i valori stringa dai valori Hash conosciuti, dall'algoritmo e dal fatto che la stringaB si sovrappone.

Fatto:

  1. Dobbiamo ricorrere al metodo di attacco Brute-Force per calcolare Hash per i valori di test di stringA, stringB e stringC per confrontare con i valori Hash noti.

Ipotesi:

Poiché hai menzionato le parole chiave "password" & "salt" consente di assumere quanto segue:

  1. Il limite della password è di 8 caratteri.
  2. 52 alfabeti inglesi (sia maiuscoli che minuscoli), 0-9 cifre e "!", "@", "#", "$", "%", "^", "&", "* ',' (',') 'sono valori consentiti.
  3. Il valore del sale contiene 43 caratteri.
  4. 52 Alfabeti inglesi (sia maiuscoli che minuscoli), 0-9 cifre sono valori consentiti.
  5. stringA e stringC sono password mentre stringB è salt.

Deduzione:

  1. A hash Brute-Force
    • Per la password di 8 caratteri con (52 + 10 + 10) = 72 possibili valori ripetitivi, avremo 72 ^ 8 permutazioni.
    • Per 43 caratteri salt con (52 + 10) = 62 possibili valori ripetitivi, avremo 62 ^ 43 permutazioni.
    • Possibilità totali = (62 ^ 43) X (72 ^ 8)

2. Ora consente a Brute Force l'hashB

  • Per la password di 8 caratteri con (52 + 10 + 10) = 72 possibili valori ripetitivi, avremo 72 ^ 8 permutazioni.
  • Per 43 caratteri salt con (52 + 10) = 62 possibili valori ripetitivi, avremo 62 ^ 43 permutazioni.
  • Possibilità totali = (62 ^ 43) X (72 ^ 8)

Ma hey, aspetta un minuto ... Non sappiamo che la stringa B si sovrappone! Sì, lo abbiamo fatto, ma non fa molta differenza, in ogni caso dobbiamo testare per ogni valore di stringB con stringC su hash brute-force.

Conclusione:

Conoscere i valori hash e il fatto che una parte della stringa si sovrapponga a diverse stringhe di origine non semplifica la vita per il semplice motivo che dovremo eseguire la forza bruta sui singoli dati di origine - coppia di valori hash risultante.

'Effetto valanga' ... suona un campanello? No ...?

Prova:

Segui questo link

Anche se l'input 2 e l'input 3 differiscono di un singolo carattere, il valore hash risultante si attacca alla proprietà di difesa contro l'attacco preimage e non rivela nulla circa l'apparente somiglianza tra i dati di origine.

Di conseguenza, l'attaccante dovrà provare tutti i possibili valori di carattere per ogni posto di carattere.

Spero che questo aiuti!

PS: Perdonate l'approccio pedante, ma ho cercato di mantenere uno scenario il più semplice e teorico possibile. E va da sé che se trovi la risposta errata con qualsiasi mezzo esita a non farla notare.

    
risposta data 23.01.2014 - 10:42
fonte

Leggi altre domande sui tag