Este é realmente mais um adendo à resposta inteligente de @ Brian. Tiramos o chapéu também para @Martijn Pieters por adicionar detalhes sobre como forçar com força bruta as senhas antigas com base na atual e para @ratchet freak por "distância de interferência". Não estou excluindo minha resposta porque acho que fornece um plano de fundo interessante para fazer backup deles.
O armazenamento de senhas de última geração requer o uso de várias rodadas de um forte hash criptográfico unidirecional (SHA-512 +) com sal exclusivo (128 bits +) para cada usuário. Mas não fique tentado a armazenar informações adicionais sobre cada senha. Quanto mais informações você armazenar sobre cada senha, mais prejudicará a segurança do seu algoritmo de hash.
Exemplo
Considere como é fácil forçar uma senha com força bruta, se você souber:
- Tem 7 caracteres
- Os caracteres 3-5 são maiúsculos (4 é menor)
- 1 e 7 são números
- 6 é um símbolo
Um teclado dos EUA possui 95 caracteres imprimíveis, portanto, saber que a senha tem 7 caracteres gera 95 ^ 7 = 69.833.729.610.000 = 7x10 ^ 13 permutações. Se fosse realmente aleatório, levaria um ano para decifrar isso em um único processador de 3Ghz. Mas:
- Existem apenas 26 caracteres maiúsculos e 26 minúsculos
- Existem apenas 10 dígitos com 100 possibilidades para esses dois números
- Existem apenas 32 símbolos
Então (corrigido graças a @Hellion):
26^4 (charcters 2-5 are known upper or lower-case)
x 100 (characters 1 & 7 are digits)
x 32 (character 6 is a symbol)
====
1,462,323,200 possible passwords.
Isso é 50.000 vezes mais fácil de quebrar! Armazenar boas informações para evitar senhas semelhantes nesse caso levou o tempo de crack para uma senha de 7 caracteres de um ano para duas horas. A decodificação de todas as suas senhas em um poderoso desktop com vários processadores, com uma boa placa de vídeo e um pouco de paciência agora é muito viável. Espero que este exemplo simples demonstre que, quanto mais significativo você puder comparar senhas semelhantes, menos seguro será seu hash.
Importância do hash forte
Bancos de dados com senhas são roubados regularmente, com invasões gigantescas nas notícias todos os meses. Caramba, no mês passado, o estado de SC perdeu o número de seguridade social de todos - oops! Quantas dessas violações são encobertas?
Pensamento final
A coisa mais assustadora para mim é quando as pessoas escolhem a senha igual ou semelhante para vários sites, de modo que a invasão em uma só dá ao invasor acesso a todos eles. Adoraria ver um método comprovado de evitar essa situação, embora eu ache que impedir as senhas ruins mais comuns ajudaria mais do que impedir que um usuário individual reutilize sua senha ruim no mesmo site. O melhor que posso sugerir é uma política em toda a empresa para usar um gerenciador de senhas seguro que gere senhas altamente aleatórias para cada um de seus usuários e as armazene com segurança.