Pergunta

O que é uma boa, simples esquema de criptografia para a proteção de senhas em um banco de dados?Eu não necessariamente precisa de qualquer coisa que a hiper-seguro, nem que eu precisar de alguma coisa é rápido como um raio, mas as coisas seria bom.Principalmente, eu só quero algo que é fácil de implementar, sem ser muito lento ou inseguro.

Foi útil?

Solução

Como mk diz, SHA1 ou MD5 são o padrão, juntamente com SHA2.


Atualização:Como processadores de ter chegado mais rápido ao longo dos anos, os hashes de ter chegado mais bruta-forceable.Agora é recomendado que você use bcrypt.


O que você quer é mais geralmente chamado de uma função de hash criptográfica.Hashes criptográficos são projetados para ser unidirecional (dado o hash resultante, você não deve ser capaz de derivar a entrada original).Além disso, a probabilidade de duas cadeias de caracteres arbitrárias ter o mesmo hash (conhecido como uma colisão de hash) deve ser baixa (idealmente 1/número de valores de hash).

Infelizmente, só porque as suas palavras-passe são hash não livre de ter de tentar muito difícil manter o hash versões seguro.Muitas pessoas usam senhas fracas que seria vulnerável a um fora-de-linha de ataque de força bruta.

Editar - várias pessoas já apontaram a importância do uso de um sal.Um sal é um valor constante que você misturar com a entrada antes de utilizar a função de hash.Tem um único sal impede a linha de atacantes de pré-calculado tabelas de senhas comuns (tabelas rainbow) força-bruta suas senhas ainda mais rápido.

Outras dicas

MD5 ou SHA1 + sal.

Se você usar o MD5 ou SHA1 usar um sal para evitar arco-íris tabela de hacks.

Em C# isso é fácil:

MD5CryptoServiceProvider hasher = new MD5CryptoServiceProvider();
string addSalt = string.Concat( "ummm salty ", password );
byte[] hash = hasher.ComputeHash( Encoding.Unicode.GetBytes( addSalt ) );

Fácil: BCrypt.

Jeff Provavelmente você está armazenar palavras-passe incorrecta o artigo é excelente leitura sobre este tema.

Que era um problema meu par de semanas atrás.Estávamos implantando um grande MIS projeto para 975 diferentes localizações geográficas onde o nosso próprio usuário armazenamento de credenciais será usado como um autenticador para diferentes dos já implementados e em aplicações de uso.Nós já prestados tanto em REPOUSO e à base de SABÃO de serviço de autenticação de cliente, mas insistiu para ser capaz de chegar a credencial de usuário store a partir de outros aplicativos com apenas um DB de ligação para o modo de exibição somente leitura de relacionados da tabela ou modo de exibição.Suspiro... (esta altamente juntamente má decisão de projeto é um assunto de outra questão).

Isso nos obrigou a sentar-se e converter os nossos salgados e iterativamente hash de senha esquema de armazenamento para uma especificação e fornecer alguns de idioma diferentes implementações para fácil integração.

Nós chamou Bastante Secure Hash de Senhas ou FSHP em suma.Implementado em Python, Ruby, PHP5 e lançou-a ao Domínio Público.Disponível para ser consumida, bifurcadas, inflamado ou cuspir no GitHub http://github.com/bdd/fshp

FSHP é um salgados, iterativamente hash hash da senha de implementação.

Princípio de Design é semelhante com PBKDF1 especificação RFC 2898 (uma.k.a:PKCS #5:Palavra-Passe Baseado Em Criptografia De Especificação De Versão 2.0.) FSHP permite a escolha de sal comprimento, número de iterações e o subjacente a função de hash criptográfica entre SHA-1 e SHA-2 (256, 384, 512).Auto definição de meta de prefixo no início de cada saída torna portátil, permitindo ao consumidor escolher o seu próprio armazenamento de senha de segurança de linha de base.

SEGURANÇA:

Padrão FSHP1 utiliza 8 bytes sais, com 4096 iterações de hash SHA-256.- 8 bytes de sal torna arco-íris tabela ataques impraticável multiplicando-se o espaço necessário com 2^64.- 4096 iterações provoca ataques de força bruta a ser bastante caro.- Não há ataques conhecidos contra o SHA-256 para encontrar colisões com um esforço computacional de menos de 2^128 operações no momento de esta versão.

IMPLEMENTAÇÕES:

  • Python:Testado com a versão 2.3.5 (w/ hashlib), 2.5.1, 2.6.1
  • Ruby :Testado com 1.8.6
  • PHP5 :Testado com 5.2.6

Todos são mais que bem-vindo para criar idioma em falta implementações ou polir os atuais.

OPERAÇÃO BÁSICA (com a linguagem Python):

>>> fsh = fshp.crypt('OrpheanBeholderScryDoubt')
>>> print fsh
{FSHP1|8|4096}GVSUFDAjdh0vBosn1GUhzGLHP7BmkbCZVH/3TQqGIjADXpc+6NCg3g==
>>> fshp.validate('OrpheanBeholderScryDoubt', fsh)
True

PERSONALIZANDO A CRIPTA:

Vamos enfraquecer a nossa hash da senha do regime.- Diminuir o sal comprimento do padrão de 8 a 2.- Diminuir a iteração rodada do padrão de 4096 10.- Selecione FSHP0 com SHA-1 como subjacente algoritmo de hash.

>>> fsh = fshp.crypt('ExecuteOrder66', saltlen=2, rounds=10, variant=0)
>>> print fsh
{FSHP0|2|10}Nge7yRT/vueEGVFPIxcDjiaHQGFQaQ==

Use o SHA uma forma de o algoritmo de hash juntamente com um exclusivo sal.Ele é o principal algoritmo que uso para guardar minhas senhas no banco de dados.

Se você estiver usando o SQL Server, há o HashBytes função:

http://msdn.microsoft.com/en-us/library/ms174415.aspx

Eu segunda votação para o MD5 ou o SHA com uma pitada de sal.Qualquer uma das principais linguagens de desenvolvimento web têm funções built-in para calcular o hash (em PHP, por exemplo, o mcrypt pacote contém as funções necessárias).

Você precisa estar usando um uni-direcional algoritmo de hash como o SHA-1 foi sugerido acima com uma pitada de sal.Gostaria de sugerir este site para mais informações.Ele inclui um exemplo de código / implementação.http://www.obviex.com/samples/hash.aspx

A chave para uma melhor segurança, eu acho, é a utilização de dinâmicas de sais.Isso significa que você gerar uma seqüência aleatória para cada novo usuário e uso de seqüência de caracteres para o sal, o hash.É claro, que você precisa para armazenar este sal no banco de dados para ser capaz de verificar a palavra-passe posteriormente (eu não criptografá-lo de qualquer maneira).

Para um não-criptografia reversível eu iria definitivamente ir com SHA256 ou SHA1.O MD5 tem um monte de colisões agora e muito esforço tem sido empreendido para quebrá-lo, então, não é uma boa usar.

Se você quer garantia de futuro de sua solução, eu recomendo SHA256 ou SHA512.Criptografia geekworld está ficando tenso sobre o MD5 e, a um nível ligeiramente menor medida, SHA1.

Ou, se você pode esperar para SHA-3

Tenho notado uma grande confusão sobre como fazer o hash de senha corretamente, especialmente no stackoverflow.De modo que eu escrevi uma página que deve limpar tudo.Há um pouco mais do que através de uma simples hash.

Mais informações: Como fazer o hash de senha corretamente

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top