É possível descriptografar hashes MD5?

260

Alguém me disse que viu sistemas de software que:

  1. recuperar senhas criptografadas MD5 de outros sistemas;
  2. descriptografar as senhas criptografadas e
  3. armazene as senhas no banco de dados do sistema usando o próprio algoritmo do sistema.

Isso é possível? Eu pensei que não era possível / viável descriptografar hashes MD5.

Eu sei que existem dicionários MD5, mas existe um algoritmo de descriptografia real?

John Bubriski
fonte
7
A reversão do MD5 também produziria várias senhas.
Carles Company
231
MD5 é um algoritmo de resumo. Pense nisso como converter uma vaca em um bife. Agora tente reverter isso.
Caracol mecânico
5
@ Pelo que entendi, sim, mas apenas se você tiver MUITAS delas. E mesmo se você o fizesse, não seria capaz de reverter, porque o algoritmo propositalmente perde informações.
Jordânia
8
Dada a analogia, é possível fazer um clone perfeito e perfeito do DNA do bife. :))
Trimikha Valentius
8
@TrimikhaValentius MD5 é um algoritmo digestivo. Pense nisso como comer bife> digestão> saída. Agora tente reverter isso.
user4157124

Respostas:

424

Não. O MD5 não é criptografia (embora possa ser usado como parte de alguns algoritmos de criptografia), é uma função de hash unidirecional . Muitos dos dados originais são realmente "perdidos" como parte da transformação.

Pense nisso: um MD5 sempre tem 128 bits. Isso significa que existem 2 128 possíveis hashes MD5. Esse é um número razoavelmente grande e, no entanto, é definitivamente finito. E, no entanto, há um número infinito de entradas possíveis para uma determinada função de hash (e a maioria delas contém mais de 128 bits ou apenas 16 bytes). Portanto, há realmente um número infinito de possibilidades para dados que teriam o mesmo valor de hash. O que torna os hashes interessantes é que é incrivelmente difícil encontrar dois dados com o mesmo valor e as chances de isso acontecer por acidente são quase 0.

Um exemplo simples para uma função hash (muito insegura) (e isso ilustra a idéia geral de ser unidirecional) seria pegar todos os bits de um pedaço de dados e tratá-lo como um grande número. Em seguida, execute a divisão inteira usando um número grande (provavelmente primo) n e pegue o restante (consulte: Módulo ). Você ficará com um número entre 0 e n . Se você executasse o mesmo cálculo novamente (a qualquer momento, em qualquer computador, em qualquer lugar), usando exatamente a mesma string, o mesmo valor será gerado. E, no entanto, não há como descobrir qual era o valor original, pois há um número infinito de números com o restante exato, quando dividido por n .

Dito isto, verificou-se que o MD5 apresenta alguns pontos fracos, de modo que, com algumas matemáticas complexas, pode ser possível encontrar uma colisão sem experimentar 2 128 sequências de entrada possíveis. E o fato de a maioria das senhas serem curtas e as pessoas geralmente usarem valores comuns (como "senha" ou "segredo") significa que, em alguns casos, você pode adivinhar razoavelmente a senha de alguém pesquisando no hash no Google ou usando um Rainbow mesa . Essa é uma razão pela qual você deve sempre " sal " hash de senhas, de modo que dois valores idênticos, quando hash, não vai hash para o mesmo valor.

Depois que um dado é executado através de uma função hash, não há como voltar atrás.

