Como funciona o MD5?

1. Como funciona o MD5?

-
R45678465

(usa OpenBSD)

Enviado em 27/12/2008 - 16:51h

Tava pensando aqui...

O MD5 é um hash de 32 caracteres, com 16 caracteres diferentes (abcdef0123456789) isso dá: 1208925819614629174706176 combinações.

Mas a quantidade de arquivos diferentes que podem existir é infinita.
Mas a quantidade de MD5 diferentes não é infinita.

Então como que de acordo com o MD5 só existem 1208925819614629174706176 arquivos diferentes?



  


2. Re: Como funciona o MD5?

Denis Doria
thuck

(usa Debian)

Enviado em 27/12/2008 - 22:39h

Bem, o md5 não diz q não pode haver conflito, podem existir dois arquivos com o mesmo hash, mas isso não importa muito, pois a chance é muito baixa de ocorrer.


3. Pense bem!!!

Pedro Paulo Saldanha Rocha
peparocha

(usa Slackware)

Enviado em 27/12/2008 - 22:52h

São 1208925819614629174706176 combinações diferentes para o nome combinado com conteúdo do arquivo e não 1208925819614629174706176 nomes de arquivos diferentes, nem 1208925819614629174706176 conteúdos diferentes.

exemplo:

hash para 1ºarquivo.iso com conteúdo: joguinho de playstation = hk4m3v62...
hash para 2ºarquivo.iso com conteúdo: imagem do Slack = hk4m3v62...

PS: Pode acontecer de você achar dois arquivos diferentes com hashs iguais, mas é 1(uma) chance em 1208925819614629174706176 x2 ou x3 ou x4 ou x5, isso depende da quantidade de arquivos com mesmo hash rs...

[]'s


4. Senhas

-
R45678465

(usa OpenBSD)

Enviado em 28/12/2008 - 00:11h

Então isso quer dizer que a quantidade de conteúdos com o mesmo hash pode ser infinita.

Se podem existir mais de 1 conteúdo com o mesmo hash, então porque as senhas são guardadas em MD5?

Então um usuário pode ter mais de duas senhas em um site que o banco de dados guarda as senhas em MD5?

Digamos que eu tenho uma chance de 1 em 1208925819614629174706176 de ter mais de uma senha no VOL?




5. Re: Como funciona o MD5?

Denis Doria
thuck

(usa Debian)

Enviado em 28/12/2008 - 01:13h

Sim há uma chance... mas qual a importância disso? Considerando que as senhas sejam guardadas no banco de dados em md5, se houver um coincidência isso é completamente irrelevante, agora se vc está preocupado de alguém conseguir usar uma senha qualquer e por coincidência logar, relaxa q isso não vai acontecer. A probabilidade é muito, mas muito baixa...


6. .

-
R45678465

(usa OpenBSD)

Enviado em 28/12/2008 - 14:06h

Sim, eu entendo isso :P
Então MD5 é completamente inseguro.

Pode ser que sua senha tenha 6 caracteres, e pode ser que a duplicata MD5 da sua senha tenha uns 734003200 caracteres.

Tecnicamente, se um banco de dados guarda as senhas em MD5, a pessoa pode ter uma quantidade infinita de senhas, e um bruteforce vai ter mais chances de achar a senha.

Enfim. MD5 não é tão seguro como eu pensava. :D




7. Algoritmo CRAM-MD5 para senhas(Não para arquivos)

Pedro Paulo Saldanha Rocha
peparocha

(usa Slackware)

Enviado em 28/12/2008 - 14:43h

Existe um algoritmo chamado CRAM-MD5 que é usado para senhas. Ele requer um servidor e um cliente. Ele funciona assim:
- Você cadastra a senha no servidor. Ela é armazenada como um array de bytes.
- Quando o cliente precisa se logar no servidor, ele deve fazer o seguinte:
a) O servidor deve gerar um array de bytes aleatório, chamado "challenge". Esse array NUNCA deve se repetir.
b) O cliente recebe o challenge, e com a senha, calcula o valor de keyedMD5 (a função abaixo). A seguir, ele envia esse valor para o servidor.
c) De posse do resultado do valor de keyedMD5, o servidor calcula então ele mesmo o keyedMD5 com o valor do challenge que ele gerou, e da senha que ele tem cadastrada. Se baterem, a senha está correta.


8. O Algorítmo

Pedro Paulo Saldanha Rocha
peparocha

(usa Slackware)

Enviado em 28/12/2008 - 14:49h

