Diferença entre encontrar uma senha e encriptá-la

a actual top-voted para esta pergunta diz:

outro que não é tanto um problema de segurança, embora esteja relacionado com a segurança, é completa e abjecta falha em marcar a diferença entre usar uma senha e encriptar a mesma . Mais comumente encontrado em código onde o programador está tentando fornecer inseguro "Lembre-me da minha senha" funcionalidade.

Qual é exactamente a diferença? Eu estava sempre sob o impressão que o hashing era uma forma de encriptação. Qual é a funcionalidade insegura a que o cartaz se refere?

Author: Community, 2008-11-28

9 answers

A amarração é uma função de Sentido Único (bem, um mapeamento). É irreversível, aplica-se o algoritmo de hash seguro e não se consegue recuperar o texto original. O máximo que você pode fazer é gerar o que é chamado de "uma colisão", ou seja, encontrar uma cadeia diferente que fornece o mesmo hash. Algoritmos de hash criptograficamente seguros são projetados para evitar a ocorrência de colisões. Você pode atacar um hash seguro através do uso de uma tabela arco-íris , que você pode neutralizar através da aplicação de um sal antes de O armazenar.

Cifrar é uma função adequada (de duas formas). É reversível, você pode descriptografar a string mutilada para obter a string original, se você tiver a chave.

A funcionalidade insegura a que se refere é que, se cifrar as senhas, a sua aplicação tem a chave guardada algures e um atacante que tenha acesso à sua base de dados (e/ou código) pode obter as senhas originais, obtendo tanto a chave como o texto encriptado, enquanto que com uma hash é impossível.

As pessoas costumam dizer que se um cracker possui a sua base de dados ou o seu código, ele não precisa de uma senha, então a diferença é discutível. Isso é ingênuo, porque você ainda tem o dever de proteger as senhas de seus usuários, principalmente porque a maioria deles usam a mesma senha vezes sem conta, expondo-os a um maior risco por vazar suas senhas.
 231
Author: Vinko Vrsalovic, 2017-06-12 18:42:28

O Hashing é uma função de Sentido Único, O que significa que uma vez que você carrega uma senha é Muito difícil obter a senha original de volta da faixa. Criptografia é uma função de duas vias, onde é muito mais fácil obter o texto original de volta do texto criptografado.

Uma simples lavagem é facilmente derrotada usando um ataque de dicionário, onde um atacante apenas pre-bate cada palavra em um dicionário( ou cada combinação de caracteres até um determinado comprimento), em seguida, usa este novo dicionário para procurar as senhas. Usando um sal aleatório único para cada senha hashed armazenada torna muito mais difícil para um atacante usar este método. Eles basicamente precisariam criar um novo dicionário único para cada valor de sal que você usa, retardando seu ataque terrivelmente.

Não é seguro armazenar senhas usando um algoritmo de encriptação, porque se for mais fácil para o utilizador ou o administrador recuperar a senha original do texto encriptado, também é mais fácil para um agressor a fazer o mesmo.

 36
Author: Bill the Lizard, 2008-11-28 21:24:42

Encrypted vs Hashed Passwords

Como mostrado na imagem acima, se a senha é criptografada é sempre um segredo escondido onde alguém pode extrair a senha de texto simples. No entanto, quando a senha é hashed, você está relaxado, pois não há praticamente nenhum método de recuperar a senha do valor de hash.


Extraído de encriptado vs palavras-passe Hashed-Qual é melhor?

A encriptação é boa?

As senhas de texto simples podem ser cifradas usando uma cifra simétrica algoritmos como DES, AES ou com quaisquer outros algoritmos e ser armazenados dentro da base de dados. Na autenticação (confirmando a identidade com o nome de usuário e senha), a aplicação irá descriptografar a senha criptografada armazenada na base de dados e comparar com a senha fornecida pelo Usuário para a igualdade. Neste tipo de abordagem de tratamento de senha, mesmo que alguém tenha acesso a tabelas de banco de dados, as senhas não serão simplesmente reutilizáveis. No entanto, também há uma má notícia nesta abordagem. Se de alguma forma alguém obtenha o algoritmo criptográfico juntamente com a chave usada pela sua aplicação, ele/ela será capaz de ver todas as senhas de usuário armazenadas em seu banco de dados por decriptação. "Esta é a melhor opção que eu tenho", um desenvolvedor de software pode gritar, mas há uma maneira melhor?

Função criptográfica de hash (apenas de ida)