Adam Batkin
fonte
22
no entanto, há mais colisões do que se pensava no espaço de hash MD5. Não é mais considerado ideal como o melhor hash para senhas.
Cheeso
12
Como a maioria das senhas é menor que o hash MD5, geralmente há apenas uma senha para cada hash. (E encontrar uma, mesmo que não seja a original, é suficiente para acessar a conta.) O objetivo de ser uma função unidirecional não é a existência de várias pré-imagens diferentes, portanto não podemos saber qual era a original. , mas é realmente difícil encontrar até um valor original .
Pa Elo Ebermann
2
@ Nick: Na verdade, RFC1321 diz explicitamente: "O algoritmo toma como entrada uma mensagem de comprimento arbitrário"
Adam Batkin
6
@ Olathe - Não sei se concordo. Dado um hash, geralmente é impossível determinar (com 100% de certeza) a entrada original. Há (geralmente) um número infinito de entradas que produzem todas as saídas possíveis (com hash). Eu disse geralmente porque, se você sabe (por exemplo) que está procurando uma sequência de caracteres ASCII e é menor que, digamos, 12 bytes, é provável que exista apenas uma entrada que produza uma determinada saída. Mas há sempre vai ser colisões (infinitas), ea menos que você tenha alguma restrição externa (como no meu exemplo) você nunca vai saber o que é certo
Adam Batkin
2
@ Adam Batkin, você está certo, mas não quero dizer 100% de certeza. A quebra de cifra não pode ser feita com 100% de certeza. O remetente pode ter significado texto sem sentido aleatório em vez de texto em inglês usando a mesma chave que descriptografa outros textos em inglês, mas a probabilidade do inglês é muito próxima de 100%. Da mesma forma, ao escolher entre uma senha longa do poema UTF-8 japonês e seqüências de caracteres sem sentido, a probabilidade do poema é próxima de 100%. Isso pode ser feito usando probabilidades posteriores ao fato, em vez de restrições pré-definidas. Obviamente, isso não pode ser feito em geral, mas ainda é bastante útil.
Olathe
154

Você não pode - em teoria. O ponto principal de um hash é que é apenas uma maneira. Isso significa que, se alguém conseguir obter a lista de hashes, ainda não conseguirá sua senha. Além disso, significa que, mesmo que alguém use a mesma senha em vários sites (sim, todos sabemos que não devemos, mas ...) qualquer pessoa com acesso ao banco de dados do site A não poderá usar a senha do usuário em site B.

O fato de o MD5 ser um hash também significa que ele perde informações. Para qualquer hash MD5, se você permitir senhas de tamanho arbitrário, poderá haver várias senhas que produzam o mesmo hash. Para um bom hash, seria inviável computacionalmente encontrá-los além de um comprimento máximo bastante trivial, mas significa que não há garantia de que, se você encontrar uma senha com o hash de destino, é definitivamente a senha original. É astronomicamente improvável que você veja duas senhas de tamanho razoável, apenas ASCII, com o mesmo hash MD5, mas isso não é impossível.

O MD5 é um hash incorreto para usar em senhas:

  • É rápido, o que significa que se você tiver um hash "alvo", é barato tentar muitas senhas e verificar se é possível encontrar uma que combine com esse destino. A salga não ajuda nesse cenário, mas ajuda a tornar mais caro tentar encontrar uma senha correspondente a qualquer um dos vários hashes usando sais diferentes.
  • Acredito que ele possui falhas que facilitam a localização de colisões, embora encontrar colisões dentro de texto imprimível (em vez de dados binários arbitrários) seria pelo menos mais difícil.

Não sou especialista em segurança, portanto, não farei uma recomendação concreta além de "Não role seu próprio sistema de autenticação". Encontre um de um fornecedor respeitável e use-o. Tanto o design quanto a implementação de sistemas de segurança são um negócio complicado.

Jon Skeet
fonte
2
Sim, existem outros métodos, mas você precisa entender o que Jon disse acima - 'você não deve enviar a senha deles por e-mail - são informações confidenciais que podem permanecer confidenciais'. - no nível mais baixo, os emails podem ser interceptados e as informações confidenciais podem ser recuperadas. Uma senha deve permanecer o mais segura possível - geralmente mantendo-a como hash apenas em um banco de dados.
305/09/09 Daniel
3
E também o fato de que, se a senha puder ser revertida, significa que qualquer pessoa que tenha acesso ao seu banco de dados poderá obter as senhas dos usuários. Não é uma boa ideia. Senhas de sentido único devem ser a norma; mantenha apenas a senha real (mesmo criptografada) se for absolutamente necessário (por exemplo, para se autenticar com outro sistema que não tenha nada baseado em token).
23909 Jon Skeet
1
Eu já vi medidas antispam em que o servidor web do destinatário nega um e-mail recebido apenas para esperar o servidor de e-mail do remetente tentar novamente (spambots geralmente apenas tentam uma vez). Isso pode facilmente exceder o tempo limite de 10 minutos.
sisve 24/09/09
1
@ravisoni: Isso é encontrar um valor que tenha o mesmo hash, presumivelmente via força bruta ou tabelas de pesquisa. Não há garantia de que seja o valor original do texto sem formatação.
precisa saber é o seguinte
5
@ravisoni: O que você quer dizer com "certo" aqui? Se a senha for desconhecida, você não poderá saber se a revelada é a original ou não. Mas o ponto é que hashes unidirecionais, como o MD5, por definição, perdem informações. O fato de sites como esse apresentarem uma senha correspondente é apenas uma boa evidência do MD5 ser um algoritmo ruim para uso por razões de segurança.
precisa
52

