Menu
CoddyTech

Derivar una clave de contraseña

Parte de la sección Autenticación y seguridad del Journey de Node.js de Coddy. Lección 2 de 24.

Una clave de contraseña se calcula a partir de una contraseña y una sal. A diferencia de la codificación, este cálculo no está diseñado para revertirse. Scrypt hace que probar contraseñas sea costoso al exigir trabajo en cada intento. Con la misma contraseña, sal y configuración de derivación, incluida la longitud de la clave, esta se puede reproducir. Esta clave derivada suele llamarse hash de contraseña.

const key = await scryptAsync('invite 4821', 'example-only', 16);
return key.toString('hex');

El tercer argumento es la longitud de la clave en bytes. El ayudante proporcionado usa promisify para convertir scrypt de Node, que se basa en devoluciones de llamada, en una función que devuelve una promesa. Puedes usar await con ella, como al leer un archivo. La sal fija de esta práctica te permite comparar los resultados; para almacenar contraseñas reales se usa una sal aleatoria nueva.

La siguiente práctica genera la sal aleatoria nueva que se necesita al almacenar una contraseña nueva.

challenge icon

Desafío

Fácil

Este es un pequeño proyecto de práctica. Se proporciona la configuración; edita solo exercise.js.

Completa la función: deriva una clave de 32 bytes a partir de la contraseña y la sal proporcionadas y luego devuelve su texto hexadecimal en key. Envía dos veces {"password":"practice","salt":"fixed-for-this-exercise"} mediante POST a /result: aparecerá la misma clave de 64 caracteres. Cambia cualquiera de las entradas y la clave cambiará.

Pruébalo tú mismo

import { scryptAsync } from './crypto.js';
export async function exercise({ password, salt }) {
    return { key: password };
}

Todas las lecciones de Autenticación y seguridad

Practica por tu cuenta: Playground de Express