Pergunta

Eu estive lendo sobre os benefícios de salga e hash senhas, mas uma coisa ainda escapa-me ...

Quando eu fornecer um sal aleatório para cada usuário, como faço para, em seguida, saber o que o sal foi quando eu tentar autenticar-los para login?

então se eu fazer ..

HASHPW = PW.RANDOMNUMBER

Eu poderia armazenar o número aleatório no banco de dados, mas que parece matar toda a ponto de adicionar o sal .. não é? Eu também poderia usar um número não aleatória para cada sal, mas, em seguida, que também mata o ponto do sal, porque se eles descobrir que eles têm todos os meus usuários senhas ...

Eu só comecei a aprender PHP e MySQL e coisas abstratas como este foram me confundindo

Obrigado!

Foi útil?

Solução

Não anule a finalidade do sal exclusivo para armazená-lo. O ponto de um sal único é para proteger seus todo usuários do repositório do ataque, não um determinado usuário individual. Se um atacante compromete seu banco de dados e é determinado o suficiente para quebrar a conta de um usuário específico, eles vão. Não há nada que possamos fazer sobre isso. Mas eles teriam que gastar uma enorme quantidade de tempo de computador fazê-lo - o suficiente para que ele não seria viável para passar muito tempo no cada user - protegendo assim todos os seus usuários. Compare isso com o uso do mesmo sal para todos os usuários -. Uma vez que o atacante tem o sal, as mesmas tabelas / processos podem ser re-run contra todos os usuários em um tempo relativamente curto

Outras dicas

O sal é gerado aleatoriamente para cada usuário, mas ele é salvo em algum lugar no banco de dados. Você olha para cima o sal para o usuário particular e usá-lo para autenticar o usuário.

O ponto é, uma vez que o sal é diferente para cada usuário, você não pode usar um dicionário pré-construídos de hashes para mapear hash de senhas em texto claro ( arco-íris ataque ).

O previne sal alguém de obter uma cópia de seu banco de dados de senha criptografada e montar um ataque offline contra todas das senhas ao mesmo tempo. Isso não impede ataques contra uma única senha.

Você pode gostar de ler o artigo de segurança senha original Unix. Ele faz um trabalho muito bom de explicar o que é um sal é, e por que tê-los: http: //portal.acm.org/citation.cfm?id=359172

ao criar o hash de senha que você deve usar "double" sal

Criar um sal (md5 aleatória ou SHA1), em seguida, usar o formato algo como sha1 ( "- $ password - $ salt--") e, em seguida, armazenar hash de senha e sal no banco de dados.

Então, ao autenticar você recriar o hash - $ passar -. $ String salt-- e compará-lo com o passe armazenado em db

Você não precisa de um sal separado para cada senha.

O objetivo da salga é resistir tabelas do arco-íris - converter uma senha candidato em uma nova cadeia que tem o seu sal nele; desde que o sal é alguma corda privada só você possui, sabendo o hash de uma senha salgada não vai ajudar um atacante que tenha um funcionamento da tabela de arco-íris moinho.

Um atacante inteligente pode tentar construir uma tabela de arco-íris feita sob encomenda apenas para o seu serviço através da criação de uma conta e alterar sua senha para observar o que o hash resultante é. Se o sal é o mesmo para todos os usuários, em seguida, quando ele vê que o hash corresponde "xyz123" para "maçã", e percebe que de hash de outro usuário também é "xyz123", ele pode concluir que a senha do usuário é "maçã". Este é o ponto onde a maioria das pessoas decidir armazenar um sal exclusivo para cada usuário.

No entanto, isso é desnecessário . Você já tem uma cadeia exclusiva para cada usuário - o nome de usuário. Não é segredo, por isso não é uma boa sal; no entanto, a concatenação do nome de usuário e um sal segredo global é tanto segredo e único. Se você armazenar o hash (username + sal + senha), você só precisa saber o valor sal mundial única em tempo de pesquisa.

(é verdade que isso representa um risco maior se alguém vaza o sal mundial única. Mas é uma pena técnica considerando).

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