UTILS.
100% no navegador
🧂

Gerador e Verificador de Hash scrypt KDF

Derive uma chave scrypt de uma senha com custo N, r, p configurável, ou verifique uma senha contra uma string scrypt armazenada. Roda totalmente no seu navegador.

As senhas são hasheadas 100% no seu navegador — nada é enviado.

— a saída aparece aqui —

Sobre esta ferramenta

O Gerador e Verificador de Hash scrypt KDF deriva e confere saídas scrypt localmente no seu navegador. O scrypt, projetado por Colin Percival e padronizado na RFC 7914, é uma função de derivação de chave memory-hard: seu custo é deliberadamente dominado pela largura de banda de memória para que hardware de quebra personalizado ganhe pouca vantagem. O pipeline é PBKDF2-HMAC-SHA256 para expandir a senha, a função ROMix construída sobre BlockMix e o núcleo Salsa20/8 para forçar grande uso sequencial de memória, e um PBKDF2-HMAC-SHA256 final para produzir a chave derivada do comprimento que você escolher.

O modo de geração lê 16 bytes aleatórios de sal do crypto.getRandomValues e executa o scrypt com três parâmetros de custo: N é o custo de CPU/memória e deve ser uma potência de dois (padrão 16384 = 2^14), r é o tamanho do bloco (padrão 8), e p é o fator de paralelização (padrão 1). O uso de memória é aproximadamente 128 · N · r bytes — cerca de 16 MiB nos padrões — e a ferramenta avisa quando suas configurações excederiam 256 MiB. A saída é uma string autodescritiva $scrypt$ln=14,r=8,p=1$<sal base64>$<chave base64> onde ln = log2(N), então cada parâmetro necessário para verificar é carregado com o hash.

O modo de verificação analisa ln, r, p, o sal e a chave armazenada dessa string, recalcula a chave derivada com a senha candidata, e faz uma comparação em tempo constante para informar se corresponde ou não. O núcleo scrypt roda como um build WebAssembly livre de eval sob a política de segurança estrita do navegador, então as senhas são processadas 100% no seu navegador e nada é enviado.

Perguntas frequentes

Por que N deve ser uma potência de dois?
O passo ROMix do scrypt indexa uma tabela de exatamente N blocos e depende de N ser uma potência de dois para seu endereçamento de integerify-e-mask. A ferramenta rejeita valores que não sejam potência de dois. Escolhas típicas são 16384 (2^14) para uso interativo e 1048576 (2^20) para criptografia de arquivos.
Quanta memória o scrypt usa?
Aproximadamente 128 · N · r bytes. Nos padrões N=16384, r=8 isso é cerca de 16 MiB. Como o navegador aloca isso de verdade, valores grandes de N ou r podem ser lentos ou falhar em dispositivos com pouca RAM — a ferramenta avisa acima de 256 MiB.
O que r e p controlam?
r é o tamanho do bloco, que escala tanto o uso de memória quanto a quantidade de trabalho sequencial por bloco; aumentar r eleva o custo de memória junto com N. p é o fator de paralelização, executando p computações scrypt independentes, o que eleva o custo de CPU sem elevar o consumo de memória por instância.
Qual o formato do hash gerado?
Uma string autodescritiva $scrypt$ln=<log2 N>,r=<r>,p=<p>$<sal base64>$<chave base64>. Ela embute cada parâmetro, então o modo de verificação precisa apenas dessa string e da senha. Todo o cálculo é local — nada é enviado.

Mais ferramentas