Tecnicamente, é 'possível' , mas sob condições muito rígidas ( tabelas arco-íris , força bruta com base na possibilidade muito pequena de que a senha de um usuário esteja nesse banco de dados de hash).

Mas isso não significa que é

  • Viável
    ou
  • Seguro

Você não deseja 'reverter' um hash MD5 . Usando os métodos descritos abaixo, você nunca precisará. 'Reversão' MD5 é realmente considerado malicioso - alguns sites oferecem a capacidade de 'quebrar' e bruteforce MD5 hashes - mas tudo o que são são bancos de dados maciços contendo palavras de dicionário, senhas enviadas anteriormente e outras palavras. Há uma chance muito pequena de que o hash MD5 seja revertido. E se você salgou o hash MD5 - isso também não funcionará! :)


A maneira como logins com o hash MD5 devem funcionar é:

Durante o registro: o
usuário cria uma senha -> a senha é hash usando MD5 -> Hash armazenado no banco de dados

Durante o logon: o
usuário digita o nome de usuário e a senha -> (nome de usuário marcado) A senha é hash usando MD5 -> o hash é comparado com o hash armazenado no banco de dados

Quando 'Senha perdida' é necessária:

2 opções:

  • O usuário enviou uma senha aleatória para efetuar login e, em seguida, recebe um bug para alterá-la no primeiro login.

ou

  • O usuário recebe um link para alterar sua senha (com verificação extra se você tiver uma pergunta de segurança / etc) e, em seguida, a nova senha é hash e substituída pela senha antiga no banco de dados
Daniel May
fonte
1
Eu tenho alguns detalhes. Mesas de arco-íris não são forçantes brutas. Na verdade, existem programas e sites que fornecem senhas de força bruta (muito simples) de alguns caracteres (geralmente elas são repetidas por algumas horas ou dias, e você pode preencher um hash e torcer para que ele apareça no loop). E, infelizmente, dada a falta de qualidade de muitas senhas, a chance de uma aparecer não é "uma chance muito pequena".
Maarten Bodewes
32

Não diretamente. Por causa do princípio do pigeonhole , há (provavelmente) mais de um valor que corresponde a qualquer saída MD5. Como tal, você não pode revertê-lo com certeza. Além disso, o MD5 foi criado para dificultar a localização de um hash invertido (no entanto, houve ataques que produzem colisões - ou seja, produzem dois valores que resultam em hash para o mesmo resultado, mas você não pode controlar qual será o valor MD5 resultante estar).

No entanto, se você restringir o espaço de pesquisa a, por exemplo, senhas comuns com comprimento abaixo de N, poderá não ter mais a propriedade irreversibilidade (porque o número de saídas MD5 é muito maior que o número de seqüências de caracteres no domínio de interesse). Em seguida, você pode usar uma tabela arco - íris ou semelhante para reverter hashes.

bdonlan
fonte
1
Eu acrescentaria que encontrar outro valor com hashes na mesma saída é chamado de "colisão". Este é o método mais comum de quebrar sistemas com hash MD5.
6269 Nicole
5
@ Renesis, encontrar dados que correspondam a um valor conhecido anteriormente é chamado de "pré-imagem", na verdade, e é muito, muito mais difícil do que apenas uma colisão. Ainda não foi demonstrado nenhum ataque de pré-imagem contra o MD5, mas foram usados ​​ataques de colisão.
bdonlan
O ponto das funções de hash (quando usado para armazenamento de senhas) não é que existam muitas senhas possíveis que fornecem o mesmo hash (existem, mas a maioria delas são mais longas que o próprio hash), mas é difícil encontrar até um deles (o que seria suficiente para acessar o sistema). E sim, por causa das tabelas do arco-íris, você não usa hashes sem sal. E por causa do pequeno espaço senha, você vai usar um hash lento (como bcrypt ou Scrypt) em vez de um rápido (como MD5 / SHA - * / ....)
Paulo Ebermann
1
Para ser técnico, você não pode executar o MD5 com certeza, porque o hardware pode ter funcionado mal. Da mesma forma, você pode não ter certeza de que a senha era passwordmais do que todas as outras entradas infinitas que produzem o mesmo hash, mas que parecem aleatórias, mas você pode estar perto o suficiente.
Olathe
O princípio do pigeonhole se aplica, é claro, mas ainda é inviável em termos computacionais encontrar uma segunda entrada com hashes para um determinado valor, por exemplo, um hash sobre uma senha normal. Se você encontrar um X que corresponde a um determinado H (X), pode ter certeza de que X é a entrada correta. Isso torna toda a primeira seção desta resposta e a maior parte do restante incorreta.
Maarten Bodewes
13

