Pergunta

ATUALIZAÇÃO:Eu aprendi recentemente a partir de esta pergunta que em toda a discussão abaixo, eu (e tenho certeza que outros também o fizeram) foi um pouco confuso:O que eu continue chamando um arco-íris de mesa, é na verdade chamado de uma tabela de hash.Tabelas do arco-íris são mais complexas criaturas, e são, na verdade, uma variante do Hellman Hash Chains.Embora eu acredito que a resposta ainda é a mesma (desde que não desce à criptoanálise), algumas discussões podem ser um pouco distorcida.
A pergunta:"O que são tabelas do arco-íris e como são utilizados?"


Normalmente, eu sempre recomendo o uso de um criptograficamente forte valor aleatório, como o sal, para ser usado com as funções de hash (e.g.para as senhas, para proteger contra o arco-íris Tabela ataques.

Mas é, na verdade, criptograficamente necessário para que o sal é aleatório?Qualquer valor único (único por usuário, por exemplo,userId) suficiente em relação a isso?Seria, na verdade, evitar o uso de um único arco-íris Tabela para quebrar todos (ou a maioria) senhas no sistema...
Mas não falta de entropia realmente enfraquecer a força criptográfica de funções de hash?


Note, eu não estou perguntando sobre o porquê de usar o sal, como para protegê-lo (ele não precisa ser), usando uma única constante de hash (não), ou que tipo de função de hash para usar.
Apenas se o sal precisa de entropia ou não.


Obrigado a todos pelas respostas até agora, mas eu gostaria de focar as áreas que eu sou (um pouco) menos familiarizados com.Principalmente implicações para a criptoanálise - eu gostaria mais se alguém tiver alguma entrada do crypto-matemática PoV.
Também, se há outros vetores que não tivessem sido consideradas, o que é ótimo de entrada (ver @Dave Sherohman ponto em vários sistemas).
Além disso, se você tem alguma teoria, idéia ou prática recomendada - faça isso com a prova, o cenário de ataque, ou de provas empíricas.Ou mesmo considerações válidas para aceitável trade-offs...Eu estou familiarizado com as Melhores Práticas (capital de capital B P) sobre o assunto, eu gostaria de provar o valor que este realmente oferece.


EDITAR:Algumas realmente boas respostas aqui, mas eu acho que, como o @Dave diz, ele vem para baixo para Tabelas do arco-íris comuns para nomes de usuário...e possível menos nomes comuns também.No entanto, o que se minha nomes de utilizador estão globalmente exclusivo?Não necessariamente exclusivo para o meu sistema, mas por cada usuário - por exemplo,endereço de e-mail.
Não haveria incentivo para construir um RT para um único usuário (como @Dave enfatizado, o sal não é mantida em segredo), e isso seria ainda impedir que o clustering.Único problema seria que eu poderia ter o mesmo e-mail e senha em um site diferente, mas o sal não iria impedir isso de qualquer maneira.
Então, ele volta para baixo para a criptoanálise É a entropia necessários, ou não?(Meu pensamento atual é que não é necessário a partir de uma criptoanálise ponto de vista, mas é a partir de outras razões de ordem prática.)

Foi útil?

Solução

O sal é tradicionalmente armazenados como um prefixo para o hash de senha.Este já é conhecida a qualquer invasor com acesso ao hash de senha.Usando o nome de usuário, como o sal ou não, não afeta de que o conhecimento e, portanto, não teria nenhum efeito em um único sistema de segurança.

No entanto, usando o nome de usuário ou a qualquer outro utilizador controlado valor, como o sal poderia reduzir a segurança do sistema, como um usuário que tinha o mesmo nome de usuário e senha em vários sistemas que utilizam o mesmo algoritmo de hash de senha acabaria com o mesmo hash de senha em cada um desses sistemas.Eu não considere isso uma significativa responsabilidade, porque eu, como um invasor, iria tentar senhas de conta de destino é conhecido por ter usado em outros sistemas antes de tentar qualquer outro meio de comprometer a conta.Idêntico hashes só iria me dizer antecipadamente que o conhecido senha de trabalho, que não iria fazer o ataque mais fáceis.(Observe, porém, que uma rápida comparação de bancos de dados de conta poderia fornecer uma lista de estabelecimentos de metas prioritárias, desde que ele iria dizer-me quem é e quem não é a reutilização de senhas.)

O maior perigo desta idéia é que os nomes são comumente reutilização apenas sobre qualquer site que você se importa para visitar terá uma conta de usuário chamada "Dave", por exemplo, e "admin" ou "de raiz" são ainda mais comuns - o que faria com a construção de tabelas rainbow segmentação de usuários com os nomes comuns, muito mais fácil e mais eficaz.

Ambas essas falhas poderiam ser resolvidos de forma eficaz, adicionando um segundo sal de valor (seja fixa e escondida ou exposta como padrão de sal) para a palavra-passe antes de hash, mas, nesse ponto, você pode muito bem ser apenas utilizando o padrão de entrópica sal de qualquer maneira, em vez de trabalhar o nome de utilizador para ele.

Editado para Acrescentar: Um monte de pessoas estão falando sobre entropia e se entropia de sal é importante.É, mas não pela razão que a maioria dos comentários parecem pensar.

O pensamento geral parece ser a de que a entropia é importante para que o sal vai ser difícil para um invasor para adivinhar.Isso é incorreto e, de fato, totalmente irrelevantes.Como tem sido apontado algumas vezes por várias pessoas, os ataques que serão afetados pelo sal só pode ser feita por alguém com o banco de dados de senha e alguém com a senha de banco de dados pode apenas olhar para ver o que cada conta é o sal.Se é adivinhação ou não, não importa quando você pode trivialmente procurá-lo.

A razão é que a entropia é importante é evitar o agrupamento de valores de sal.Se o sal é baseado no nome de usuário e você sabe que a maioria dos sistemas tem uma conta chamada de "raiz" ou "admin" e, em seguida, você pode fazer um arco-íris mesa para os dois sais e ele vai rachar a maioria dos sistemas.Se, por outro lado, um aleatório de 16 bits, o sal é utilizado e os valores aleatórios tem aproximadamente uma distribuição uniforme, então você precisa de um arco-íris de tabela para todos 2^16 possíveis sais.

Não se trata de impedir o atacante de saber o que uma conta individual de sal é, trata-se de não dar-lhes a grande, a gordura alvo de um único sal que vai ser utilizado em uma proporção substancial de alvos em potencial.

Outras dicas

Com um sistema de alta entropia sal é absolutamente necessário para armazenar senhas de forma segura.

Levar o meu nome de utilizador 'gs' e adicioná-lo à minha senha "Minhasenha' dá gsMyPassword.Isso é facilmente quebrado usando um arco-íris-tabela porque se o nome de usuário ainda não tenho o suficiente de entropia pode ser que este valor já armazenado no arco-íris mesa, especialmente se o nome de usuário é curto.

Outro problema são ataques em que você sabe que um usuário participa de dois ou mais serviços.Há muitos comuns, nomes de usuários, provavelmente, os mais importantes são admin e raiz.Se alguém criou um arco-íris-tabela de sais com mais comuns de nomes de usuário, ele pode usá-las para comprometer as contas.

Eles costumavam ter um de 12-bits de sal.12 bits são 4096 combinações diferentes.Que não era seguro o suficiente, porque toda essa informação pode ser facilmente armazenado hoje em dia.O mesmo se aplica para a 4096 mais utilizados nomes de usuários.É provável que alguns de seus usuários vai ser escolher um nome de usuário que pertence a um dos mais comuns de nomes de usuários.

Eu achei que este verificador de senha o que é a entropia de sua senha.Tendo menor entropia em senhas (como usando nomes de usuário), torna-se muito mais fácil para rainbowtables como eles tentam cobrir, no mínimo, todas as senhas com baixa entropia, porque eles são mais prováveis de ocorrer.

É verdade que o nome de utilizador só pode ser problemática, uma vez que as pessoas podem compartilhar de nomes de usuários, entre os diferentes website.Mas deve ser um pouco problemático se os usuários tinham um nome diferente em cada site.Então por que não torná-lo único em cada site.Hash da palavra-passe um pouco como este

hashfunction("www.yourpage.com/"+username+"/"+password)

Isso deve resolver o problema.Eu não sou um mestre de criptoanálise, mas tenho dúvida de que o fato de que não usamos a alta entropia gostaria de fazer o hash de qualquer um mais fraco.

Eu gosto de usar ambos:uma alta entropia aleatória por registro de sal, mais o ID exclusivo do próprio registro.

Embora isso não adiciona muito a segurança contra ataques de dicionário, etc., não remova a franja caso onde alguém copia seu sal e de hash para um outro registro com a intenção de substituir a palavra-passe com as suas próprias.

(É verdade, é difícil pensar em uma circunstância em que esta se aplica, mas vejo mal nenhum em cintos e suspensórios quando se trata de segurança.)

Se o sal for conhecido ou de fácil adivinhação, você não tenha aumentado a dificuldade de um ataque de dicionário.Ele ainda poderá ser possível criar uma versão modificada do arco-íris tabela que leva uma "constante" de sal em conta.

Usando únicas sais aumenta a dificuldade da maior parte dos ataques de dicionário.

Tendo exclusivo de criptografia forte de sal valor seria o ideal.

Eu diria que enquanto o sal é diferente para cada senha, provavelmente você vai estar ok.O ponto do sal, é por isso que você não pode usar o padrão do arco-íris tabela para resolver todas as senhas no banco de dados.Portanto, se você aplicar um sal diferente para cada senha (mesmo se ele não é aleatório), o invasor tem basicamente para calcular um novo arco-íris tabela para cada palavra-chave, uma vez que cada senha que usa um sal diferente.

Usando um sal com mais de entropia não ajuda muito, porque o atacante, neste caso, é assumido que já tem o banco de dados.Desde que você precisa para ser capaz de recriar o hash, você tem que já sabe o que é o sal.Então você tem que armazenar o sal, ou os valores que compõem o sal em seu arquivo de qualquer jeito.Em sistemas como o Linux, o método para obter o sal é conhecido, então não há necessidade de ter um segredo de sal.Você tem que assumir que o atacante, que tem seus valores de hash, provavelmente sabe o sal valores bem.

A força de uma função de hash não é determinada pela sua participação!

Usando um sal que é conhecido para o atacante, obviamente, torna a construção de um arco-íris tabela (principalmente para hard-coded nomes de utilizador como raiz) mais atraente, mas ele não enfraquecer o hash.Usando um sal que é desconhecido para o atacante vai tornar o sistema mais difícil de atacar.

A concatenação de um nome de utilizador e palavra-passe pode ainda fornecer uma entrada para um sistema inteligente de arco-íris tabela, o uso de um sal de uma série pseudo-aleatórias de caracteres armazenados com o hash de senha provavelmente é uma idéia melhor.Como ilustração, se eu tivesse nome de usuário "batata" e a senha "cerveja", concatenado de entrada para o seu hash é "potatobeer", que é um razoáveis de entrada para um arco-íris tabela.

Alterar o sal, a cada vez que o utilizador altera a palavra-passe pode ajudar a derrotar prolongada ataques, como seria a execução de uma razoável política de palavra-passe, por exemplo,maiúsculas e minúsculas, sinais de pontuação, min, duração, alteração após n semanas.

No entanto, eu diria que a sua escolha do algoritmo de resumo é o mais importante.O uso do SHA-512 é que vai provar ser mais uma dor de alguém gerar um arco-íris tabela de MD5, por exemplo.

O sal deve ter o máximo de entropia possível para garantir que, caso um determinado valor de entrada ser hash várias vezes, o valor de hash resultante será, tão perto de como pode ser obtida, sempre diferentes.

Usando sempre mudando valores de sal, com o máximo de entropia possível, o sal irá garantir que a probabilidade de hash (por exemplo, senha + sal) vai produzir inteiramente diferentes valores de hash.

A menos entropia no sal, mais chance você tem de gerar o mesmo sal de valor, como assim, mais chance você tem de gerar o mesmo valor de hash.

É da natureza do valor de hash a ser "constante" quando a entrada é conhecido e "constante" que permitem ataques de dicionário ou tabelas do arco-íris para ser tão eficaz.Variando-se o valor de hash resultante tanto quanto possível (usando alta entropia valores de sal) garante que o hash a mesma entrada+random-sal vai produzir diferentes valor de hash resultados, eliminando assim (ou pelo menos reduzindo a eficácia do) arco-íris tabela ataques.

A entropia é o ponto de Sal do valor.

Se há alguns simples e reproduzível "matemática" por trás de sal, que é o mesmo que o sal não está lá.Basta adicionar o valor de tempo deve ser fino.

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