O artigo de Coda Hale "Como armazenar com segurança uma senha" afirma que:
O bcrypt possui sais embutidos para evitar ataques à tabela do arco-íris.
Ele cita este artigo , que diz que na implementação do OpenBSD de bcrypt
:
O OpenBSD gera o sal bcrypt de 128 bits a partir de um fluxo de chaves arcfour (arc4random (3)), semeado com dados aleatórios que o kernel coleta a partir das temporizações do dispositivo.
Eu não entendo como isso pode funcionar. Na minha concepção de sal:
- Ele precisa ser diferente para cada senha armazenada, para que uma tabela arco-íris separada precise ser gerada para cada senha armazenada.
- Ele precisa ser armazenado em algum lugar para que possa ser repetido: quando um usuário tenta fazer login, tentamos a senha, repetimos o mesmo procedimento de sal e hash que fizemos quando armazenamos a senha originalmente e comparamos
Quando estou usando o Devise (um gerenciador de login do Rails) com o bcrypt, não há coluna salt no banco de dados, então estou confuso. Se o sal for aleatório e não for armazenado em nenhum lugar, como podemos repetir com segurança o processo de mistura?
Em resumo, como o bcrypt pode ter sais embutidos ?