Se eu tiver senhas antes de armazená-las na minha base de dados, isso é suficiente para evitar que sejam recuperadas por alguém?
Devo ressaltar que isto se refere apenas à recuperação diretamente da base de dados, e não a qualquer outro tipo de ataque, como por exemplo, forçar a página de login da aplicação, keylogger no cliente, e claro rubberhose cryptanalysis (ou hoje em dia devemos chamar-lhe "Chocolate Cryptanalysis").
**Claro que qualquer forma de haxixe não vai impedir esses ataques.
As senhas armazenadas em uma base de dados como valores de hashed podem ser recuperadas através do cálculo da força bruta dos hashes ou através do uso de tabelas arco-íris (que são específicas para o algoritmo utilizado).
Uma tabela arco-íris é criada como uma série de valores pré-calculados para um arquivo de dicionário ou mais comumente cada combinação de um determinado conjunto de caracteres [a-z, A-Z, 0-9] sendo um exemplo comum.
Essencialmente eles podem acelerar a quebra de uma senha permitindo que o valor do hash seja procurado na tabela em vez de exigir que o atacante crie o hash para cada senha. Tabelas Rainbow para algoritmos de senhas comuns (por exemplo, NTLM, MD5, etc) podem ser encontradas online, tornando bastante simples o acesso a grandes volumes delas.
Existem várias formas de melhorar a segurança dos hashes armazenados na base de dados.
Primeiro é usar um valor por usuário de sal, este valor é armazenado na base de dados juntamente com a senha hashed. Ele é't pretende ser secreto mas é usado para retardar o processo de força bruta e para tornar as tabelas arco-íris impraticáveis de usar.
Outro add-on I've ve ve ve ve ve ve ve ve ve ve ve ve ve veem a isto também adicionar no que foi chamado de valor de pimenta. Esta foi apenas mais uma string aleatória mas foi a mesma para todos os usuários e armazenada com o código da aplicação, ao contrário da base de dados. a teoria aqui é que em algumas circunstâncias a base de dados pode estar comprometida, mas o código da aplicação não está, e nesses casos isso pode melhorar a segurança. No entanto, introduz problemas se houver múltiplas aplicações usando a mesma base de dados de senhas.
Um terceiro meio de ajudar a melhorar a segurança das senhas é usar uma função de senha lenta, isso ganhou'não terá um grande impacto em usuários individuais, mas irá retardar maciçamente um atacante em quebrar senhas recuperadas do banco de dados. Mais algumas informações sobre esta abordagem estão disponíveis aqui.
A palavra-passe deve ser sempre apressada, mas isso não significa que não haja possibilidade de ataques com força bruta. Medidas adicionais devem ser aplicadas em relação ao armazenamento e gestão de senhas de usuários. Recomendo vivamente este artigo do Solar Designer sobre este tema: http://php-security.org/2010/05/26/mops-submission-10-how-to-manage-a-php-applications-users-and-passwords/index.html.
Dependendo do algoritmo que você usa, a resposta provavelmente é não.
Em primeiro lugar, você deve salgá-los, isto significa basicamente anexar ou pré-fixar algum texto à senha.
Então você deve usar um algoritmo forte (md5 doesn't cut it)