
Colisões de hash e explorações
By Ange Albertini and Marc Stevens.
P: É possível fazer um arquivo obter um MD2/MD4/MD5/MD6/SHA1/SHA2/SHA3 arbitrário, ou o mesmo hash de outro arquivo?
R: Não.
P: É possível criar 2 arquivos diferentes com o mesmo hash?
R: Com MD5, em alguns segundos em um computador comum. Com SHA1, é possível mas não prático para usuários finais (Complexidade: 2^61.2 Preço: $11k).
P: É possível fazer 2 arquivos diferentes obterem o mesmo hash anexando dados?
R: Com MD5, em algumas horas em um computador comum. Com SHA1, é possível mas não prático para usuários finais (Complexidade: 2^63.4 Preço: $45K)
P: Os 2 arquivos permanecerão válidos?
R: Em geral, sim, pois a maioria dos formatos de arquivo tolera dados anexados. Por outro lado, as assinaturas dos arquivos provavelmente serão quebradas.
P: É possível fazer 2 arquivos diferentes com conteúdos arbitrários e o mesmo hash?
R: Sim, pode ser instantâneo contando com estruturas especiais de arquivo:
P: Para quais formatos posso obter um par de arquivos com colisão MD5 instantânea?
R: JPG, PNG, GIF, GZIP, Portable Executable, MP4, JPEG2000, PDF, DOCX/PPTX/XSLX, EPUB, 3MF, XPS. Basta executar o script específico.
P: E para SHA1?
R: Para SHA1, JPG em um PDF é calculado e implementado.
P: E quanto aos formatos já suportados para MD5 (JPG, PNG...), mas para SHA1?
R: Eles provavelmente também são suportados com SHA1, mas suas colisões ainda não foram calculadas.
P: Os cálculos são mais rápidos para conteúdos semelhantes (mas diferentes)?
R: Não. Qualquer diferença mínima exige um cálculo completo.
P: Quais formatos não têm esse atalho?
R: ELF, Mach-O, Java Class, TAR, ZIP (entre outros...)
P: Colisões clássicas (em algumas horas) ainda são possíveis com esses formatos?
R: Sim, desde que qualquer quantidade de dados anexados seja tolerada (ou seja, provavelmente não ZIP ou Class).
P: Você fornece exemplos de colisões?
R: Sim.
O objetivo é explorar extensivamente ataques existentes - e mostrar no caminho o quão fraco é o MD5 (colisões instantâneas de qualquer JPG, PNG, PDF, MP4, PE...) - e também explorar em detalhes formatos de arquivo comuns para determinar como eles podem ser explorados com ataques atuais ou futuros.
De fato, o mesmo truque de formato de arquivo pode ser usado em vários hashes (os mesmos truques de JPG foram usados para MD5, SHA-1 malicioso e SHA1), desde que as colisões sigam os mesmos padrões de bytes.
Este documento não trata de novos ataques (o mais recente foi documentado em 2012), mas de novas formas de exploração de ataques existentes.
Status atual dos ataques conhecidos:
fazer um arquivo obter o hash de outro arquivo ou um hash específico: impossível
obter dois arquivos diferentes com o mesmo MD5: instantâneo
fazer dois arquivos arbitrários obterem o mesmo MD5: algumas horas (72 horas.core)
fazer dois arquivos arbitrários de formatos específicos (PNG, JPG, PE...) obterem o mesmo MD5: instantâneo
obter dois arquivos diferentes com o mesmo SHA1: 6500 anos.core
(*) exemplo com crypt - obrigado Sven!```
import crypt crypt.crypt("5dUD&66", "br") 'brokenOz4KxMc' crypt.crypt("O!>',%$", "br") 'brokenOz4KxMc'
# Ataques
MD5 e SHA1 trabalham com blocos de 64 bytes.