/ / Como cada sistema ou servidor obtém uma função de hash diferente para armazenar senhas - segurança, criptografia, hash, senhas

Como cada sistema ou servidor recebe uma função hash diferente para armazenar senhas - segurança, criptografia, hash, senhas

pelo que entendi, as senhas dos usuários devem ser armazenadascomo hashes em vez de criptografados, porque um invasor não pode deduzir uma senha do seu hash, enquanto ele pode deduzir uma senha da sua criptografia, se obtiver acesso à chave de criptografia.

Agora, obviamente, todo sistema deve usar um método diferente.hash para hash de suas chaves. Minha pergunta é: como eles criam essas diferentes funções de hash? Eles usam uma função de hash padrão e a preparam com uma chave grande? Nesse caso, um invasor não conseguiria deduzir as senhas se tivesse acesso a essa chave, tornando-a igual à criptografia?

Respostas:

1 para resposta № 1

As funções hash criptográficas são sempre nãoreversível, esse é o seu propósito. Mesmo funções "inseguras" desencorajadas, como MD5 e SHA1, não são reversíveis e não precisam de uma chave. O problema é que você pode encontrar possíveis senhas correspondentes muito rapidamente com força bruta (mais de 10 Giga MD5 / s).

A "chave grande" que você mencionou é provavelmente o sal. Você gera um sal aleatório e usa esse sal no cálculo. É seguro armazenar esse sal junto com o hash, porque seu objetivo é impedir que o invasor construa uma única tabela arco-íris e encontre correspondências para todas as senhas de uma só vez. Em vez disso, ele deve construir uma mesa arco-íris para cada sal separadamente, o que torna essas mesas impraticáveis.

O problema com a velocidade que você só pode superarcom iterações da função hash. Um fator de custo define quantas vezes o hash é calculado. Os algoritmos recomendados são BCrypt, PBKDF2 e SCrypt.


0 para resposta № 2

Agora, obviamente, todo sistema deve usar uma função de hash diferente para fazer o hash de suas chaves.

Não, eles não.

Se sua senha for s3cr3t, ele terá o mesmo valor de hash no banco de dados de muitos servidores, provavelmente A4D80EAC9AB26A4A2DA04125BC2C096A

A maneira de diminuir essa porcaria é gerar um código aleatório por senha, chamado salt, para que o hash de s3cr3t no servidor 1 provavelmente será diferente do hash de s3cr3t no server2: hashFunction("s3cr3t" + "perUserSalt")

Use bcrypt, scrypt ou PBKDF2 apenas para armazenamento de senha.