Alguém me disse que viu sistemas de software que:
- recuperar senhas criptografadas MD5 de outros sistemas;
- descriptografar as senhas criptografadas e
- 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?
hash
cryptography
md5
encryption
John Bubriski
fonte
fonte
Respostas:
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.
fonte
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:
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.
fonte
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 é
ou
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:
ou
fonte
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.
fonte
password
mais do que todas as outras entradas infinitas que produzem o mesmo hash, mas que parecem aleatórias, mas você pode estar perto o suficiente.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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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:
Por exemplo, aqui está uma ferramenta on-line do decodificador MD5 .
fonte
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.
fonte
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)
fonte
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".
fonte
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.
fonte
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
fonte
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.
fonte
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'
formaH(X') = H(X)
determinadaH(X)
. Portanto, se umX
for 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 hash
H(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ísticaF
que recebeH(X)
como entrada. QuandoX
é fornecido ao sistemaH(X)
,F
pode 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 queH(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,X
poderá ser usado para calcularH(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.
fonte
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.
fonte
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.
fonte
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 .
fonte