Come si rompe la crittografia [duplicato]

0

Il titolo descrive abbastanza bene quello che voglio chiedere, perché non riesco a capirlo. Comprendo le basi della rottura dei dati crittografati con il metodo di tipo bruteforcing in cui crittografate i dati di esempio e li confrontiamo con la crittografia che desiderate crackare. Tuttavia, non capisco quanto funzioni una crittografia sofisticata.

Darò questo codice che ho postato in un'altra domanda, a rischio perché non è stato accettato molto bene, ma solo per illustrare l'esempio più semplice

function my_hash($data){
    // Generate random salt
    $salt = substr(md5(str_shuffle('0123456789abcdef')), 0, 5);

    // Mask salt within the hash
    $hash = substr(md5($data. $salt), 0, -5) . $salt;

    return $hash;
}

function my_check($data, $hash){

    $salt = substr($hash, -5);

    return substr(md5($data. $salt), 0, -5) . $salt === $hash;
}

$hash = my_hash('qwerty');

Puoi spiegarmi, se avessi un super-computer e miliardi di stringhe crittografati con quella funzione, come hai potuto scoprire l'algoritmo con cui sono stati crittografati?

Modifica: la domanda suggerita non risponde a quella che ho chiesto, sta spiegando come indovinare la funzione di hashing che è stata utilizzata, non come craccarla e trovare l'algoritmo dietro di essa. Posso facilmente dire che è md5 quando è lungo 32 byte e contiene caratteri 0-9a-f ma c'è una differenza tra il semplice md5 e ciò che ho postato sopra.

    
posta php_nub_qq 30.05.2015 - 15:53
fonte

2 risposte

2

Questo argomento o area è comunemente noto come cryptoanalysis e comprende molti principi, alcuni dei quali sono comunemente noti come :

  1. Analisi di frequenza
  2. Analisi con testo in chiaro
  3. Analisi del testo in chiaro
  4. Analisi solo per testo cifrato
  5. Attacco man-in-the-middle
  6. Analisi della potenza di cronometraggio / differenziale

Detto questo, e dato che questo è NON un algoritmo reversibile ; lo scenario fornito;

Can you explain to me, if you had a super-computer and billions of strings encrypted with that function, how could you find out the algorithm they were encrypted with?

La generazione di sale sarà il collegamento debole dell'algoritmo utilizzato, o più specificamente il metodo salt consentirà l'indebolimento della funzione my_hash() complessiva.

In particolare, $salt alla fine creerà lo stesso sale entro il billions di hash. Questo è dove frequency analysis avrà un ruolo nell'indebolimento della funzione my_hash() .

Prendi il seguente esempio;

// Broke this out of you my_hash() function to illustrate
function my_salt() {
    return substr(md5(str_shuffle('0123456789abcdef')), 0, 5);
}

$salts = array_map('my_salt', range(1, 10000));
$analysis = array();

function printer($title, $str) {
  echo "<b>" . $title . "</b><pre>";
  print_r($str);
  echo "</pre>";
}

$total = 0;

foreach($salts as $key => $value) {
  if (in_array($value, $analysis)) {
    printer("Salt found:", "At record " . $key . ", " . $value);
    $total++;
  }

  array_push($analysis, $value);
}
printer("Totals: ", "Records: " . count($salts) . "; Collisions: " . $total . " Average: " . (count($salts) / $total));

Con solo 10,000 viene registrata la funzione salt prodotta 72 collisions per una media di 138.888888889 . Ciò indebolirà sostanzialmente l'efficacia complessiva della funzione my_hash() .

    
risposta data 30.05.2015 - 19:17
fonte
3

Non crittografia
Questa non è crittografia. Questo è hashing. Non c'è modo di tornare.

Quindi penso che quello che stai veramente chiedendo sia il reverse engineering della scatola nera. Mi piace così > > Se ho un algoritmo di scatola nera e lancio molte stringhe e osservo le stringhe che verranno fuori, sarò in grado di copiare la scatola nera in un modo semplice? < <

E la risposta è "No". Non esiste un modo generale per farlo.
Ovviamente potresti forzare la forza bruta e inserire solo un'enorme quantità di stringhe, quindi salvare l'output da qualche parte. E poi fai una ricerca nella tabella.

Ma per i 2 ^ 256 (32 byte) molte voci che la tabella non sarebbe memorizzabile sulla terra. O in questo universo.

Il nemico conosce già l'algoritmo
Ora riguardo alla crittografia: generalmente non cerca di indovinare su un algoritmo, invece tu presumi che il nemico conosca l'algoritmo e tu provi a fargli indovinare alla chiave.

Questo è un principio di progettazione noto come Principio di Kerckhoffs . E generalmente si pensa che sia una buona cosa.

    
risposta data 30.05.2015 - 18:20
fonte

Leggi altre domande sui tag