O que é Salt (criptografia)?
Um salt criptográfico é um valor aleatório que se combina com uma senha ou outra entrada antes de ela ser processada por uma função hash ou uma função de derivação de chave, garantindo que entradas idênticas produzam saídas diferentes e frustrando as tabelas de ataque pré-computadas.
Também conhecido como: salt, cryptographic salt
Sem um salt, senhas idênticas produzem sempre hashes idênticos. Um atacante com uma tabela pré-computada que mapeia senhas comuns para seus valores hash (uma tabela arco-íris) consegue buscar instantaneamente qualquer hash coincidente em um banco de dados roubado. O salting frustra esse ataque acrescentando ou misturando um valor aleatório único em cada senha antes do hashing. Mesmo que dois usuários tenham a mesma senha, os salts diferentes garantem saídas hash diferentes.
Um salt não precisa ser secreto: normalmente é armazenado em texto simples junto ao hash ou à chave derivada. Seu propósito é forçar o atacante a calcular cada hash de forma individual em vez de usar tabelas pré-computadas. Um salt aleatório de 16 bytes fornece 2^128 variações possíveis para cada senha, o que torna a pré-computação totalmente impraticável.
Os salts são essenciais em dois contextos: o hashing de senhas (em que protegem os hashes de senhas armazenados em bancos de dados) e a derivação de chave (em que garantem que a mesma frase-senha produza chaves derivadas diferentes para operações diferentes). Em ambos os casos, o salt deve ser gerado usando um gerador de números aleatórios criptograficamente seguro e deve ser único por operação, nunca reutilizado entre usuários ou operações de criptografia.
Como o Vaulted usa Salt (criptografia)
Quando uma frase-senha é adicionada a um segredo da Vaulted, um salt aleatório de 16 bytes é gerado no lado do cliente usando a Web Crypto API. Esse salt é inserido no PBKDF2 junto à frase-senha e a 100.000 iterações para derivar uma chave de encapsulamento AES-KW. O salt é então incluído no fragmento da URL para que o navegador do destinatário possa derivar novamente a chave de encapsulamento idêntica a partir da frase-senha. Cada segredo com uma frase-senha recebe seu próprio salt único, garantindo que a mesma frase-senha usada em segredos diferentes produza chaves de encapsulamento diferentes.