Não é possível, pelo menos não em um período de tempo razoável.

A maneira como isso geralmente é tratado é uma senha "redefinida". Ou seja, você fornece a eles uma nova senha (aleatória) e a envia por email.

Matthew Groves
fonte
5
Se o hash não era salgada, você ficaria surpreso quantas vezes tudo que toma é uma pesquisa no Google para o valor hash ...
Michael Borgwardt
1
Não é realmente prático para um sistema de recuperação de senha que, mesmo um sem sal :)
Matthew Groves
12

Você não pode reverter uma senha md5. (Em qualquer idioma)

Mas você pode:

dê ao usuário um novo.

verifique em alguma tabela do arco-íris para talvez recuperar a antiga.

Nettogrof
fonte
1
Nix a idéia da mesa do arco-íris. Se você está salgando - e deveria estar - então não funcionaria, de qualquer maneira.
Steven Sudit 24/09/09
1
@StevenSudit Se eles ainda estiverem usando MD5 para senhas de hash, em vez de usar um hash de senha forte, não será possível supor que eles estejam usando um salt. Talvez eles façam, provavelmente não.
Maarten Bodewes
10

Não, ele deve ter ficado confuso sobre os dicionários do MD5.

Os hashes criptográficos (MD5, etc ...) são uma maneira e você não pode voltar à mensagem original apenas com o resumo, a menos que tenha outras informações sobre a mensagem original, etc., que não deveria.

Robert Greiner
fonte
8

Descriptografia (obtendo diretamente o texto sem formatação do valor do hash, de maneira algorítmica), não.

No entanto, existem métodos que usam o que é conhecido como tabela arco - íris . É bem possível se suas senhas forem hash sem sal.

Sinan Taifour
fonte
7

MD5 é um algoritmo de hash, você não pode reverter o valor do hash.

Você deve adicionar "recurso de alteração de senha", onde o usuário fornece outra senha, calcula o hash e armazena-o como uma nova senha.

Svetlozar Angelov
fonte
7

Não há maneira fácil de fazer isso. Esse é o tipo de hash da senha em primeiro lugar. :)

Uma coisa que você deveria poder fazer é definir uma senha temporária para eles manualmente e enviá-los.

Hesito em mencionar isso porque é uma má idéia (e não é garantido que funcione de qualquer maneira), mas você pode tentar procurar o hash em uma tabela arco-íris como milw0rm para ver se é possível recuperar a senha antiga dessa maneira.

Bill the Lizard
fonte
6

Veja todas as outras respostas aqui sobre como e por que não é reversível e por que você não gostaria de fazê-lo.

Para completar, existem tabelas de arco-íris nas quais você pode procurar possíveis correspondências. Não há garantia de que a resposta na tabela arco-íris seja a senha original escolhida pelo usuário, o que os confundirá bastante.

Além disso, isso não funcionará para hashes salgados. A salga é recomendada por muitos especialistas em segurança.

