2017/02/24

Google "cracka" o SHA-1 e cria dois PDFs diferentes com a mesma assinatura


Os algoritmos de hashing são indispensáveis para o funcionamentos dos sistemas digitais a inúmeros níveis, mas há alturas em que até esses algoritmos começam a acusar o peso da idade e se tornam vulneráveis, como é o caso do SHA-1.

As funções de hashing são bastante curiosas e simples de explicar (embora matematicamente sejam bem complexas). A idea é ter uma função que permite condensar uma quantidade variável de dados num código único com tamanho fixo. O objectivo é que este código seja impossível de repetir para qualquer outro conjunto de dados que não seja exactamente o mesmo que o original - e que por isso possa ser usado como "validação" de que o ficheiro pretendido é realmente o original.

Ora, a questão é que, estando-se a utilizar uma "hash" com tamanho fixo, mais reduzido que o número de potenciais documentos a validar, é inevitável a possibilidade de colisões, que façam com que dois ficheiros diferentes possam ter a mesma assinatura - mas isso é calculado de forma a ser estatisticamente improvável em situações normais... excepto para o caso do SHA-1.

A Google há muito que tem recomendado o abandono do SHA-1, e agora demonstra isso mesmo com a criação do Shattered.it. Basicamente, a Google conseguiu criar o primeiro caso deliberado de colisões no SHA-1, criando dois ficheiros PDF diferentes que obtêm precisamente a mesma assinatura SHA-1. O processamento necessário para tal ainda não está ao alcance de qualquer pessoa (é o equivalente a mais de 6000 anos de cálculos num único CPU, e mais de uma centena de anos num único GPU)... mas é passível de ser conseguido por quem tiver recursos de uma "cloud" a trabalhar nisso.

Com o shattered, a Google pretende facilitar a descoberta de casos de ataque que se aproveitem destas assinaturas repetidas, mas a principal recomendação é que quem ainda usa SHA-1 passe a utilizar funções mais seguras, como o SHA-256 ou SHA-3.


Actualização: já começaram os "estragos", com ficheiros com o mesmo SHA-1 a corromperem o sistema de controlo de versões do WebKit.

2 comentários:

  1. Vamos tratar melhor a nossa própria língua. Em vez de "cracka" (que não existe nem em língua inglesa nem em língua portuguesa, sugiro que se use a palavra "quebra", que me parece perfeitamente ajustada para este caso em particular.

    ResponderEliminar
  2. Eu gosto de crackar. Ainda mais por não existir na língua inglesa :).

    Alternativas a quebrar podem ser partir ou escangalhar. A tradução directa de crack seria racha (rachar). Outro sinonimo seria fenda (fendilhar)

    ResponderEliminar