Deleu 0 Denunciar post Postado Maio 16, 2011 Notei que a encriptação em MD5 gera um hash de 32 caracteres. Notei também que são apenas números e letras minúsculas, daí pensei: Supondo que a encriptação use os 255 caracteres do teclado e que eu esteja certo sobre os 32 caracteres. Isso nos daria 255^32 combinações de hashs. Tudo bem, é um número grande, mas comparado à infinitas combinações que há no teclado, uma vez que uma senha não, necessariamente, precisa de limite de caracteres. Ao ponto: Existe a possibilidade de 2 senhas distintas gerarem o mesmo hash? Se não, por quê? Ps.: Se formos considerar só letras minúsculas e números, teremos 36^32 combinações. Parece bem pouco para gerar QUALQUER senha possível no planeta (infinito). Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Maio 16, 2011 E uma boa pergunta.. quanto menor o hash, maior a possibilidade de colisão .. Por isso, eu as vezes uso: hash( 'sha512', ... ); ou o Sha normal :P Compartilhar este post Link para o post Compartilhar em outros sites
Deleu 0 Denunciar post Postado Maio 16, 2011 Tava lendo um Fórum estrangeiro, e encontrei soluções de salto, do tipo: <?php $user = $_POST['user']; $pw = $_POST['pw']; $pw = md5($pw.(md5($user)); //OU $pw = sha1(md5($pw).md5($user); //OU $pw = sh1(md5($pw)).sha1(md5($user).$pw); ?> Ou qualquer coisa do tipo. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Maio 16, 2011 Não vejo necessidade em fazer isso, so usar uma criptografia maior, é pronto Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Maio 16, 2011 Até onde eu sei é impossível duas strings distintas gerarem hashes iguais no mesmo algoritimo, afinal os hashes nada mais são do que pura (e bizarra) matemática que quando aplicada à string original resultam em determinada cadeia de caracteres. A questão da colisão levantada pelo Andrey se aplica no quesito comparação, principal mas não exclusivamente, por brute-force, isto é, através da tentativa e erro. E daí sim, quanto mais aprimorado for hash, mais caracteres serão usados. E com isso menores serão as chances de essa colisão ocorrer. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Maio 16, 2011 @Bruno Augusto, eu pra falar verdade, nunca vi uma colisão em um hash md5 não, mais dadas as circustancias, pode existir uma chance minima de uma provavel colisão em uma string, como eu disse: quanto menor o hash, mais chances tem Compartilhar este post Link para o post Compartilhar em outros sites
Deleu 0 Denunciar post Postado Maio 17, 2011 Até onde eu sei é impossível duas strings distintas gerarem hashes iguais no mesmo algoritimo, afinal os hashes nada mais são do que pura (e bizarra) matemática que quando aplicada à string original resultam em determinada cadeia de caracteres. Então, é exatamente isso que, para mim, não faz, matemáticamente, sentido. Se você possui um número limitado de possibilidades de Hashs (no caso do MD5 36^32), você necessariamente precisará de strings distintas gerando o mesmo hash. Mesmo que 36^32 seja um número extremamente grande, não é suficiente para armazenar infinitas strings. Não precisamos nem ir no infinito, vamos ficar apenas com os 255 caracteres do teclado. Agora supondo que a função MD5 exija uma String menor do que 250 caracteres. Calculando, então, temos que: Π^{250}_{k=1} 255^k são as possibilidades de Strings diferentes para entregar ao MD5. Se ele possui apenas 36^32 hashs, como é que ele vai criar Π^{250}_{k=1} 255^k hashs diferentes? Daí a gente cai no princípio da casa de pombo que diz que se k pombos devem ser postos em n casas de pombos e k > n, então pelo menos 1 casa terá mais de 1 pombo. Na linguagem da função: Se 36^32 são as possibilidades de hashs (casas de pombos); E Π^{250}_{k=1} 255^k Strings são as possibilidades de Strings do teclado (pombos); Então pelo menos 1 ou mais casas de pombos terá mais de 1 pombo. Lembrete que estamos limitando a função MD5 para fazer hashs apenas de strings menores do que 250 caracteres, o que não acredito que seja limitado. Enfim, não faz sentido Strings diferentes não poderem gerar hashs iguais. Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Maio 17, 2011 Claro que existe... há sites sobre como explorar tal problema. MD5 collision - http://www.google.com.br/search?q=md5+colision Todo algoritmo de criptografia é seguro, até que se prove o contrário. Compartilhar este post Link para o post Compartilhar em outros sites
Luiz Henrique 1 Denunciar post Postado Maio 17, 2011 No meu ponto de vista o MD5 serve apenas para que as pessoas que tenham acesso ao banco de dados não saibam qual é a senha gravada, fora isso para que serve? Se a segurança tem que ser feita na consulta, logo não importa se há possibilidade de gerar igual ou não, e caso gere basta fazer uma consulta buscando alguma igual se tiver retorna solicitando que informe novos dados, e problema resolvido. Mas se alguém conseguir encontrar 2 igual com informações diferentes, compartilhe pois seria incrível, é mais fácil ganhar na sena do que conseguir um resultado desses acredito, rsrs.. Abs. Compartilhar este post Link para o post Compartilhar em outros sites
Deleu 0 Denunciar post Postado Maio 17, 2011 Então, é exatamente por isso que no outro Fórum, a sugestão que encontrei foi gerar um hash usando login e senha. E sim, a probabilidade de ganhar na loteria possui 8 dígitos (50 milhões). 36^32 possui 57 dígitos e o produtório das permutações de 255 caracteres para 250 posições, acredito que seja milhões de vezes maior do que 1 Google. Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Maio 17, 2011 No meu ponto de vista o MD5 serve apenas para que as pessoas que tenham acesso ao banco de dados não saibam qual é a senha gravada, fora isso para que serve? Imagina que você desenvolveu um sistema grande e gostaria de oferecer um meio simples de o próprio usuário, muitas vezes leigo, possa atualizar o sistema, a grosso modo, como o WordPress. Mas como saber que dado arquivo precisa de atualização ou não? Você tem várias possibilidades de comparação mas a mais simples (e talvez a mais eficaz) é um hash. O usuário ao executar a ferramenta de Update, envia para o servidor provedor das atualizações um apanhado de hashses, de cada arquivo do sistema. Você, no servidor provedor computa a diferença entre os hashes recebidos com os hashes dos arquivos da cópia mais atualizada, que você mantém segura no seu servidor. Essa lista é devolvida ao usuário e o próprio Updater gera uma tabela com os nomes dos arquivos que necessitam de atualização e oferecem um link para que a mesma seja feita, conectando de volta ao servidor provedor, copiando arquivo, efetuando um backup do arquuivo a ser substituído e, por fim, substituí-lo. Ufa! :P A propósito Deleu, use o botão Responder azul ou a Resposta Rápida (essa caixinha abaixo dos posts), assim você não cita as outras respostas desnecessariamente. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
ro.fonseca 1 Denunciar post Postado Maio 18, 2011 1 - Claro que existe... há sites sobre como explorar tal problema. MD5 collision - http://www.google.com.br/search?q=md5+colision 2- Todo algoritmo de criptografia é seguro, até que se prove o contrário. Eu achei meio contraditorio essas tuas 2 afirmações... E segundo o proprio wikipedia, é possivel sim que duas senhas distintas gerem o mesmo hash. Como o MD5 faz apenas uma passagem sobre os dados, se dois prefixos com o mesmo hash forem construídos, um sufixo comum pode ser adicionado a ambos para tornar uma colisão mais provável. Deste modo é possível que duas strings diferentes produzam o mesmo hash. O que não garante que a partir de uma senha criptografada específica consiga-se a senha original, mas permite uma possibilidade de decifrar algumas senhas a partir de um conjunto grande de senhas criptografadas. Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Maio 18, 2011 1 - Claro que existe... há sites sobre como explorar tal problema. MD5 collision - http://www.google.com.br/search?q=md5+colision 2- Todo algoritmo de criptografia é seguro, até que se prove o contrário. Eu achei meio contraditorio essas tuas 2 afirmações... E segundo o proprio wikipedia, é possivel sim que duas senhas distintas gerem o mesmo hash. ??? Pergunta original do tópico: Ao ponto: Existe a possibilidade de 2 senhas distintas gerarem o mesmo hash? Se não, por quê? Resposta: Claro que existe... há sites sobre como explorar tal problema. Todo algoritmo de criptografia é seguro, até que se prove o contrário. O que há de contraditório exatamente? Compartilhar este post Link para o post Compartilhar em outros sites
ro.fonseca 1 Denunciar post Postado Maio 18, 2011 Prog, tu mesmo afirmou que é possivel haver um mesmo hash para senhas distintas, depois tu afirma que toda senha criptografada é segura, tu tas, mesmo que indiretamente se contradizendo nao?? Pois a partir do momento que mesmo que com senhas diferentes você consiga gerar um mesmo hash, a segurança da senha criptografada vai pro espaço... Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Maio 18, 2011 Isto é um jargão popular, tipo: "Todos são inocentes, até que se prove o contrário" Logo: "Todo algoritmo de criptografia é seguro, até que se prove o contrário" Não passa de uma brincadeira, além de não ser contraditório ao que já foi colocado. Compartilhar este post Link para o post Compartilhar em outros sites