Pular para o conteúdo principal

Por que não é seguro usar MD5 para criptografar senhas?

Muitos webmasters e webdevelopers utilizam o algoritmo MD5 para criptografar senhas de usuários em seus bancos de dados. Essa é, obviamente, uma alternativa melhor do que guardar a senha em texto puro, visto que, assim, bastaria alguém obter acesso não autorizado ao banco que ele teria acesso imediato a essas informações sensíveis.


No entanto, a utilização do algoritmo MD5 não é o santo graal da segurança e, nesse artigo, você vai saber por quê, de um ponto de vista matemático.



Começando pela definição extraída da Wikipédia a respeito do programa md5sum, utilizado para gerar os hashes MD5,


md5sum é um programa de computador de código aberto que permite verificar a integridade de arquivos transmitidos por rede, como a internet, garantindo que os dados não tenham sidos corrompidos durante a transferência. (Wikipédia, 2014. Grifo meu)


Ou seja, o md5sum foi projetado, originalmente, para verificar a integridade de arquivos - e não para criptografar senhas! A ideia é simples: ao baixar um arquivo, como a ISO de uma distribuição de Linux, extrai-se o MD5 daquele arquivo e verifica-se com o md5 disponível no servidor. Se ambos os valores forem iguais, isso significa que o arquivo não foi corrompido durante o download.


No entanto,  esse algoritmo apresenta algumas falhas. O professor Peter Selinger apresenta uma prova de conceito na qual duas sequências de texto e dois arquivos diferentes podem apresentar a mesma soma MD5 através da manipulação de alguns de seus bytes.


Campo de senha com rótulo Password


Se o algoritmo MD5 pode ser contornado para verificar a integridade de arquivos, que é aquilo que ele foi projetado para fazer, quem dirá sobre a criptografia de senhas, que foi algo adaptado ao mesmo. Deixando de lado seus pormenores, na prática o md5 é uma sequência de 32 dígitos hexadecimais, que são representados por caracteres de 0 a 9 e de a até f.


Assim, se um usuário de um site que tenha a senha 12345 faz login, o sistema de autenticação transforma aquele 12345 em d577273ff885c3f84dadb8578bb41399.  A seguir ele compara esse número transformado com o valor armazenado no banco de dados. Caso o valor seja o mesmo, o acesso é liberado.


No entanto, matematicamente, esse processo é falho devido ao Princípio da Casa dos Pombos. Basta ver que, como uma soma md5 é um conjunto de 32 dígitos de 0 a f - e, portanto, há 16 possibilidades para cada dígito - o máximo de números que pode ser gerado é de [latex size=0 color=000000 background=ffffff]16^{32}[/latex], ou aproximadamente 3,4X10^38. No entanto, se considerarmos todas as combinações de 32 caracteres que possuam dígitos de 0 a 9 e letras maiúsculas e minúsculas de A até Z, teremos [latex size=0 color=000000 background=ffffff]62^{32}[/latex], ou apriximadamente 2,2X10^57. Pelo Princípio da Casa dos Pombos, haverá pelo menos uma - na verdade, várias - combinações de 32 caracteres de 0 a 9 e de A a Z, maiúsculas e minúsculas, que terão a mesma soma MD5 correspondente.


Nem precisamos ir muito longe: um conjunto de 22 caracteres como descrito acima já é suficiente para ultrapassar as 3,4X10^38 combinações possíveis do algorítmo MD5. Se considerarmos, ainda, as sequências com caracteres acentuados e símbolos especiais, esse valor cairá ainda mais!


Portanto, com base nisso, um atacante poderia digita uma senha naquele site que tivesse a mesma soma MD5 armazenada no banco de dados, o que lhe garantiria acesso. Com pouca modificação, essa técnica poderia ser expandida para outros algoritmos que utilizam combinações de caracteres, como SHA. Além disso, já existem vários sites e programas que utilizam ataques de força bruta para descobrir senhas MD5, baseados nesse conceito.