Dinah
fonte
Incorreto . Se uma correspondência for encontrada, é certo que será a senha original. Se não fosse esse o caso, seria possível gerar colisões com qualquer H (X) em que X é uma mensagem sem uma estrutura predefinida determinada pelo adversário. É inviável computacionalmente encontrar uma colisão para uma função de hash criptograficamente segura, mesmo que seja uma função de hash quebrada, como MD5.
Maarten Bodewes
@MaartenBodewes: "Se uma correspondência for encontrada, é certo que será a senha original." Não vejo como é esse o caso, se assumirmos comprimentos ilimitados de senhas. Eu diria que é extremamente provável que seja a senha original, mas não precisa ser. O fato de haver mais senhas possíveis do que os hashes MD5 significa que deve haver duas senhas com o mesmo hash. Só porque é inviável computacionalmente encontrar essas colisões não significa que elas não existem. Ou eu te entendi mal?
Jon Skeet
@JonSkeet Se for computacionalmente inviável encontrar uma colisão de propósito , encontrar uma por acaso é igualmente improvável ou pior. Devido ao espaço limitado de saída do MD5 e ao problema de aniversário, a chance de encontrar uma colisão é de cerca de 1 em 2 ^ 64 (ou seja, cerca de metade do espaço de saída) - e isso depois de corresponder cerca de 2 ^ 64 hashes. E isso nem sequer considera que a mensagem provavelmente precise ser pequena e ter um formato específico para ser considerado uma senha. A maioria das senhas tem uma entropia consideravelmente abaixo de 2 ^ 64 bits.
Maarten Bodewes
1
@MaartenBodewes: Mas há uma grande diferença entre "astronomicamente improvável" e "impossível". Sua declaração sobre ter certeza de que é a senha correta é excessivamente forte, IMO. Isso sugere uma certeza matemática que não está presente.
Jon Skeet
Você também pode adivinhar uma chave AES de 2 ^ 128 bits de uma só vez. É "apenas" extremamente improvável. A criptografia depende desse tipo de probabilidade. Para todos os fins práticos, se você encontrar uma mensagem / senha de entrada, será a que estava procurando. É teoricamente possível encontrar outra mensagem de entrada, mas para esta questão no StackOverflow não há necessidade de considerá-la. E as tabelas arco-íris são preenchidas apenas com senhas possíveis. Eles não conterão dados suficientes para que haja chance de colisão (eles sobrescreveriam o mapeamento sem saber ou ficariam famosos).
Maarten Bodewes
4

Não há como "reverter" uma função hash em termos de encontrar a função inversa para ela. Como mencionado anteriormente, esse é o objetivo de ter uma função hash. Não deve ser reversível e deve permitir um cálculo rápido do valor do hash. Portanto, a única maneira de encontrar uma sequência de entrada que produz um determinado valor de hash é experimentar todas as combinações possíveis. Isso é chamado ataque de força bruta por esse motivo.

Tentar todas as combinações possíveis leva muito tempo e esse também é o motivo pelo qual os valores de hash são usados ​​para armazenar senhas de maneira relativamente segura. Se um invasor puder acessar seu banco de dados com todas as senhas de usuário existentes, você perderá em qualquer caso. Se você tiver valores de hash e senhas fortes (idealisticamente), será muito mais difícil obter as senhas dos valores de hash do invasor.

Armazenar os valores de hash também não é um problema de desempenho porque a computação do valor de hash é relativamente rápida. Portanto, o que a maioria dos sistemas faz é calcular o valor do hash da senha digitada pelo usuário (o que é rápido) e compará-lo ao valor do hash armazenado no banco de dados do usuário.

Kage
fonte
Não há nada de errado com essa resposta, exceto que a velocidade da função hash é um problema, pois a maioria das senhas não é suficientemente segura e permite que um adversário execute um ataque de dicionário. Por esse motivo, funções de hash de senha lenta são usadas em vez de funções de hash criptograficamente seguras rápidas.
Maarten Bodewes
3

O MD5 é considerado quebrado, não porque você pode recuperar o conteúdo original do hash, mas porque, com o trabalho, você pode criar duas mensagens com o mesmo hash.

Você não pode remover o hash do MD5.

Ned Batchelder
fonte
3
Por design, todos os hashes do mesmo comprimento sofrem colisões. É inevitável ao restringir dados de tamanho variável. O MD5 é considerado obsoleto por sua taxa de colisões, não pelo fato de colidir.
Jonathan Lonowski
O MD5 é considerado quebrado devido à possibilidade comprovada de construir entradas que colidem.
Ned Batchelder
3

Você pode encontrar ferramentas online que usam um dicionário para recuperar a mensagem original.

Em alguns casos, o método do dicionário pode ser apenas inútil:

  • se a mensagem estiver em hash usando uma mensagem SALT
  • se a mensagem tiver hash mais de uma vez

