Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

HTTPS, MD5 e SHA1

Bom dia!

Minha dúvida se trata sobre a implementação dos métodos de criptografia:

Digamos que eu tenha feito uma API de cadastro e autenticação de usuário, para gerar a chave privada usei um site que gerou o hash em md5 com base numa frase aleatoria, e implementei o hash na função que criptografa a senha do usuario antes de emitir o router.post no sistema.

Quando realizo o teste json para verificar se foi, mostra no json a string de senha encriptada.

Se por acaso alguem conseguisse ver essa string encriptada, conseguiriam fazer engenharia reversa para saber o conteudo encriptado?

Em outras palavras, é possivel que a API de minha aplicação acabe se tornando vulnerável se alguém conseguir por engenharia reversa decriptar a senha a ser enviada ao servidor pelo metodo post?

1 resposta
solução!

Olá, Isaac! Tudo bem?

Há algumas "possíveis" vulnerabilidades no uso de senhas criptografadas com MD5, mas essas possibilidades são extramente improváveis. Não podemos falar que é impossível, porque, principalmente na segurança da informação, não podemos fazer falsas promessas, mas é extremamente difícil.

O primeiro ponto é, não podemos manter essa senha sendo devolvida ao cliente na API, mesmo criptografada. Isso já dificulta absurdamente qualquer tentativa de engenharia reversa.

Mas, mesmo que alguém tenha acesso e tente fazer a engenharia reversa, é complicado pelo seguinte motivo: o MD5 é um algoritmo de direção única (one-way). Resumidamente, o que acontece é que a maneira que o algoritmo funciona permite que múltiplas entradas (inputs) resultem na mesma saída (output), assim, mesmo que você consiga fazer alguma engenharia reversa, não saberá qual é a resposta correta.

Lógico, isso depende também da qualidade da senha. Você pode ver isso acontecer neste site: MD5 conversion and MD5 reverse lookup.

Se você copiar o seguinte hash: 5f4dcc3b5aa765d61d8327deb882cf99, e tentar reverter conseguirá descobrir que o reverso é password. Essa senha é considerada fraca. Agora, se você tentar seu nome: isaacrodrigues, o site não irá retornar nada.

Isso porque uma das formas de "reverter" o MD5 é ter um dicionário de possíveis senhas e seu hash em MD5. Senhas populares, frágeis, geralmente possuem essa falha, pois seus hashes são facilmente descobertos e conhecidos.

Há ainda a opção de um possível invasor tentar utilizar força bruta para encontrar a senha, e aí entram outras questões, como o tempo que se leva para "quebrar" o algoritmo, principalmente quando utilizamos métodos como o bcrypt, que intencionalmente é um processo mais lento, para tomar ainda mais tempo se usado com engenharia reversa.

Tudo que eu disse, é mais alinhado à sua pergunta, e também serve para o SHA-1.

De toda forma, há outros aspectos da criptografia que podem influenciar na decisão de algoritmo, e os pesquisadores estão constantemente avançando e, por consequência, encontrando aspectos inseguros dos métodos disponíveis. Isso aconteceu com o MD5 e com o SHA-1.

Por isso, hoje, a recomendação é optar por métodos como SHA-256, SHA-3 e bcrypt.

Certo? Espero ter ajudado e bons estudos!