Menu
CoddyTech

Derivando uma chave de senha

Parte da seção Autenticação e segurança do Journey de Node.js da Coddy. Lição 2 de 24.

Uma chave de senha é calculada a partir de uma senha e de um salt. Ao contrário da codificação, esse cálculo não foi projetado para ser revertido. O Scrypt torna as tentativas de adivinhar senhas custosas, exigindo trabalho para cada tentativa. Com a mesma senha, o mesmo salt e as mesmas configurações de derivação, incluindo o comprimento da chave, a chave pode ser reproduzida. Essa chave derivada é comumente chamada de hash da senha.

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

O terceiro argumento é o comprimento da chave em bytes. O auxiliar fornecido usa promisify para transformar o scrypt do Node, baseado em callback, em uma função que retorna uma promise. Você pode usar await nela, como em uma leitura de arquivo. O salt fixo neste exercício permite comparar os resultados; o armazenamento real de senhas usa um novo salt aleatório.

O próximo exercício gera o novo salt aleatório necessário ao armazenar uma senha nova.

challenge icon

Desafio

Fácil

Este é um pequeno projeto de prática. A configuração já foi fornecida; edite apenas exercise.js.

Conclua a função: derive uma chave de 32 bytes a partir da senha e do salt fornecidos e, em seguida, retorne seu texto hexadecimal em key. Envie {"password":"practice","salt":"fixed-for-this-exercise"} duas vezes por POST para /result: a mesma chave de 64 caracteres será exibida. Altere qualquer uma das entradas e a chave mudará.

Experimente você mesmo

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

Todas as lições de Autenticação e segurança

Pratique por conta própria: Playground de Express