Por exemplo, aqui está uma ferramenta on-line do decodificador MD5 .

davitz38
fonte
As tabelas do arco-íris - não ataques de dicionário - são inúteis se um sal for usado. Hashing mais de uma vez - sem sal - ainda permite tabelas arco-íris, apesar de encontrar uma online pré-existente ser certamente menos provável.
Maarten Bodewes
2

A única coisa que pode funcionar é (se mencionarmos que as senhas são apenas hash, sem adicionar nenhum tipo de sal para impedir os ataques de repetição, se é assim que você precisa conhecer o sal), a propósito, obtenha uma ferramenta de ataque de dicionário , os arquivos de muitas palavras, números etc. criam duas linhas, uma linha é palavra, número (no dicionário) e a outra é hash da palavra, e compara os hashes se corresponder.

esse é o único caminho, sem entrar na criptoanálise.

Berkay
fonte
2

Sim, exatamente o que você está pedindo é possível. Não é possível 'descriptografar' uma senha MD5 sem ajuda, mas é possível criptografar novamente uma senha MD5 em outro algoritmo, mas nem todos de uma só vez.

O que você faz é organizar para que seus usuários possam efetuar logon no seu novo sistema usando a senha antiga do MD5. No momento em que eles acessam, eles dão ao seu programa de login uma remoção versão com senha da senha que você prova que corresponde ao hash MD5 que você possui. Em seguida, você pode converter essa senha unificada para seu novo algoritmo de hash.

Obviamente, esse é um processo estendido porque você precisa esperar que seus usuários digam quais são as senhas, mas funciona.

(NB: sete anos depois, espero que alguém ache útil)

user3710044
fonte
Obrigado pela resposta. No entanto, eu vou "dar um up" em você :) Não me lembro se realmente fiz isso, mas em teoria deve funcionar. Em vez de esperar que cada usuário faça login para que possamos criptografar novamente sua senha, você pode simplesmente criptografar a versão em hash da senha. Portanto, toda senha será hash MD5 e depois criptografada. Atualizei a verificação de senha para fazer o mesmo e os dados do usuário devem estar seguros sem a necessidade de intervenção do usuário.
John Bubriski
Mais uma ressalva ao meu comentário acima. Não sou especialista em criptografia, por isso não tenho certeza se existem outras implicações de segurança. Por exemplo, criptografar senhas fracas com pouco hash antes de serem criptografadas pode comprometer a segurança da criptografia (talvez use outro sal também?). Além disso, você pode ter backups flutuando com essas senhas com hash MD5. Provavelmente, é melhor fazer uma invalidação completa de todas as senhas existentes ao fazer esse tipo de atualização.
John Bubriski
Os criptografadores se preocupam com a criptografia dupla, mas acho que eles só encontraram casos triviais em que isso é um problema. Mas não acho que seja útil nesse caso, porque o MD5 ainda é seguro para senhas (não muito longas, em texto). Ainda assim, o hash duplo poderia ser útil se o desenvolvedor anterior esquecesse de adicionar sal; caso contrário, não consigo pensar em um caso em que você não precisaria dizer a todos que as senhas devem ser consideradas como pwned. Felizmente, seus backups não se perdem e são criptografados de qualquer maneira.
user3710044
1

Não, isso não pode ser feito. Você pode usar um dicionário ou tentar usar hash de valores diferentes até obter o hash que está procurando. Mas não pode ser "descriptografado".

Vilx-
fonte
Eu vi este site que inverte o MD5 no texto original: MD5.gromweb.com . Como é possível então?
Sama 20/04
2
@ samach321 - Fácil: eles têm um banco de dados de strings hash. Tudo o que você digita na caixa "Converter uma sequência em um hash MD5" é adicionado ao banco de dados. Tente obter um hash MD5 de outra fonte e insira-o. A menos que seja algo que esteja no banco de dados deles, você não obterá resultado.
Vilx-
1

O MD5 tem suas fraquezas (consulte a Wikipedia ), então existem alguns projetos que tentam precompilar Hashes. A Wikipedia também sugere alguns desses projetos. Um que eu conheço (e respeito) é ophrack. Você não pode dizer ao usuário sua própria senha, mas pode ser capaz de dizer uma senha que funcione. Mas eu acho: basta enviar uma nova senha por e-mail, caso eles se esqueçam.

