¿Cómo se rompe el cifrado [duplicado]?

0

El título describe bastante bien lo que quiero preguntar, porque simplemente no puedo rodearlo con la cabeza. Entiendo los conceptos básicos de romper datos encriptados con el método de forzar la fuerza bruta en el que encripta los datos de muestra y luego los compara con el encriptado que desea descifrar. Sin embargo, no entiendo cómo funciona un cifrado sofisticado.

Daré este código que publiqué en otra pregunta, con riesgo porque no fue aceptado muy bien, pero solo para ilustrar el ejemplo más simple

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');

¿Puede explicarme si tenía una superordenador y miles de millones de cadenas cifradas con esa función, cómo podría averiguar el algoritmo con el que se cifraron?

Editar: La pregunta sugerida no es responder a la pregunta que hice, es explicar cómo adivinar la función de hash que se usó, no cómo descifrarla y encontrar el algoritmo detrás de ella. Puedo decir fácilmente que es md5 cuando tiene 32 bytes de longitud y contiene los caracteres 0-9a-f, pero hay una diferencia entre el md5 simple y lo que publiqué arriba.

    
pregunta php_nub_qq 30.05.2015 - 15:53
fuente

2 respuestas

2

Este tema o área se conoce comúnmente como cryptoanalysis e incluye muchos principios, algunos de ellos se conocen comúnmente como :

  1. Análisis de frecuencia
  2. Análisis de texto plano conocido
  3. Análisis de texto sin formato seleccionado
  4. Análisis de solo texto cifrado
  5. ataque del hombre en el medio
  6. Análisis de tiempo / potencia diferencial

Dicho esto, y dado que esto es NO es una implementación de algoritmo reversible ; el escenario provisto;

  

¿Puedes explicarme si tuviste una súper computadora y miles de millones de   cadenas cifradas con esa función, ¿cómo podrías descubrir la   algoritmo con el que fueron cifrados?

La generación de sal será el enlace débil del algoritmo utilizado, o más específicamente, el método de sal permitirá el debilitamiento de la función my_hash() global.

En particular, el $salt eventualmente creará la misma sal dentro de su billions de hashes. Aquí es donde frequency analysis desempeñará un papel en el debilitamiento de la función my_hash() .

Toma el siguiente ejemplo;

// 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 registra la función de sal producida 72 collisions para un promedio de 138.888888889 . Esto debilitará sustancialmente la efectividad general de la función my_hash() .

    
respondido por el jas- 30.05.2015 - 19:17
fuente
3

Sin cifrado
Esto no es cifrado. Esto es hash. No hay vuelta atrás.

Entonces, lo que realmente estás preguntando es sobre la ingeniería inversa de caja negra. Al igual que > > si tengo un algoritmo de caja negra y le agrego muchas cadenas y observo las cadenas que salen, ¿podré copiar la caja negra de una manera sencilla? < <

Y la respuesta es "No". No hay una forma general de hacer esto.
Por supuesto, podría forzarlo bruscamente y simplemente lanzar una gran cantidad de cadenas en él y luego guardar la salida en algún lugar. Y luego hacer una búsqueda de tabla.

Pero para las 2 ^ 256 (32 bytes) muchas entradas esa tabla no se podrían almacenar en la Tierra. O en este universo.

El enemigo ya conoce el algoritmo
Ahora con respecto al cifrado: en general, no intenta adivinar un algoritmo, en lugar de eso, asume que el enemigo conoce el algoritmo y trata de hacer que adivine la clave.

Este es un principio de diseño conocido como Principio de Kerckhoffs . Y generalmente se piensa que es algo bueno.

    
respondido por el StackzOfZtuff 30.05.2015 - 18:20
fuente

Lea otras preguntas en las etiquetas