Mas, então, o que fazer para proteger realmente  a senha dos usuários? Uma maneira ideal seria utilizar um verdadeiro algorítimo de criptografia, como RSA, mas essa solução talvez esteja distante da maioria dos nossos webmasters e webdevelopers. Pelo menos, o que consola, é que até agora ninguém conseguiu encontrar duas sequências de caracteres que tenham a mesma soma MD5... ainda.

Comentários

  1. Ótima explicação sobre o MD5 em senhas, parabéns pelo artigo!

    ResponderExcluir
  2. Existem uma solução muito simples para resolver isso, basta não guardar o md5 direto da senha. O certo é guardar o md5 da senha mais uma palavra que só você saiba, somados com um segundo md5.
    Exemplo: Senha 123
    123=202cb962ac59075b964b07152d234b70
    Minha palavra secreta seria: maxixe
    maxixe=2ba40885c990c681fbb1872fc59a5a16
    E o md5 guardado seria soma destes dois md5:
    202cb962ac59075b964b07152d234b70+2ba40885c990c681fbb1872fc59a5a16=ee34c9d4191e2f4c03ba8dedbbee1ea9

    Bastando usar essa lógica para codificar e descodificar o md5 tornando 100% seguro contra esse tipo de ataque, a única maneira de alguém atacar seria ter acesso ao código fonte.

    Esse foi um exemplo simples, mas com criatividade torna se mais complexo, você pode por exemplo pegar apenas 40 caracteres começando do caractere 10, somar com uma outra palavra ou dado e aplicar a função md5 novamente.

    ResponderExcluir
  3. Esta solução corrige o problema quando o atacante possui acesso ao banco, o MD5 roubado para tentar decifrar as possíveis combinações. Porém vale lembrar que se ele possui acesso a isto, tem grandes possibilidades dele também possuir a tal senha, pois ela seria frequentemente usada pelo serviço.

    Além disso ainda não cobriria a quantidade de chaves geradas que são iguais. Usando um campo de senha com limite de 32 caracteres como o exemplificado e calculando pela quantidade dada de possíveis combinações, ainda implicaria em 6,47 x 10^18 combinações possíveis com o mesmo hash MD5 da senha 123.

    Claro que dado um espectro da ordem de 10^58, 10^18 é de uma ordem ridiculamente pequena, porém isto não o torna 100% seguro.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Como acessar configurações avançadas no Sagemcom F@st 2704N

NOVO TUTORIAL: GUIA DEFINITIVO DAS CONFIGURAÇÕES AVANÇADAS DO SAGEMCOM F@ST 2704N!
Atualização 23/01/2015: Alguns problemas apontados e descobertos nesse modem:
1. Alguns usuários relatam dificuldade em salvar alterações na configuração ADSL;
2. Não sei como acessar os logs do modem; mesmo habilitando, eles não aparecem;
3. Se você trocar o DNS do modem, ele voltará ao da Oi ao ser reiniciado;
4. Estou enfrentando alguns problemas sérios de lentidão. Não sei se isso é relacionado ao modem ou a algum dispositivo na minha rede interna.
-----
Os modens da marca Sagemcom estão se tornando muito populares no Brasil, não, quiçá, por sua qualidade, mas porque eles são os atuais queridinhos das operadoras: quando você assina um plano ADSL, geralmente a operadora envia um modem wireless para sua casa a fim de que você possa navegar sem precisar ter gastos extras com esse equipamento. É claro que os equipamentos fornecidos pelas operadoras são básicos, mas saciam as necessidades dos usuários comuns - …

O Guia Definitivo das configurações avançadas no Sagemcom F@st 2704N

Há alguns meses, eu contei minha experiência com o Sagemcom F@st 2704N e tenho recebido diversos comentários sobre suas configurações avançadas. Agora que minhas aulas na faculdade estão acabando, resolvi reservar um tempinho para explorar melhor esse modem que, diga-se de passagem, é muito bom.