Me deparei com uma discussão na qual aprendi que o que eu estava fazendo não era salgar senhas, mas salpicá-las, e desde então comecei a fazer as duas coisas com uma função como:
hash_function($salt.hash_function($pepper.$password)) [multiple iterations]
Ignorando o algoritmo de hash escolhido (quero que seja uma discussão sobre sais e pimentas e não algoritmos específicos, mas estou usando um seguro), essa é uma opção segura ou devo fazer algo diferente? Para aqueles que não estão familiarizados com os termos:
Um salt é um valor gerado aleatoriamente, geralmente armazenado com a sequência no banco de dados projetada para tornar impossível o uso de tabelas de hash para quebrar senhas. Como cada senha tem seu próprio sal, todas elas devem ser forçadas brutalmente individualmente para quebrá-las; no entanto, como o salt é armazenado no banco de dados com o hash da senha, um comprometimento do banco de dados significa perder os dois.
Uma pimenta é um valor estático em todo o site armazenado separadamente do banco de dados (geralmente codificado no código fonte do aplicativo) que se destina a ser secreto. É usado para que um comprometimento do banco de dados não faça com que a tabela de senhas do aplicativo inteiro seja brutalmente forçada.
Falta alguma coisa e salgar e digitar minhas senhas é a melhor opção para proteger a segurança do usuário? Existe alguma falha de segurança em potencial dessa maneira?
Nota: Suponha que, para os objetivos da discussão, o aplicativo e o banco de dados sejam armazenados em máquinas separadas, não compartilhem senhas etc., portanto, uma violação do servidor de banco de dados não significa automaticamente uma violação do servidor de aplicativos.