dz.
fonte
O fato de o MD5 estar quebrado (para usos específicos, mas importantes da função) não tem absolutamente nada a ver com tabelas arco-íris (que é o que você sugere quando menciona a pré-computação de hashes).
Maarten Bodewes
1

O algoritmo MD5 Hash não é reversível, portanto, a decodificação MD5 não é possível, mas alguns sites têm um conjunto em massa de correspondência de senha, para que você possa tentar on-line para decodificar o hash MD5.

Experimente on-line:

Descriptografia MD5

md5online

md5decrypter

Girish Patidar
fonte
Sim, mas isso já está coberto pela pergunta, como na frase "Eu sei que existem dicionários". Apenas apontar os dicionários, portanto, não conta como resposta.
Maarten Bodewes
1

Em teoria , não é possível descriptografar um valor de hash, mas você tem algumas técnicas sujas para recuperar o texto sem formatação original.

  1. Força bruta : todos os algoritmos de segurança de computadores sofrem força bruta . Com base nessa idéia, a GPU de hoje emprega a idéia de programação paralela, usando a qual ela pode recuperar o texto sem formatação, forçando-a massivamente usando qualquer processador gráfico. Esta ferramenta hashcat faz esse trabalho. A última vez que verifiquei o cuda versão , fui capaz de forçar um personagem de 7 letras em seis minutos.
  2. Pesquisa na Internet : copie e cole o hash no Google e veja Se você pode encontrar o texto simples correspondente lá. Esta não é uma solução quando você está pentestando algo, mas definitivamente vale a pena tentar. Alguns sites mantêm o hash para quase todas as palavras do dicionário.
vikkyhacks
fonte
2
Os ataques de dicionário são outra maneira, ou em comparação com outros bancos de dados para os quais você conhece as senhas de entrada.
Maarten Bodewes
1

Não, não é possível reverter uma função de hash como MD5: dado o valor do hash de saída, é impossível encontrar a mensagem de entrada, a menos que sejam conhecidas informações suficientes sobre a mensagem de entrada.

A descriptografia não é uma função definida para uma função de hash; criptografia e descriptografia são funções de uma cifra como AES no modo CBC; funções de hash não criptografam nem descriptografam . As funções de hash são usadas para digerir uma mensagem de entrada. Como o nome indica, não há algoritmo reverso possível por design .


O MD5 foi projetado como uma função de hash criptograficamente segura e unidirecional . Agora é fácil gerar colisões para o MD5 - mesmo que grande parte da mensagem de entrada seja predeterminada. Portanto, o MD5 é oficialmente quebrado e o MD5 não deve mais ser considerado um hash criptograficamente seguro. No entanto, ainda é impossível encontrar uma mensagem de entrada que leve a um valor de hash: encontre X quando apenas H (X) for conhecido (e X não tiver uma estrutura pré-calculada com pelo menos um bloco de 128 bytes de dados pré-computados) . Não há ataques de pré-imagem conhecidos contra o MD5.

Também é geralmente possível adivinhar senhas usando ataques de força bruta ou de dicionário (aumentado), comparar bancos de dados ou tentar encontrar hashes de senhas nas chamadas tabelas arco-íris. Se uma correspondência for encontrada, é computacionalmente certo que a entrada foi encontrada. As funções de hash também são seguras contra ataques de colisão: encontrar de X'forma H(X') = H(X)determinada H(X). Portanto, se um Xfor encontrado, é computacionalmente certo de que foi realmente a mensagem de entrada. Caso contrário, você teria realizado um ataque de colisão, afinal. As tabelas Rainbow podem ser usadas para acelerar os ataques e existem recursos especializados da Internet que o ajudarão a encontrar uma senha com um hash específico.

Obviamente, é possível reutilizar o valor de hashH(X) para verificar senhas que foram geradas em outros sistemas. A única coisa que o sistema receptor precisa fazer é armazenar o resultado de uma função determinística Fque recebe H(X)como entrada. Quando Xé fornecido ao sistema H(X), Fpode ser recalculado e, portanto, comparado com os resultados. Em outras palavras, não é necessário descriptografar o valor do hash para apenas verificar se uma senha está correta e você ainda pode armazenar o hash como um valor diferente.