1. import java.security.*;
2. import javax.crypto.spec.*;
3. import javax.crypto.*;
4.
5. class CramMD5 {
6.
7. static final char[] HEX = "0123456789abcdef".toCharArray();
8.
9. static String bytesToHex (byte[] bytes) {
10. if (bytes == null) return "";
11. StringBuffer sb = new StringBuffer (2 * bytes.length);
12. for (int i = 0; i < bytes.length; ++i) {
13. sb.append (HEX[(bytes[i]>>4 ) &0xF] );
14. sb.append (HEX[bytes[i] &0xF] );
15. }
16. return sb.toString();
17. }
18.
19. public static byte[] keyedMD5 (byte[] key, byte[] challenge) throws NoSuchAlgorithmException, InvalidKeyException {
20. Mac hmac = Mac.getInstance ("HmacMD5");
21. SecretKey sk = new SecretKeySpec (key, "HmacMD5");
22. hmac.init (sk);
23. byte[] result = hmac.doFinal (challenge);
24. return result;
25. }
26.
27. public static void main(String[] args) throws Exception {
28. byte[] challenge = "<1896.[url="mailto:697170952@postoffice.reston.mci.net"]697170952@postoffice.reston.mci.net[/url]>".getBytes();
29. System.out.println (bytesToHex (keyedMD5 ("tanstaaftanstaaf".getBytes("ISO-8859-1"),
30. challenge)));
31. // deve imprimir b913a602c7eda7a495b4e6e7334d3890
32. }
33. }

Isso se deve combinando todos os fatores como:

-username
-password
-data do login
-hora do login e etc....

portanto, é totalmente "seguro"..... à não ser que você descubra uma forma de quebrar...

espero ter tirado suas dúvidas.... []'s


9. Re: Como funciona o MD5?

Denis Doria
thuck

(usa Debian)

Enviado em 28/12/2008 - 20:59h

Bem tecnicamente um brute force pode "quebrar" qualquer senha, mas o problema é o tempo que leva para ser quebrado.
Imagine o seguinte contexto, vc criou uma criptografia XPTO, vc sabe que leva-se uns 6 meses para que seja quebrada, ou seja, vc sabe que ela será quebrada neste intervalo, isso quer dizer que sua criptografia não é boa? Nem sempre, se sua política de mudar as senhas for de 3 em 3 meses, então vc "nunca" será atacado.
Vc está se apegando a detalhes que não são muito importantes, pois a chance de dois md5 coincidirem é muito baixa, ou seja, se está preocupado com a segurança do seu sistema, esse é o menor dos seus problemas.
Só explicando, coloquei aspas no quebrar porque brute force não quebra as senhas, ele tenta diversas combinações de palavras até encontrar aquela que libera acesso ao sistema, ou seja, é mais fácil alguém usar uma senha ruim do tipo 'user123', 'root','admin', do que tentar quebrar algo criptografado.

Se realmente estiver interessado dê uma olhada em um aplicativo chamado john.


10. .

-
R45678465

(usa OpenBSD)

Enviado em 28/12/2008 - 21:03h

Na verdade, há um tempo eu já tinha usado o John, para os famosos "desafios hackers" em que se usa programação e etc.

Mas não estou preocupado não. É só por curiosidade mesmo.
Mas vou deixar o tópico aberto só pra "discussão mesmo", porque é um tópico bem interessante...


11. Não entendí?!?

Pedro Paulo Saldanha Rocha
peparocha

(usa Slackware)

Enviado em 29/12/2008 - 02:28h

A questão era para senhas ou para arquivos... he he he....

PS: Era a sua dúvida?!?

Tá de Sacanagem!!!!

Tópico bem interessante mesmo...
[]´s


12. Re: Como funciona o MD5?

Vinicus S Moraes
vsmoraes

(usa Arch Linux)

Enviado em 29/12/2008 - 10:38h

Bom, há uns 2 anos eu li uma matéria dizendo que um grupo de Harckers chineses tinham encontrado uma falha crítica no MD5. Eles afirmavam que, modificando alguns bits simples de um arquivo eles conseguiam o hash que desejavam. Não sei o que aconteceu após isso, só sei que muitas empresas que trabalham com segurança começaram a adotar o SHA-1 como padrão.
Além disso, existem sites que tem como propósito criar uma base de dados com todos os valores dos HASHS, sejam MD5 ou qualquer outro, segue um exemplo:
- http://www.milw0rm.com/cracker/info.php

Voltando ao assunto da possibilidade de 2 arquivos (ou senhas) terem o mesmo HASH, mesmo isso sendo matemáticamente possível e provável não significa que possa ou venha a ocorrer. São possibilidades tão remotas que não vale nem a pena fazer muitos cálculos pra isso.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts