Se as senhas forem armazenadas com hash, como um computador saberia que sua senha é semelhante à última se você tentar redefinir sua senha?

11

Se as senhas forem armazenadas com hash, como um computador saberia que sua senha é semelhante à última se você tentar redefinir sua senha? As duas senhas não seriam totalmente diferentes desde que uma seja hash e não pudessem ser revertidas?

Bob Larry
fonte
5
O computador não saberia se eles são semelhantes. Só saberia se eles eram idênticos (hash da nova senha e comparando-a com o hash armazenado da senha original).
Robert Harvey
No entanto, existem maneiras de gerar um hash que captura parte das características da senha. A disponibilidade de tais hashes, no entanto, é uma grande brecha, porque os crackers de senha também podem usar essas informações para restringir a pesquisa de força bruta por senha em muitas ordens de magnitude.
Rwong 22/01/19
Se você precisar comparar senhas, não usará hashes. É provável que você vai usar AES ou outras formas de criptografia simétrica
LAIV

Respostas:

15

Uma maneira de implementar isso é se você redefinir a senha, geralmente será solicitado que você insira sua senha antiga também. Você pode simplesmente usar a comparação de similaridade de string regular nessa situação, porque você tem as duas senhas no formato de texto sem formatação naquele momento.

Outra maneira de implementar isso é normalizar a senha, por exemplo, caracteres acentuados são normalizados para os alfabetos ingleses mais próximos, tentar transcrever o texto foneticamente, remover números etc., e pré-calcular várias versões dos hashes gerados a partir da senha que foram normalizados de maneiras diferentes. Observe que isso enfraquece o mecanismo de hash por quantidade não especificada. Eu não consideraria essas práticas recomendadas de segurança.

Lie Ryan
fonte
"Redefinir senha" geralmente se refere a "Esqueci minha senha e desejo redefini-la", para que você não seja solicitado pela senha antiga. A segunda metade da sua resposta é precisa.
Casablanca
3
@casablanca: há uma abundância de sistemas lá fora, que você "reset" sua senha a cada X dias ....
Whatsisname
1
@casablanca: a primeira metade também é precisa, "redefinir a senha" pode ter os dois significados, a terminologia não é tão rígida. Precisamos perguntar ao OP o que eles queriam dizer com precisão.
Doc Brown
12

A resposta simples é que um sistema seguro não sabe se são semelhantes.

Mas alguns sistemas intencionalmente reduzem a segurança de uma senha específica de alguma maneira para impedir que novas senhas sejam senhas antigas ou semelhantes a elas. A relação custo-benefício é que uma nova senha será criada antes que alguém quebre malevolentemente a senha atual, mesmo com as informações de similaridade.

  • Eles podem armazenar os últimos N hashes de senhas que você usou. Se você digitar uma senha antiga, isso ficará aparente porque o novo hash da senha corresponde a um hash da senha antiga.
  • O mecanismo de hash usado pode conter um mecanismo de pregar o polegar ou uma miniatura de hash pode ser armazenada ao lado do hash. Essencialmente, certos padrões de bits na miniatura de hash expressam um conjunto de padrões de bits altamente semelhantes no valor subjacente.
  • Da mesma forma, eles podem manter as estatísticas de lado sobre sua senha, o que permitiria uma medida precisa da similaridade.

Em geral, cada uma dessas técnicas reduz a segurança das senhas.

  • Manter senhas antigas reduz a segurança dessas senhas. Se alguma dessas senhas for quebrada, há uma grande chance de a senha atual ser semelhante a elas, a maioria das pessoas altera apenas um número.

  • Pregar polegar e estatísticas podem eliminar suposições incorretas de senhas mais rapidamente do que tentar adivinhar e comparar. Isso ocorre porque os hashes, particularmente os seguros, são complicados de calcular e exigir esforço, mesmo que o hardware seja acelerado. Embora um cálculo mais simples que diga 'definitivamente não' ou 'talvez' possa eliminar a maioria dessas suposições, depois de todas as verificações de similaridade, você deve impedir o uso de senhas semelhantes, não o uso de uma senha completamente nova que não se parece em nada com a antiga.

Em resumo, tenha cuidado com qualquer site que indique uma medida de similaridade com sua senha atual / antiga. A menos que eles estejam dizendo que a nova senha é a senha antiga.

Kain0_0
fonte
7

Se as senhas forem armazenadas com hash, como um computador saberia que sua senha é semelhante à última se você tentar redefinir sua senha? As duas senhas não seriam totalmente diferentes desde que uma seja hash e não pudessem ser revertidas?

Você gera várias senhas semelhantes àquelas que o usuário digitou e verifica se algum de seus hashes corresponde ao da senha antiga.

Jörg W Mittag
fonte
Sim, as pessoas são bastante previsíveis nos tipos de mudanças que farão, portanto essa pode ser uma maneira decente de fazer isso.
cyborg
Isso explodiria muito rápido em termos de processamento necessário, apenas com as senhas mais curtas. Portanto, não acredito que seja uma prática real.
Martin Maat
Trabalhei em um local por um longo tempo e, quando deixei minha senha, era supersecurepassword39. (Somente os dois últimos dígitos são verdadeiros). É óbvio se uma senha começa ou termina com um número para ver se o número anterior foi usado.
precisa saber é o seguinte
@MartinMaat Será que embora? Você pode detectar, digamos, adicionando ou incrementando um número, excluindo os caracteres um a um da senha original. Ou seja, para "senha", você hash "assword" (heehee), "pssword", "pasword" etc. Você pode até se dar bem com o uso de um mais fraco por causa da complexidade adicional de ter que tentar 256 permutações de cada um se você usar força bruta no hash secundário. (Mais se você armazená-los em ordem aleatória e você não sabe qual personagem foi elidido em que um, então é 256 * N para cada um.)
millimoose
Isso torna a configuração de uma nova senha N vezes mais cara quando N é o tamanho da senha, sem incluir as verificações de similaridade que devem ser muito menos caras que o hash. Mas você usa hash de senhas toda vez que um usuário entra, e isso provavelmente acontece muito mais frequentemente do que alterações de senha, por isso duvido que a carga adicional seja tão perceptível.
millimoose
2

Outro padrão é o seu sistema hashes alguns subconjuntos característicos da sua senha e armazena esses hashes para verificar se os subconjuntos da nova senha correspondem aos antigos, ou seja: senha: "Admin2018" e subconjunto: "Admin" = não é possível inserir "Admin2019" como novo.

Lukasz Matysiak
fonte
1

Uma maneira seria armazenar as cinco últimas senhas com hash em uma tabela como 'Histórico da senha' e, quando o usuário estiver tentando definir uma nova senha, faça a hash e compare-a com as senhas da tabela.

SKDev
fonte