¿Incluir datos de entrada en el estiramiento de las teclas?

1

Haga un seguimiento de esta pregunta: hash PHP fuerte sin sal .

Sin entrar en los detalles, usar bcrypt sin sal / pimienta es un poco complejo para mi caso, así que me quedo en una implementación de "bucle simple".

En la "versión 1" a continuación, simplemente pincho el sha512 repetidamente, mientras que en la "versión 2" incluyo los datos de entrada en cada iteración:

$data = $websiteDomain . $myChildSchool . $myPetName . $etc;

// version 1
$result = $data;
for ($i = 0; $i < 1000000; ++$i) {
    $result = hash('sha512', $result, true);
}

// version 2
$result = '';
for ($i = 0; $i < 1000000; ++$i) {
    $result = hash('sha512', $data . $result, true);
}

$result = str_replace(['/', '+', '='], '', base64_encode($result));
$result = substr($result, 0, $passwordLength);

¿Es más segura la "versión 2"?

Estoy pensando en cosas como la paralelización para la "versión 1", donde el primer hash se computaría normalmente, luego los 999,999 hashes restantes de cada candidato se computarían usando un procesamiento en paralelo.

    
pregunta Gras Double 26.12.2016 - 13:50
fuente

1 respuesta

1
  

usar bcrypt sin sal / pimienta es un poco complejo para mi caso

Use bcrypt con el parámetro cost especificado para el estiramiento de la clave, ejemplos en el documento oficial: enlace

password_hash("unsalted password", PASSWORD_BCRYPT, ["cost" => $cost]);

¿Es más complejo? No lo creo.

Nota al margen: todas las versiones de PHP donde se admite password_hash , tienen habilitada la generación automática de sal de forma predeterminada. Si no usa PHP7, puede especificar su propio parámetro ( salt en la matriz) pero no veo el punto de hacerlo.

    
respondido por el Rápli András 28.12.2016 - 13:39
fuente

Lea otras preguntas en las etiquetas