Gerador de palavras-passe com scrypt
Crie o hash de uma palavra-passe com scrypt, uma função de derivação de chaves com elevado consumo de memória. Defina o salt, o custo (N), o tamanho do bloco (r), o paralelismo (p) e o comprimento da chave, e obtenha o hash como string PHC, hexadecimal e Base64. Funciona no navegador.
Entrada
Saída
Leia-me
O que é scrypt?
scrypt é uma função de hash de senhas, ou função de derivação de chaves, criada por Colin Percival em 2009 e publicada como RFC 7914. Assim como bcrypt e Argon2, ela é intencionalmente lenta, para que cada tentativa custe tempo a um invasor. Ela também exige muita memória: cada hash preenche um grande bloco de memória e o lê de volta em uma ordem imprevisível, o que torna muito mais caro quebrar hashes com GPUs e chips personalizados. scrypt é usado para armazenar senhas em muitas estruturas de desenvolvimento web, nas bibliotecas padrão de Node.js, Python e Go e em carteiras de criptomoedas, como os keystores do Ethereum.
Descrição da ferramenta
Esta ferramenta calcula o hash de uma senha com scrypt no seu navegador. Ela começa com um salt aleatório e as configurações recomendadas pela OWASP para armazenar senhas. Você pode alterar o salt, o custo (N), o tamanho do bloco (r), o paralelismo (p) e o comprimento da chave. O hash fica disponível como uma string PHC, para bibliotecas de senhas, e em formatos hexadecimal e Base64, para códigos que armazenam o salt e os parâmetros separadamente.
Recursos
- Calcula o hash de uma senha com scrypt, conforme definido na RFC 7914
- Cria um salt aleatório de 16 bytes, com um botão para gerar outro
- Aceita seu próprio salt, para reproduzir um hash gerado em outro lugar
- Define o custo (N) de 2⁴ a 2²⁰, o tamanho do bloco (r), o paralelismo (p) e o comprimento da chave
- Fornece o hash como string PHC, em formato hexadecimal e em Base64
- Exibe o progresso dos cálculos lentos de hash e avisa quando as configurações exigem mais de 1 GiB de memória
- É executada no seu navegador, portanto a senha nunca sai do seu dispositivo
Parâmetros
| Parâmetro | Padrão | Função |
|---|---|---|
| Custo (N) | 131072 (2¹⁷) | Número de blocos de memória. Dobrá-lo duplica o tempo e a memória. |
| Tamanho do bloco (r) | 8 | Tamanho de cada bloco, 128 × r bytes. Também aumenta o tempo e a memória. |
| Paralelismo (p) | 1 | Número de execuções independentes. Multiplica o tempo, não a memória. |
| Comprimento da chave | 32 bytes | Comprimento do hash. |
A memória necessária é de 128 × N × r bytes, o que corresponde a 128 MiB com os valores padrão.
Formatos de saída
A string PHC contém tudo o que é necessário para verificar a senha posteriormente: o algoritmo, os parâmetros, o salt e o hash, com o salt e o hash em Base64 sem preenchimento:
$scrypt$ln=17,r=8,p=1$<salt>$<hash>ln é o logaritmo de base 2 de N; portanto, ln=17 significa N = 131072. Esse é o formato que passlib, do Python, o crate scrypt do Rust e o pacote @phc/scrypt do Node.js leem e gravam.
Os campos hexadecimal e Base64 contêm apenas o hash, como retornado por crypto.scrypt no Node.js, hashlib.scrypt no Python e scrypt.Key no Go. Armazene o salt e os parâmetros junto com ele.
Como funciona
O campo do salt é lido como texto e codificado em UTF-8, da mesma forma que ao passar uma string como salt para crypto.scrypt no Node.js. O salt aleatório consiste em 16 bytes aleatórios representados por 32 caracteres hexadecimais; esses 32 caracteres são o salt usado para calcular o hash. A senha também é codificada em UTF-8. O hash é calculado em uma thread em segundo plano, para que a página continue responsiva, e o cálculo recomeça quando você altera qualquer valor de entrada.
Dicas
- Use um novo salt aleatório para cada senha. A mesma senha com o mesmo salt sempre gera o mesmo hash.
- A OWASP recomenda usar pelo menos N = 2¹⁷, r = 8, p = 1 para armazenar senhas. Aumente N até o limite que seu servidor consegue suportar a cada login.
- Por padrão, o Node.js limita o uso de memória do scrypt a 32 MiB. Passe um valor maior para
maxmememcrypto.scryptao usar N = 2¹⁷ ou superior com r = 8. - Para verificar um hash de outro sistema, informe a mesma senha, o mesmo salt e os mesmos parâmetros e compare os resultados.