Sim, há, talvez não tenha percebido o ponto aqui. Você notou que não há nenhum requisito para descriptografar e comparar? Se houver uma abordagem de conversão única onde a senha pode ser convertida em alguma palavra convertida, mas a operação reversa (geração de senha a partir de palavra convertida) é impossível. Agora, mesmo que alguém tenha acesso à base de dados, não há nenhuma maneira de que as senhas sejam reproduzidas ou extraídas usando as palavras convertidas. Nesta abordagem, dificilmente haverá alguma forma de saber as senhas ultra-secretas de seus usuários; e isso irá proteger os usuários usando a mesma senha em várias aplicações. Que algoritmos podem ser usado para esta abordagem?

 13
Author: lkamal, 2013-11-04 10:12:16

Eu sempre pensei que a encriptação pode ser convertida de ambas as formas, de uma forma que o valor final pode trazer-lhe ao valor original e com o Hashing você não será capaz de reverter do resultado final para o valor original.

 8
Author: CheGueVerra, 2008-11-28 21:17:50
Os algoritmos de Hashing são geralmente de natureza criptográfica, mas a principal diferença é que a criptografia é reversível através da descriptografia, e hashing não é.

Uma função de cifra normalmente recebe entrada e produz uma saída cifrada que é a mesma, ou um tamanho ligeiramente maior.

Uma função de amarração recebe entrada e produz uma saída tipicamente menor, tipicamente de tamanho fixo também.

Apesar de não ser possível obter um resultado desfeito e "descascar" back the original input, you can typically brute-force your way to something that produces the same hash.

Em outras palavras, se um esquema de autenticação tem uma senha, hashes, e compara-a com uma versão hash do requer a palavra-passe, pode não ser necessário que você realmente sabe a senha original, só seu hash, e você pode brute-force o seu caminho para algo que irá corresponder, mesmo se tratando de uma palavra-passe diferente.

As funções de amarração são normalmente criadas para minimizar a chance de colisões e torná-lo difícil de apenas calcular algo que irá produzir o mesmo hash como outra coisa.

 8
Author: Lasse V. Karlsen, 2008-11-28 21:20:22

Idealmente devias fazer as duas coisas.

Primeiro Hash a password para a segurança de um só caminho. Use um sal para segurança extra.

Depois encripta o hash para se defender contra ataques de dicionários se a sua base de dados de senhas estiver comprometida.

 4
Author: LogicMagic, 2010-07-22 13:38:04

Amarração:

É um algoritmo de Sentido Único e uma vez que hashed não pode voltar atrás e este é o seu ponto doce contra a encriptação.

Encriptação

Se fizermos encriptação, haverá uma chave para fazer isto. Se esta chave for divulgada, todas as suas senhas poderão ser decifradas facilmente.

Por outro lado, mesmo que a sua base de dados seja pirateada ou o seu administrador do servidor tenha tirado dados do DB e tenha usado senhas escondidas, o hacker não será capaz de quebrar estas senhas. Isso seria praticamente impossível se usássemos hashing com sal adequado e segurança adicional com PBKDF2.

Se quiser ver como deve escrever as suas funções de hash, pode visitar Aqui .

Há muitos algoritmos para executar hashing.
  1. MD5 - usa a função hash do Message Digest 5 (MD5). O hash de saída tem 128 bits de comprimento. O algoritmo MD5 foi desenhado por Ron Rivest no no início dos anos 90 e não é uma opção preferida hoje.

  2. SHA1 - usa o algoritmo de Hash de segurança (SHA1) publicado em 1995. O hash de saída tem 160 bits de comprimento. Embora mais amplamente utilizado, esta não é uma opção preferida hoje em dia.

  3. HMACSHA256, HMACSHA384, HMACSHA512 - Utilizar as funções SHA-256, SHA-384 e SHA-512 da família SHA-2. O SHA-2 foi publicado em 2001. Os comprimentos de hash de saída são 256, 384 e 512 bits, respectivamente, como indicam os nomes das funções de hash.

 3
Author: Rahul Garg, 2018-02-23 06:39:07

Por mais corretas que as outras respostas possam ser, no contexto em que a citação estava, a hashing é uma ferramenta que pode ser usada para garantir a informação, a encriptação é um processo que pega na informação e torna muito difícil para as pessoas não autorizadas ler/usar.

 1
Author: Peter Coulton, 2008-11-28 21:29:51
Aqui está uma razão pela qual você pode querer usar uma sobre a outra - recuperação de senha.

Se só guardar um hash da senha de um utilizador, não pode oferecer uma funcionalidade de 'senha esquecida'.

 -9
Author: Philtron, 2012-12-10 13:50:16