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.
Desafio
FácilEste é 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
1Senhas
Bytes e texto hexadecimalDerivando uma chave de senhaUm novo saltNunca armazene senhasComparando bytes da chaveVerificando uma senhaRegras de cadastroPratique por conta própria: Playground de Express