En este ejemplo, ¿por qué mezclan un trozo de sal generado al azar antes de mezclarlo con la contraseña?

2

Desde aquí , en el código% co_de ¿Cuál es el punto de tomar el valor sha1? Se adjunta a la contraseña y juntos se procesan utilizando Blowfish. ¿Por qué no solo agregar el número generado aleatoriamente?

class PassHash {  
    // blowfish  
    private static $algo = '$2a';  
    // cost parameter  
    private static $cost = '$10';  
    // mainly for internal use  
    public static function unique_salt() {  
        return substr(sha1(mt_rand()),0,22);  
    }  
    // this will be used to generate a hash  
    public static function hash($password) {  
        return crypt($password,  
                    self::$algo .  
                    self::$cost .  
                    '$' . self::unique_salt());  
    }  
    // this will be used to compare a password against a hash  
    public static function check_password($hash, $password) {  
        $full_salt = substr($hash, 0, 29);  
        $new_hash = crypt($password, $full_salt);  
        return ($hash == $new_hash);  
    }  
}  
    
pregunta Celeritas 10.01.2013 - 18:49
fuente

2 respuestas

6

Hacen este hash de una mezcla de inseguridad y chamanismo.

El hashing no tiene valor para la seguridad real. Su salado es malo porque mt_rand() no es suficiente para garantizar la singularidad (las sales buenas deben esforzarse por ser únicas, y las sales aleatorias son una buena manera de obtener valores únicos con alta probabilidad, pero requiere su uso de un buen generador aleatorio, en un espacio de valor suficientemente grande y mt_rand () falla en ambos). La función hash de la salida de mt_rand() con SHA-1 da la impresión de que la sal es más aleatoria de lo que realmente es; los desarrolladores deben tener la cálida sensación de que las cosas son más seguras, ya que "parecen aleatorias" a sus ojos humanos.

Además, la invocación de la función de dispersión de hash en un fragmento de código dado es una forma de propiciar a los espíritus de la criptografía. Es bien sabido que las deidades criptográficas se ven favorablemente en quienes las usan mucho (o eso creen muchos desarrolladores, aparentemente).

    
respondido por el Thomas Pornin 10.01.2013 - 19:16
fuente
0

(Expandido para incorporar comentarios de CodesInChaos)

Para responder al "por qué", que es su pregunta, es decir, en el caso general de la generación de sal:

Una sal es generalmente visible, no es un secreto. Simplemente utilizando el valor aleatorio podría revelar alguna información de estado interno del generador de números aleatorios. Una función de hashing unidireccional oculta eso.

Es un pobre sustituto para un PRNG criptográficamente seguro. Dicho PRNG utilizará uno o más hash criptográficamente seguro internamente.

En este caso específico, no agrega ningún valor debido a la salida de baja entropía de mt_rand () (31 bits) de PHP, y en el peor de los casos puede inducir a error. Ver también enlace

    
respondido por el mr.spuratic 10.01.2013 - 19:01
fuente

Lea otras preguntas en las etiquetas