De acordo com este artigo e muitos outros, o SHA-1 não é seguro.
No meu caso, não estou preocupado com senhas ou certificados digitais. Estou preocupado com a integridade do arquivo.
É razoavelmente possível que um arquivo (por exemplo, uma imagem ISO ou arquivo executável) seja alterado maliciosamente de uma maneira que:
- Mantém o hash SHA-1 do arquivo original e
- Mantém o conteúdo geral e a operação do arquivo (mas é claro que agora inclui conteúdo malicioso que não existia originalmente)
Do meu ponto de vista, alterar um arquivo de maneira a gerar uma colisão SHA-1 tornaria o arquivo totalmente inútil. O ISO ficaria totalmente corrompido ou o arquivo executável seria tão completamente embaralhado que nem seria mais um arquivo executável.
Mas, do jeito que eu vejo, pode estar errado. Até agora, não encontrei nada nas pesquisas do Google com relação à adequação contínua do SHA-1 para verificação de arquivos. Alguma ideia?
Respostas:
Ainda ninguém conseguiu isso com o SHA-1. É possível em teoria, mas ainda não é prático. Os relatórios sobre insegurança no SHA-1 apenas significam que o nível de segurança não é tão alto quanto gostaríamos e isso significa que não temos tantos anos antes que precisamos nos preocupar com isso como pensávamos.
É mais difícil produzir um arquivo com o mesmo hash SHA-1 que um arquivo específico do que criar dois arquivos com o mesmo hash SHA-1. E, tanto quanto sabemos, ninguém em nenhum lugar do mundo realizou ainda essa tarefa mais fácil. Isso não significa que não pode acontecer amanhã.
fonte
É teoricamente possível, mas ainda não foi feito.
O que você está procurando é chamado de "colisão de hash:" dois arquivos com o mesmo hash. Códigos de hash criptográficos como o SHA-1 geralmente são projetados para dificultar isso. Como o SHA-1 é um código de 160 bits, serão necessárias em média 2 ^ 159 tentativas de força bruta para encontrar uma duplicata. Se for encontrado um algoritmo que, com confiabilidade, é melhor do que aquele em relação a um hash criptográfico, o hash é considerado "quebrado".
MD-5 é um exemplo de um hash muito quebrado. Deveria ter uma força de 128 bits, exigindo em média 2 ^ 127 tentativas. Como é o abuso de vulnerabilidades conhecidas, o número real de tentativas necessárias pode ser tão baixo quanto 2 ^ 47. Isso é MUITO menor que 2 ^ 127. De fato, isso foi feito em menos de um dia em um cluster de computação moderno.
Dou esse exemplo porque é o mais próximo de como você deseja usar o SHA-1. No entanto, essa não é a abordagem mais comum usada pela análise criptográfica para garantir que os hashes não sejam quebrados. Eles geralmente permitem uma colisão entre dois arquivos, conforme escolhido pelo invasor, em vez de você escolher um arquivo e o invasor procurar correspondê-lo. Esse tipo de ataque tem a vantagem de ser mais fácil de comparar. Se eu achar que é "difícil" decifrar seu arquivo, isso significa que outro arquivo é igualmente forte? Esse ataque no qual o invasor escolhe os dois arquivos garante que capturamos o pior do pior.
Esse tipo de ataque permite um truque interessante conhecido como " ataque de aniversário ". Para encurtar a história, usar o ataque de aniversário reduz pela metade a força do algoritmo; portanto, o SHA-1 requer 2 ^ 80 tentativas (em média) e o MD5 requer 2 ^ 64 tentativas (em média). Estes são metade de 160 e 128, respectivamente.
O SHA-1 tem ataques conhecidos que diminuem sua força de 2 ^ 80 para 2 ^ 69. Isso não vai importar muito para você. 2 ^ 69 tentativas é muito tempo.
No entanto, a partir da história, descobrimos que os algoritmos de hash não são quebrados espontaneamente, mas com o tempo. Ninguém quebra um algoritmo como o MD-5, passando de 2 ^ 64 para 2 ^ 47 durante a noite. Isso acontece com o tempo, pois muitas pessoas publicam artigos sobre a matemática que estão usando contra ela. Geralmente, é possível observar a complexidade dos ataques diminuir lentamente desde o início do algoritmo (onde o melhor ataque geralmente é o ataque de aniversário).
O fato de estarmos vendo algumas mudanças nas colisões sugere que o SHA-1 está vendo a luz no fim do túnel. Ainda é forte, mas pode haver um desejo de ir até o mais novo SHA-3, que atualmente é muito mais seguro.
Você realmente deve tomar essas decisões da perspectiva do modelo de ameaça. Quanto dano pode ser causado por um invasor se ele sofrer uma dessas colisões. Seus atacantes fazem scripts de crianças com acesso a alguns laptops ou governos com clusters de supercomputação inteiros à sua disposição. Qual o tamanho de uma janela de tempo que um invasor precisa interromper o hash antes de ser inútil (muitos usos de criptografia envolvem uma "mudança de proteção", como rotação de senha). Tudo isso afetará a seriedade com que você deve considerar colisões.
fonte
As falhas do SHA-1 discutidas nesse artigo são muito específicas: elas permitem que os atacantes criem duas coisas com o mesmo valor (isso é chamado de "ataque de colisão"). No entanto, um ataque de colisão exige que o invasor controle os dois arquivos envolvidos. Se o invasor não controlar o arquivo original, um ataque de colisão não permitirá que ele encontre outro arquivo com o mesmo valor de hash.
O motivo disso para TLS / SSL (e assinaturas em geral) é que, com esses, um invasor geralmente pode controlar os dois arquivos. Um certificado TLS é criado principalmente pela pessoa que o solicita (os bits que eles não controlam costumam ser previsíveis); portanto, as colisões permitem que ele faça um certificado legítimo e um ilegítimo, obtenha o legítimo assinado e transfira a assinatura.
Para arquivos, a mesma situação nem sempre se aplica. Se sua preocupação é que a pessoa que cria o arquivo é o atacante (por exemplo, eles obtêm uma coisa independentemente verificada como boa e, em seguida, enviam a carga útil maligna com o mesmo hash), o ataque SHA-1 se aplica e você deve procurar no sentido de eliminá-lo (embora ainda não seja crítico, como David Schwartz mencionou). Se o arquivo original for confiável, um invasor não poderá aplicar os ataques SHA-1 atualmente conhecidos, embora você ainda deva pensar em eliminá-lo se puder (se tiver uma opção, use um hash sem ataques conhecidos como SHA- 2)
Em resposta a "a colisão não será útil" - Embora um ataque não exija que um invasor possa obter uma colisão útil , geralmente não é tão difícil transformar "colisão" em "colisão útil". Muitos formatos de arquivo têm uma quantidade razoável de espaço em que você pode ter o que quiser, sem afetar a funcionalidade do arquivo; um invasor normalmente pode modificá-lo para obter uma colisão (se as colisões forem praticamente localizáveis), mantendo a parte funcional como ela quer que seja. A diferença entre "ataque acadêmico" e "ataque prático" pode ser grande; a diferença entre "qualquer colisão" e "colisão útil" é geralmente muito menor.
O problema mais sério, que não tem relação com a escolha do algoritmo, é como você está obtendo o hash. Tudo o que um hash faz é mudar o problema de "obter o arquivo real" para "obter o valor real do hash"; um valor de hash enviado do mesmo servidor e pelo mesmo tipo de conexão que o arquivo é totalmente inútil contra modificações maliciosas (qualquer invasor que possa violar o arquivo pode violar o hash). Hashes são úteis apenas para isso se você puder confiar mais no hash do que no arquivo; embora às vezes seja o caso (torrents, espelhos), eles costumam ser usados quando não é o caso. Portanto, você deve ter muito cuidado com isso sempre que usar hashes para verificação de integridade.
fonte
Você precisa diferenciar entre um ataque de colisão e um ataque de pré - imagem . Encontrar duas mensagens com o mesmo valor de hash é um ataque de colisão.
Substituir uma mensagem específica em particular (aqui: um executável) por outra mensagem com o mesmo hash é um (segundo) ataque de pré-imagem.
O SHA-1 é quebrado na medida em que um ataque de colisão pode ser feito em 2 52 operações, de acordo com um artigo da Wikipedia que não fornece uma citação para esse número (o melhor ataque que eu sei que é realmente credível é o de Marc Stevens , que leva 2 60 operações). Mas vamos assumir o caso pessimista de 2 52 .
Isso é preocupante porque um ataque nessa escala não é apenas teoricamente concebível, mas de fato perfeitamente possível em menos de um dia em um equipamento com várias GPUs. Obviamente, isso é um problema para aplicativos em que "qualquer duas" mensagens serão exibidas. Mesmo o número 2 60 dado por Stevens (que é 256 vezes mais trabalho) é perfeitamente viável se o atacante estiver disposto a gastar algum dinheiro extra com o problema ou se estiver disposto a passar um ano.
Que é exatamente o tipo de coisa que não impedirá que alguém envolvido em espionagem ou cibercrime forja certificados.
Agora, um ataque de pré-imagem tem um expoente duas vezes maior, assumindo 2 52 para o ataque de colisão, que seria 2 104 operações, o que é um estádio totalmente diferente.
Isso não é apenas impraticável (uma máquina que é um bilhão de vezes mais rápida do que a mencionada no parágrafo anterior ainda levaria cerca de 6 milhões ou mais anos), mas, dados nossos meios insignificantes de gerar energia, isso é totalmente impossível.
Fazer um cálculo tão grande exigiria uma fonte de energia muito maior do que qualquer coisa que possamos dedicar a uma única operação. Não, não é exatamente uma fonte de energia do tamanho do sol, mas ainda é muito grande .
Você pode realisticamente esperar obter algo entre 10 e 50 GFLOPS de um Watt. Supondo que algum tipo de milagre aconteça e os processadores consigam milhares de vezes mais eficiência energética durante a noite, pode-se assumir 1 SHA ≈ 1 FLOP (bastante otimista!). Isso significa que, para realizar 2 104 cálculos de hash em 10 anos, você precisa de uma usina de 10 12 W. Para executar o ataque dentro de 1 ano, você precisa de uma usina de 10 13 W. Isso é cerca de 50 vezes o que todas as usinas nucleares dos EUA, França e Japão podem produzir juntas, apenas para forjar um único hash.
Isso não vai acontecer , existem maneiras muito mais fáceis de atingir o mesmo objetivo (explorar o servidor que armazena o hash original e substituí-lo, chantagear alguém etc.).
fonte
O ponto geral do artigo mencionado na pergunta é: O SHA1 está obsoleto e deve ser eliminado gradualmente enquanto você ainda tem tempo para fazê-lo sem problemas. Em algumas áreas, o tempo está se esgotando desde que o Google e a Microsoft impõem prazos.
Regra geral para a tecnologia obsoleta :
Citação resumida da postagem de blog de Bruce Schneier em 2012: "O ponto é que nós, na comunidade, precisamos iniciar a migração para longe do SHA-1 e do SHA-2 / SHA-3 agora."
fonte
Para a parte de colisão de hash SHA-1 da sua pergunta, isso foi abordado por algumas das respostas.
No entanto, grande parte disso depende do tipo de arquivo com o qual estamos trabalhando:
O que isso significa varia muito no que está detectando as alterações:
Então, o que resta é como obter colisões em qualquer estrutura que não seja corrompida e talvez com um certo grau de indetectável:
Digamos que você tenha um computador super rápido e um arquivo pequeno, de modo que a modificação com uma sequência de bytes válida e a recálculo do hash leve 1 milissegundo (provavelmente exigindo algum hardware dedicado). Se a distribuição de hash for perfeitamente aleatória e distribuída por todo o intervalo, você terá uma colisão com o SHA-1 a cada
2^160
tentativa (força bruta).Mas hey, vamos tentar os
2^60
e2^52
versões, e fingir que eles nos permitem modificar o arquivo de qualquer maneira que nós gostamos (não) e que, também, pode ser feito em 1ms cada tentativa:Mas ei, você pode ter sorte. Realmente, realmente, mais do que qualquer coisa que as pessoas chamam de milagres.
fonte
Na verdade, você pode satisfazer uma dessas condições por vez, mas não as duas .. é possível obter o mesmo hash para dois arquivos diferentes, mas alguém pode alterar um arquivo e tentar obter o mesmo hash é praticamente impossível, pois Pelo que sei
fonte
Sim, é possível. Pense em como os vírus funcionam nos EXEs. A carga útil do malware é anexada ao EXE original, para que o programa ainda faça o que originalmente fez, mas também se espalhe como vírus. Agora, para manter o mesmo hash, você precisará de preenchimento adicional especificamente criado .
Isso significa que o arquivo seria maior. Porém, no caso de um EXE, talvez você possa remover parte do código menos utilizado, para que o programa pareça funcionar apenas inicialmente. No caso de um JPEG, você pode compactar ainda mais a imagem ou usar uma imagem completamente diferente. Para um ISO, você pode remover conjuntos de arquivos. Os cálculos necessários para replicar o hash seriam mais difíceis e talvez matematicamente impossíveis para casos específicos, mas ainda seriam possíveis em geral.
fonte