Pergunta

Se alguém está propositadamente a tentar modificar dois arquivos para ter o mesmo hash, quais são maneiras de pará-los? Pode MD5 e SHA1 evitar que o caso da maioria?

Eu estava pensando em escrever meu próprio e eu acho que mesmo se eu não fizer um bom trabalho, se o usuário não sabe o meu hash de que ele pode não ser capaz de enganar o meu.

Qual é a melhor maneira de evitar isso?

Foi útil?

Solução

MD5 é geralmente considerado inseguro se colisões de hash são uma grande preocupação. SHA1 é também deixou de ser considerado aceitável pelo governo dos EUA. Há é era um competição em curso para encontrar um hash de substituição algoritmo, mas a recomendação neste momento é usar a família SHA2 - SHA-256, SHA-384 ou SHA-512. [ Atualização: 2012/10/02 NIST escolheu < a href = "http://en.wikipedia.org/wiki/Keccak" rel = "noreferrer"> SHA-3 ser o algoritmo de Keccak . ]

Você pode tentar criar seu próprio haxixe - que provavelmente não seria tão bom como MD5, e 'segurança pela obscuridade' também não é aconselhável

.

Se você quer segurança, hash com vários algoritmos de hash. Ser capaz de criar simultaneamente arquivos que têm colisões de hash usando uma série de algoritmos é excessivamente improvável. [E, à luz dos comentários, deixe-me esclarecer: eu quero dizer publicar tanto o os valores de hidromassagem para o arquivo SHA-256 e - não combina algoritmos de hash para criar um valor único, mas usando algoritmos separados para criar valores separados. Geralmente, um arquivo corrompido vai deixar de corresponder a qualquer dos algoritmos; Se, por acaso, alguém conseguiu criar um valor de colisão usando um algoritmo, a chance de produzir também uma segunda colisão em um dos outros algoritmos é insignificante.]

O Pública TimeStamp usa uma matriz de algoritmos. Veja, por exemplo, sqlcmd-86.00.tgz para uma ilustração.

Outras dicas

Se o usuário não sabe o seu algoritmo de hash ele também não pode verificar sua assinatura em um documento que você realmente assinado.

A melhor opção é usar algoritmos de hash one-way chave público-que geram o hash mais longo. SHA-256 cria um hash de 256 bits, por isso, um falsificador teria que tentar 2 255 documentos diferentes (em média) antes de eles criaram um que correspondeu a um determinado documento, que é bastante segura. Se isso ainda não é suficiente seguro para você, há SHA-512.

Além disso, eu acho que vale a pena mencionar que uma boa maneira de baixa tecnologia para se proteger contra falsos documentos assinados digitalmente é simplesmente manter uma cópia de qualquer coisa que você assinar. Dessa forma, se se trata de uma disputa, você pode mostrar que o documento original que você assinou foi alterado.

Por que você está tentando criar seu próprio algoritmo de hash? O que há de errado com SHA1HMAC?

Sim, há repetições para hashes.
Qualquer hash que é menor do que o texto simples é necessariamente menos informação. Isso significa que haverá algumas repetições. A chave para hashes é que as repetições são difíceis de engenharia reversa.

Considere CRC32 - comumente usado como um hash. É uma quantidade de 32-bit. Porque há mais de 2 ^ 32 mensagens no universo, então não haverá repete com CRC32. A mesma ideia se aplica a outros hashes.

Há uma hierarquia de dificuldade (para um atacante) aqui. É mais fácil encontrar dois arquivos com o mesmo hash do que para gerar um que combine com um determinado hash e mais fácil de fazer o mais tarde, se você não tem que respeitar formulário / content / comprimentos restrições.

Assim, se é possível utilizar uma estrutura de documento bem definido e comprimentos, você pode fazer uma vida atacantes um pouco mais difícil, não importa o hash de subalterno que você usa.

Isso é chamado de "colisão de hash", ea melhor maneira de evitar isso é usar uma função hash forte. MD5 é relativamente fácil de construir artificialmente arquivos colidindo, como visto aqui . Da mesma forma, sabe-se que há uma relativamente eficiente método para computar colidindo arquivos SH1, embora neste caso "relativamente eficiente" ainda leva hunreds de horas de tempo de computação.

Geralmente, MD5 e SHA1 ainda são caros para quebrar, mas não impossível. Se você está realmente preocupado com isso, usar uma função hash mais forte, como SHA256 .

Escrevendo seu próprio país não é realmente uma boa idéia a menos que você é um criptógrafo bastante especialista. a maioria das idéias simples foram julgados e há ataques conhecidos contra eles.

Se você realmente quiser saber mais sobre isso, ter um olhar para Schneier do Applied Cryptography .

Eu não acho que chegando com seu próprio algoritmo de hash é uma boa escolha.

Outra boa opção é usada Salgado MD5 . Por exemplo, a entrada para a função hash MD5 é anexado com string "acidzom! @ #" Antes de passar para a função MD5.

Há também uma boa leitura em Slashdot .

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