Em vez do MD5, é importante usar um hash de senha ou PBKDF (função de derivação de chave baseada em senha). Essa função especifica como usar um sal junto com um hash. Dessa forma, hashes idênticos não serão gerados para senhas idênticas (de outros usuários ou dentro de outros bancos de dados). Os hashes de senha por esse motivo também não permitem o uso de tabelas arco-íris, desde que o sal seja grande o suficiente e seja randomizado adequadamente.

Os hashes de senha também contêm um fator de trabalho (às vezes configurado usando uma contagem de iterações ) que pode desacelerar significativamente os ataques que tentam encontrar a senha com base no valor de sal e hash. Isso é importante, pois o banco de dados com sais e valores de hash pode ser roubado. Finalmente, o hash da senha também pode ter memória insuficiente, de modo que uma quantidade significativa de memória é necessária para calcular o hash. Isso torna impossível o uso de hardware especial (GPU, ASIC, FPGA etc.) para permitir que um invasor acelere a pesquisa. Outras entradas ou opções de configuração, como uma pimenta ou a quantidade de paralelismo, também podem estar disponíveis para um hash de senha.

No entanto, ainda permitirá que alguém verifique uma senha fornecida, H(X)mesmo que H(X)seja um hash de senha. Os hashes de senha ainda são determinísticos; portanto, se alguém souber toda a entrada e o próprio algoritmo de hash, Xpoderá ser usado para calcular H(X)e - novamente - os resultados poderão ser comparados.

Os hashes de senha comumente usados ​​são bcrypt , scrypt e PBKDF2 . Também existe o Argon2 de várias formas, vencedor da competição razoavelmente recente de hash de senhas. Aqui no CrackStation há um bom post sobre como fazer a segurança da senha corretamente.


É possível impossibilitar que os adversários executem o cálculo de hash, verifique se a senha está correta. Para isso, uma pimenta pode ser usada como entrada no hash da senha. Como alternativa, é claro que o valor do hash pode ser criptografado usando uma cifra como AES e um modo de operação como CBC ou GCM. No entanto, isso requer o armazenamento de um segredo / chave de forma independente e com requisitos de acesso mais altos que o hash da senha.

Maarten Bodewes
fonte
0

O MD5 é uma função hash criptográfica (unidirecional), portanto, não há maneira direta de decodificá-lo. Todo o objetivo de uma função de hash criptográfico é que você não pode desfazê-la.

Uma coisa que você pode fazer é uma estratégia de força bruta, na qual você adivinha o que foi hash, depois o hash com a mesma função e ver se ele corresponde. A menos que os dados do hash sejam muito fáceis de adivinhar, pode levar muito tempo.

Ajanyan Pradeep
fonte
-1

Ainda não é possível inserir um hash de senha em um algoritmo e recuperá-la em texto sem formatação, pois o hash é uma coisa de mão única. Mas o que as pessoas fizeram é gerar hashes e armazená-lo em uma tabela grande para que, quando você insere um hash específico, verifique a tabela quanto à senha que corresponde ao hash e a retorne para você. Um exemplo de site que faz isso é http://www.md5online.org/ . O sistema moderno de armazenamento de senhas contraria isso usando um algoritmo de salga, de modo que, quando você digita a mesma senha em uma caixa de senha durante o registro, são gerados diferentes hashes.

oziomajnr
fonte
-1

Não, você não pode descriptografar / reverter o md5, pois é uma função de hash unidirecional até que não seja possível encontrar extensas vulnerabilidades no MD5. Outra maneira é que alguns sites tenham uma grande quantidade de conjuntos de bancos de dados de senhas, para que você possa tentar online decodificar sua string de hash MD5 ou SHA1. Eu tentei um site como http://www.mycodemyway.com/encrypt-and-decrypt/md5 e está funcionando bem para mim, mas isso depende totalmente do seu hash se esse hash estiver armazenado nesse banco de dados, você poderá obter a string real .

Rafi Ahmad
fonte
1
Não, o MD5 não é criptografia, nem mesmo criptografia unidirecional (o que não faz sentido em primeiro lugar).
Maarten Bodewes
@MaartenBodewes Esse é o meu erro: não é uma função de criptografia, é uma função de hash Obrigado.
Rafi Ahmad