MD5ハッシュを復号化することは可能ですか?


260

誰かが私に、次のようなソフトウェアシステムを見たことがあると言っています。

  1. 他のシステムからMD5暗号化パスワードを取得します。
  2. 暗号化されたパスワードを復号化し、
  3. システム独自のアルゴリズムを使用して、システムのデータベースにパスワードを保存します。

それは可能ですか?MD5ハッシュを復号化することは不可能/実現不可能であると私は思いました。

MD5辞書があることは知っていますが、実際の復号化アルゴリズムはありますか?


7
MD5を元に戻すと、複数のパスワードも生成されます。
Carles Company、

231
MD5はダイジェストアルゴリズムです。牛をステーキに変えると考えてください。今それを逆にしてみてください。
メカニカルカタツムリ

5
@私が理解していることから、はい、しかし、あなたがそれらのALOTを持っている場合にのみ。たとえそうしたとしても、アルゴリズムは意図的に情報を失うため、逆に進むことはできません。
ジョーダン

8
@mechanicalsnailは、その類推を考えると、ステーキのDNAから完全な完全なクローンを作ることができます。:))
Trimikha Valentius 2015

8
@TrimikhaValentius MD5は消化アルゴリズムです。ステーキを食べる>消化する>出力と考えてください。今それを逆にしてみてください。
user4157124 2017年

回答:


424

いいえ。MD5は暗号化ではありません(一部の暗号化アルゴリズムの一部として使用される場合があります)が、一方向のハッシュ関数です。です。元のデータの多くは、変換の一部として実際に「失われます」。

これについて考えてください。MD5は常に128ビット長です。つまり、2 128 MD5ハッシュが可能です。これはかなり大きな数ですが、それでも最も確実に有限です。それでも、特定のハッシュ関数への入力は無限にあります(そしてそれらのほとんどは128ビット以上、またはわずか16バイトを含みます)。したがって、実際には、同じ値にハッシュされるデータには無限の可能性があります。ハッシュを興味深いものにしているのは、同じ値にハッシュする2つのデータを見つけるのが非常に難しく、偶然に発生する可能性がほとんどないということです。

(非常に安全でない)ハッシュ関数の簡単な例(これは一方向であるという一般的な考え方を示しています)は、データの一部のすべてのビットを取り、それを大きな数として扱うことです。次に、いくつかの大きな(おそらく素数)数nを使用して整数除算を実行し、剰余を取る(Modulusを参照)。0からnまでの数字が残ります。まったく同じ文字列を使用して、同じ計算を(いつでも、どのコンピューターでも、どこでも)実行すると、同じ値になります。それでも、元の値が何であるかを知る方法はありません。nで割ったときに、その正確な余りを持つ数は無限にあるためです。

とは言っても、MD5にはいくつかの弱点があることがわかっているため、複雑な数学では、2 128の可能な入力文字列を試さなくても衝突を見つけることができる場合があります。また、ほとんどのパスワードは短く、一般的な値(「パスワード」や「シークレット」など)を使用することが多いという事実は、場合によっては、ハッシュをグーグルするか、Rainbowを使用することで、誰かのパスワードをかなり正確に推測できることを意味しますテーブル。これは、ハッシュされたパスワードを常に「ソルト化」して、2つの同一の値がハッシュされたときに同じ値にハッシュされないようにする1つの理由です。

データの一部がハッシュ関数を介して実行されると、戻ることはありません。


22
ただし、MD5ハッシュ空間では当初考えられていたよりも多くの衝突があります。パスワードの最適なハッシュとして最適とは見なされなくなりました。
Cheeso 2009

12
ほとんどのパスワードはMD5ハッシュよりも短いため、通常、ハッシュごとに1つだけのパスワードがあります。(そして、元の画像でなくても1つ見つけるだけでアカウントにアクセスできます。)一方向の機能である点は、複数の異なるプリイメージがないため、元の画像がどれであるかを知ることができません。しかし、元の値を1つでも見つけることは非常に困難です
–PaŭloEbermann、2011

2
@Nick:実際には、RFC1321は明示的に次のように述べています:「アルゴリズムは入力として任意の長さのメッセージを受け取ります」
Adam Batkin

6
@Olathe-同意するかどうかわかりません。ハッシュが与えられた場合、元の入力を(100%の確実性で)決定することは一般に不可能です。(通常)可能なすべての(ハッシュされた)出力を生成する入力の数は無限です。たとえば、ASCII文字の文字列を探していることがわかっていて、たとえば12バイト未満の場合、特定の出力を生成する入力が1つしかない可能性があるため、一般的に言った。しかし、常に衝突(無限)が発生し、外部制約(私の例のように)がない限り、どちらが正しいかわからない
Adam Batkin

2
@Adam Batkin、その通りですが、100%確実というわけではありません。暗号解読は100%確実に行うことはできません。送信者は、他の英語の平文を復号化するのと同じキーを使用して、英語の平文ではなくランダムに意味不明な意味を持つ可能性がありますが、英語の確率は100%に非常に近いです。同様に、長いUTF-8日本語詩パスワードと意味不明な文字列のどちらかを選択すると、詩の確率はほぼ100%になります。これは、事前に選択された制約ではなく、事後の確率を使用して行うことができます。明らかにそれは一般的に行うことはできませんが、それでも非常に便利です。
Olathe 2013

154

あなたはできません-理論的には。ハッシュの要点は、それが一方向に過ぎないということです。これは、誰かがハッシュのリストを取得できたとしても、パスワードを取得できないことを意味します。さらに、複数のサイトで同じパスワードを使用している場合でも(そうです、私たちは誰もそうすべきではないことを知っていますが...)、サイトAのデータベースにアクセスできる人は誰でもユーザーのパスワードを使用できません。サイトB.

MD5がハッシュであることは、情報を失うことも意味します。特定のMD5ハッシュについて、任意の長さのパスワードを許可すると、同じハッシュを生成する複数のパスワードが存在する可能性があります。優れたハッシュの場合、ごくわずかな最大長を超えてそれらを見つけることは計算上不可能ですが、ターゲットハッシュを持つパスワードを見つけた場合、それが間違いなく元のパスワードであるという保証はありませ。それはだ天文学そうあなたが同じMD5ハッシュを持つ2つのASCIIのみ、合理的な長さのパスワードを見るだろうと、それは不可能ではありません。

MD5は、パスワードに使用するのに適さないハッシュです。

  • これは高速です。つまり、「ターゲット」ハッシュがある場合は、多数のパスワードを試して、そのターゲットにハッシュするパスワードを見つけることができるかどうかを確認するのが安上がりです。ソルティングはそのシナリオには役立ちませんが、異なるソルトを使用して複数のハッシュのいずれかに一致するパスワードを検索しようとすると、コストが高くなります。
  • (任意のバイナリデータではなく)印刷可能なテキスト内の衝突を見つけることは少なくとも困難ですが、衝突を見つけやすくする欠陥があることがわかっています。

私はセキュリティの専門家ではないので、「独自の認証システムを導入しないでください」以上の具体的な推奨はしません。評判の良いサプライヤーから1つ見つけて、それを使用してください。セキュリティシステムの設計と実装はどちらもトリッキーなビジネスです。


2
はい、他の方法もありますが、ジョンが上で言ったことを理解する必要があります-「パスワードを電子メールで送信してはいけません-それは機密のままである可​​能性のある機密情報です。」-最下位レベルでは、電子メールが傍受され、機密情報が取得される可能性があります。パスワードはできる限り安全に保つ必要があります-通常、データベース内でのみハッシュとして保持することによって。
ダニエルメイ

3
また、パスワードを元に戻すことができる場合、データベースにアクセスするすべてのユーザーがユーザーのパスワードを入手できるということも事実です。良い考えではありません。一方向のパスワードが標準である必要があります。あなたは絶対にいる場合のみ(でも、暗号化された)実際のパスワードを保つ必要があり(例えばトークンベースの何かを持っていない別のシステムで認証する)に。
ジョンスキート

1
受信者のウェブサーバーが受信者のメールサーバーを拒否して、送信者のメールサーバーが再試行するのを待つだけのスパム対策を確認しました(スパムボットは通常、1回だけ試行します)。これは、10分のタイムアウトを簡単に超える可能性があります。

1
@ravisoni:おそらくブルートフォースまたはルックアップテーブルを介して、同じハッシュを持つ値を見つけています。それが元の平文値であるという保証はありません。
Jon Skeet 2013年

5
@ravisoni:ここで「正しい」とはどういう意味ですか?パスワードがわからない場合は、明かされたものがオリジナルのものかどうかはわかりません。しかし、ポイントは、MD5のようなその一方向ハッシュである定義によって失う情報。このようなサイトが思い付くことができるという事実一致するパスワードはMD5がセキュリティ上の理由のために使用するための悪いアルゴリズムであることのちょうど良い証拠です。
Jon Skeet、2013年

52

技術的には「可能」ですが、非常に厳しい条件下レインボーテーブル、ユーザーのパスワードがそのハッシュデータベースにあるという非常に小さな可能性に基づくブルートフォーシング)です。

しかし、だからといって

  • 実行可能
    または
  • 安全

MD5ハッシュを「リバース」する必要はありません。以下に概説する方法を使用すると、必要はありません。MD5の「逆転」は実際には悪意のあるものと見なされています-一部のWebサイトはMD5ハッシュを「クラック」してブルートフォースする機能を提供しています-しかし、それらはすべて、辞書の単語、以前に送信されたパスワードなどの単語を含む大規模なデータベースです。MD5ハッシュを元に戻す必要がある可能性ほとんどありません。MD5ハッシュソルトした場合-これも機能しません!:)


MD5ハッシュ使用したログインが機能する方法は次のとおりです。

登録時:
ユーザーがパスワードを作成-> MD5を使用してパスワードがハッシュされます->データベースに保存されたハッシュ

ログイン時:
ユーザーはユーザー名とパスワードを入力します->(ユーザー名がチェックされます)パスワードはMD5を使用してハッシュされます->ハッシュはデータベースに保存されているハッシュと比較されます

「ロストパスワード」が必要な場合:

2つのオプション:

  • ユーザーがログインするためにランダムなパスワードを送信した後、最初のログイン時にパスワードを変更するようにバグがあります。

または

  • ユーザーにパスワードを変更するためのリンクが送信され(セキュリティの質問などがあるかどうかをさらに確認して)、新しいパスワードがハッシュされ、データベース内の古いパスワードに置き換えられます

1
私はいくつかのつまようじを持っています。レインボーテーブルは力ずくの強制ではありません。実際には、数文字のブルートフォース(非常に単純な)パスワードを実行するプログラムやサイトがあります(通常、数時間または数日ループするだけです。ハッシュを入力して、ループが出現することを期待できます)。そして残念なことに、多くのパスワードの質の欠如を考えると、パスワードがポップアップする可能性は「非常に小さなチャンス」ではありません。
Maarten Bodewes、

32

直接ではありません。そのための鳩の巣原理、(おそらく)複数の値は、任意のMD5ハッシュ出力することがあります。そのため、確実に元に戻すことはできません。さらに、MD5はそのような逆ハッシュを見つけるのを難しくするように作られています(ただし、衝突を引き起こす攻撃がありました。つまり、同じ結果にハッシュする2つの値を生成しますが、結果のMD5値が何になるかを制御することはできません。あります)。

ただし、検索スペースを、たとえば長さがN未満の一般的なパスワードに制限すると、不可逆性プロパティがなくなる可能性があります(MD5出力の数が対象ドメインの文字列の数よりもはるかに多いため)。次に、レインボーテーブルなどを使用して、逆ハッシュを作成できます。


1
同じ出力にハッシュする別の値を見つけることを「衝突」と呼びます。これは、MD5ハッシュシステムを解読する最も一般的な方法です。
ニコール

5
@Renesis、以前に既知の値にハッシュするデータを見つけることは実際には「プリイメージ」と呼ばれ、単なる衝突よりもはるかに困難です。MD5に対するプリイメージ攻撃はまだ実証されていませんが、衝突攻撃が使用されています。
bdonlan 2009

ハッシュ関数のポイント(パスワードの保存に使用する場合)は、同じハッシュを与える可能性のあるパスワードが多数存在する(存在するが、それらのほとんどはハッシュ自体よりも長い)ことではありませんが、見つけることさえも困難です。それらの1つ(システムにアクセスするには十分です)。そして、はい、レインボーテーブルのため、無塩ハッシュを使用しません。そして、小さなパスワードスペースの、あなたは(MD5 / SHAのように- * / ....)の代わりに、高速1の(bcryptのかscryptなど)遅いハッシュを使用しますので
サンパウロEbermann

1
技術的には、ハードウェアが故障している可能性があるため、MD5を確実に実行することはできません。同様にpassword、同じハッシュを生成する他のすべての無限入力ではなく、すべてがかなりランダムに見えるパスワードではなく、パスワードが確実であるとは限らない場合がありますが、十分近い場合があります。
Olathe 2013

もちろん、鳩の巣の原則が適用されますが、特定の値にハッシュする2番目の入力(通常のパスワードのハッシュなど)を見つけることは、まだ計算上実​​行不可能です。特定のH(X)にハッシュするXを見つけた場合、Xが正しい入力であると確信できます。これにより、この回答の最初のセクション全体が残り、残りのほとんどが正しくなくなります。
Maarten Bodewes、

13

不可能、少なくとも妥当な時間内に。

これがよく処理される方法は、パスワードの「リセット」です。つまり、新しい(ランダムな)パスワードを与え、それを電子メールで送信します。


5
ハッシュがソルト化されていなかった場合、ハッシュ化された値をグーグルで検索するだけでどれほど頻繁に驚かされるでしょうか
Michael Borgwardt

1
、しかし、パスワード検索システムのための本当に実用的でも無塩1 :)ません
マシュー・グローブ

12

md5パスワードを元に戻すことはできません。(任意の言語)

でも君ならできる:

ユーザーに新しいものを与えます。

レインボーテーブルをチェックインして、おそらく古いテーブルを取得してください。


1
Nix the rainbow tableのアイデア。あなたが塩漬けしているなら-そしてあなたはそうするべきです-とにかくそれはうまくいきません。
Steven Sudit

1
@StevenSudit強力なパスワードハッシュではなくMD5を使用してパスワードをハッシュている場合、ソルトを使用しているとは限りません。多分彼らはそうするでしょう、おそらく彼らはしません。
Maarten Bodewes

10

いいえ、彼はMD5辞書について混乱していたに違いありません。

暗号化ハッシュ(MD5など)は1つの方法であり、元のメッセージなどに関する必要のない他の情報がない限り、ダイジェストのみで元のメッセージに戻ることはできません。



7

MD5はハッシュアルゴリズムです。ハッシュ値を元に戻すことはできません。

ユーザーが別のパスワードを入力し、ハッシュを計算して新しいパスワードとして保存する「パスワード変更機能」を追加する必要があります。


7

それを行う簡単な方法はありません。これは、そもそもパスワードをハッシュするポイントのようなものです。:)

あなたができるべきことの一つは、それらに一時的なパスワードを手動で設定し、それらを送信することです。

これは悪い考えであり(とにかく動作するとは保証されていません)、これについて言及するのをためらいますが、milw0rmなどのレインボーテーブルでハッシュを検索して、古いパスワードをその方法で回復できるかどうかを確認できます。


6

どのようにそしてなぜそれがリバーシブルではないのか、なぜあなたがとにかくしたくないのかについて、ここで他のすべての答えを見てください。

ただし、完全を期すために、可能な一致を検索できるレインボーテーブルがあります。レインボーテーブルの回答がユーザーによって選択された元のパスワードになるとは限らないため、ユーザーを混乱させる可能性があります。

また、これはソルトハッシュでは機能しません。ソルティングは、多くのセキュリティ専門家によって推奨されています。


不正解です。一致が見つかった場合、それが元のパスワードであることが確実です。これが当てはまらない場合、H(X)が与えられた場合に衝突が発生する可能性があります。Xは、攻撃者によって定義された定義済みの構造のないメッセージです。MD5などの壊れたハッシュ関数であっても、暗号的に安全なハッシュ関数に対してこのような衝突を見つけることは、計算上不可能です。
Maarten Bodewes、

@MaartenBodewes:「一致が見つかった場合、それが元のパスワードであることが確実です。」無制限の長さのパスワードを想定している場合、それがどのように行われるかはわかりません。元のパスワードである可能性非常に高いと思いますが、そうである必要はありません。MD5ハッシュを超える可能なパスワードがあるという事実は、それが意味する必要があり、同じハッシュを持つ2つのパスワードがあることを可能とします。そのような衝突を見つけることが計算上実行不可能だからといって、衝突が存在しないというわけではありません。それとも私はあなたを誤解しましたか?
ジョンスキート

それが衝突見つけることは計算上不可能である場合@JonSkeetを目的に、その後1発見偶然にも同様にそうか、悪いことです。MD5の出力スペースの制限と誕生日の問題により、衝突が見つかる可能性は約2 ^ 64に1(つまり、出力スペースの約半分)です。これは、約2 ^ 64ハッシュに一致した後です。そして、これはメッセージがおそらく小さい必要があり、パスワードと見なされる特定のフォーマットを持つ必要があることさえ考慮していません。ほとんどのパスワードには、2 ^ 64ビットよりかなり低いエントロピーがあります。
Maarten Bodewes 2018

1
@MaartenBodewes:しかし、「天文学的にありそうもないこと」と「不可能」の間には大きな違いがあります。それが正しいパスワードである確信しているというあなたの陳述は、IMOが過度に強力です。これは、存在しない数学的確実性を示唆しています。
Jon Skeet

一度に2 ^ 128ビットのAESキーを推測することもできます。それは「ただ」非常にありそうもないことです。暗号化は、この種のオッズに依存しています。すべての実用的な目的で、入力メッセージ/パスワードを見つけた場合、それは探していたものになります。別の入力メッセージを見つけることが理論的に可能であることは素晴らしいことですが、StackOverflowに関するこの質問は、それを考慮する必要はありません。そして、レインボーテーブルには、可能なパスワードのみが入力されています。それらには、衝突の可能性さえもあるほど十分なデータが含まれていません(無意識のうちにマッピングを上書きするか、有名になるでしょう)。
Maarten Bodewes

4

ハッシュ関数の逆関数を見つけるという点では、ハッシュ関数を「元に戻す」方法はありません。前述したように、これがハッシュ関数を持つことの要点です。これは可逆的であってはならず、ハッシュ値の計算を高速化する必要があります。したがって、特定のハッシュ値を生成する入力文字列を見つける唯一の方法は、可能なすべての組み合わせを試すことです。そのため、これはブルートフォース攻撃と呼ばれます。

考えられるすべての組み合わせを試すには時間がかかり、これがハッシュ値を使用してパスワードを比較的安全な方法で格納する理由でもあります。攻撃者がすべてのユーザーパスワードを使用してデータベースにアクセスできる場合は、いずれにせよあなたを失います。ハッシュ値と(理想的には)強力なパスワードがある場合、攻撃者がハッシュ値からパスワードを取得するのは非常に困難になります。

ハッシュ値の計算は比較的高速であるため、ハッシュ値を格納してもパフォーマンス上の問題はありません。したがって、ほとんどのシステムは、ユーザーが入力したパスワードのハッシュ値を計算し(高速)、それをユーザーデータベースに格納されているハッシュ値と比較します。


ほとんどのパスワードは十分に安全ではなく、攻撃者が辞書攻撃を実行できるため、ハッシュ関数の速度が非常に問題になることを除いて、この答えには何も問題はありません。そのため、暗号で保護された高速ハッシュ関数の代わりに、低速パスワードハッシュ関数が使用されます。
Maarten Bodewes、

3

MD5は壊れていると見なされます。ハッシュから元のコンテンツを取得できるからではなく、作業によって、同じハッシュにハッシュする2つのメッセージを作成できるためです。

MD5ハッシュのハッシュ化を解除することはできません。


3
設計上、同じ長さのハッシュはすべて衝突の影響を受けます。可変長データを制限する場合は避けられません。MD5は、衝突という事実ではなく、その衝突率が古くなっていると考えられています。
Jonathan Lonowski、2009

MD5は、衝突する入力を構築する可能性が証明されているため、壊れていると見なされます。
Ned Batchelder、

3

辞書を使用して元のメッセージを取得するオンラインツールを見つけることができます。

場合によっては、ディクショナリメソッドが役に立たないこともあります。

  • メッセージがSALTメッセージを使用してハッシュされている場合
  • メッセージが複数回ハッシュされている場合

たとえば、これは1つのMD5復号化オンラインツールです。


辞書攻撃ではなく、レインボーテーブルは、塩が使用されている場合は役に立ちません。ソルトなしで複数回ハッシュすると、レインボーテーブルを使用できますが、既存のテーブルをオンラインで見つける可能性は確かに低くなります。
Maarten Bodewes 2018

2

うまくいく可能性があるのは(リプレイ攻撃を防ぐためにソルトを一切追加せずにパスワードをハッシュ化しているだけである場合、ソルトを知っている必要がある場合)方法は、辞書攻撃ツールです、多くの単語、数字などのファイルで2行を作成します。1行は単語、(辞書内の)番号はもう1行は単語のハッシュで、一致する場合はハッシュを比較します...

それが暗号解読に行かずに、唯一の方法です。


2

はい、まさにあなたが求めていることは可能です。MD5パスワードを手助けなしに「復号化」することは不可能ですが、MD5パスワードを別のアルゴリズムに再暗号化することは可能です。

ユーザーが古いMD5パスワードを使用して新しいシステムにログオンできるようにします。彼らがログインした時点で、彼らはあなたのログインプログラムにハッシュ化されていないものを与えましたあなたはマッチあなたが持っているMD5ハッシュを証明するパスワードのバージョンを。その後、このハッシュされていないパスワードを新しいハッシュアルゴリズムに変換できます。

ユーザーがパスワードを教えてくれるのを待たなければならないので、これは明らかに拡張されたプロセスですが、機能します。

(注:7年後、うまくいけば誰かがそれを役に立つと思うでしょう)


返信いただきありがとうございます。しかし、私はあなたを「1に」するつもりです:)私が実際にこれを行ったかどうかは思い出せませんが、理論的にはうまくいくはずです。すべてのユーザーがログインするのを待ってパスワードを再暗号化する代わりに、ハッシュ化されたパスワードを単純に暗号化できます。したがって、すべてのパスワードはMD5ハッシュされ、暗号化されます。同じことを行うためにパスワードチェックを更新しただけで、ユーザーデータはユーザーの介入を必要とせずに安全であるはずです。
ジョンブブリスキー

上記の私のコメントに対するもう1つの警告。私は暗号化の専門家ではないので、これがさらにセキュリティに影響するかどうかはわかりません。たとえば、暗号化される前に弱くハッシュされた弱いパスワードを暗号化すると、暗号化のセキュリティが危険にさらされる可能性があります(別のソルトも使用する可能性がありますか?)。また、それらのMD5ハッシュされたパスワードでバックアップが浮かんでいる場合があります。このタイプのアップグレードを実行するときは、おそらくすべての既存のパスワードを完全に無効にする方が良いでしょう。
ジョンブブリスキー

暗号学者は二重暗号化を心配しますが、問題である些細なケースのみを見つけたと思います。しかし、MD5は(長すぎず、テキストではない)パスワードに対して安全であるため、この場合は有用ではないと思います。それでも、前の開発者がソルトを追加するのを忘れた場合は、ダブルハッシュが役立つ可能性があります。うまくいけば、バックアップが失われることはなく、とにかく暗号化されます。
user3710044 2016

1

いいえ、できません。辞書を使用するか、探しているハッシュが得られるまでさまざまな値をハッシュしてみることができます。ただし、「復号化」することはできません。


md5を元のテキストに戻すこのWebサイトを見ました:md5.gromweb.com。では、どうしてそれが可能でしょうか?
samach

2
@ samach321-簡単:ハッシュされた文字列のDBがあります。「文字列をMD5ハッシュに変換する」ボックスに入力したものはすべてDBに追加されます。別のソースからMD5ハッシュを取得して、それを入力してください。それがDBにあるものでない限り、結果は得られません。
Vilx

1

MD5には弱点があるため(Wikipediaを参照)、ハッシュを事前計算しようとするプロジェクトがいくつかあります。ウィキペディアはこれらのプロジェクトのいくつかについても示唆しています。私が知っている(そして尊敬している)ものはophrackです。ユーザーに自分のパスワードを教えることはできませんが、機能するパスワードを伝えることができる場合があります。しかし、私は思う:彼らが忘れた場合に備えて、新しいパスワードをメールで送信してください。


MD5が壊れているという事実(関数の特定の重要な用途)は、 、レインボーテーブルと関係がありません(これは、ハッシュの事前計算について言及するときに示唆することです)。
Maarten Bodewes、

1

MD5ハッシュアルゴリズムは元に戻せないため、MD5デコードは不可能ですが、一部のWebサイトにはパスワードの一致の一括セットがあるため、MD5ハッシュをデコードするためにオンラインで試すことができます。

オンラインでお試しください:

MD5復号化

md5online

md5decrypter


ええ、でもこれは「辞書があることは知っています」というフレーズのように、すでに質問の対象になっています。したがって、辞書を指摘するだけでは答えにはなりません。
Maarten Bodewes

1

理論的にはハッシュ値を復号化することは不可能ですが、元のプレーンテキストを取得するためのいくつかのダーティテクニックがあります。

  1. ブルートフォーシング:すべてのコンピュータセキュリティアルゴリズムはブルートフォーシングの影響を受けます。このアイデアに基づいて、今日のGPUは並列プログラミングのアイデアを採用しています。これを使用すると、グラフィックスプロセッサを使用してプレーンテキストを大量にブルートフォースすることで、プレーンテキストを取り戻すことができます。このツールhashcatはこの仕事をします。私が最後にcudaをチェックしたときバージョンところ、6文字以内で7文字の文字をブルートフォースでできました。
  2. インターネット検索:ハッシュをコピーしてGoogleに貼り付け、対応するプレーンテキストがそこにあるかどうかを確認します。これは何かをテストしているときの解決策ではありませんが、試してみる価値はあります。一部のWebサイトは、辞書のほとんどすべての単語のハッシュを維持しています。

2
辞書攻撃は別の方法です。つまり、入力パスワードがわかっている他のデータベースと比較します。
Maarten Bodewes 2018

1

いいえ、MD5などのハッシュ関数を元に戻すことはできません。出力ハッシュ値が与えられた場合、入力メッセージに関する十分な情報が知られていない限り、入力メッセージを見つけることはできません。

復号化は、ハッシュ関数に対して定義された関数ではありません。暗号化と復号化は、CBCモードのAESなどの暗号の機能です。ハッシュ関数は暗号化復号もしません。ハッシュ関数は、入力メッセージをダイジェストするために使用されます。その名前が示すように、設計上、可能な逆アルゴリズムはありません


MD5は、暗号的に安全な一方向ハッシュ関数として設計されています。入力メッセージの大部分が事前に決定されている場合でも、MD5の衝突を簡単に生成できるようになりました。そのため、MD5は公式に破られており、MD5は暗号的に安全なハッシュと見なされるべきではありません。ただし、ハッシュ値につながる入力メッセージを見つけることは依然として不可能です。H(X)のみが既知であるときにXを見つけます(Xには、事前計算されたデータの少なくとも1つの128バイトブロックを持つ事前計算された構造がありません)。 。MD5に対する既知のプリイメージ攻撃はありません

通常、ブルートフォース攻撃または(拡張)辞書攻撃を使用してパスワードを推測したり、データベースを比較したり、いわゆるレインボーテーブルでパスワードハッシュを検索したりすることもできます。一致が見つかった場合、入力が見つかったことは計算上確実です。ハッシュ関数はまた、衝突攻撃に対して安全である:見つけるX'ようにH(X') = H(X)与えられましたH(X)。したがって、Xが見つかった場合、それが実際に入力メッセージであったことは計算上確実です。そうでなければ、結局衝突攻撃を実行することになります。レインボーテーブルを使用して攻撃の速度を上げることができます。特定のハッシュを指定してパスワードを見つけるのに役立つ特別なインターネットリソースがそこにあります。

もちろん、ハッシュ値H(X)再利用して、他のシステムで生成されたパスワードを検証することもできます。受信システムがしなければならない唯一のことFH(X)、入力として受け取る決定論的関数の結果を保存することです。場合X、システムに与えられH(X)、したがって、F再計算することができ、結果を比較することができます。つまり、パスワードが正しいこと確認するためだけにハッシュ値を復号化する必要なく、ハッシュを別の値として保存できます。


MD5の代わりに、パスワードハッシュまたはPBKDF(パスワードベースのキー導出関数)を使用することが重要です。このような関数は、ソルトの使用方法を指定しますは、ハッシュと一緒に。そうすれば、(他のユーザーから、または他のデータベース内の)同一のパスワードに対して同一のハッシュが生成されません。そのため、パスワードハッシュでは、ソルトが十分に大きく、適切にランダム化されている限り、レインボーテーブルを使用できません。

パスワードハッシュには、ソルトおよびハッシュ値を指定してパスワードを見つけようとする攻撃を大幅に遅くする可能性がある作業要素反復カウントを使用して構成される場合もあります)も含まれています。saltとハッシュ値を含むデータベースが盗まれる可能性があるため、これは重要です。最後に、パスワードハッシュもメモリに負荷がかかる可能性があるため、ハッシュを計算するには大量のメモリが必要です。これにより、攻撃者が検索を高速化するために特別なハードウェア(GPU、ASIC、FPGAなど)を使用することが不可能になります。コショウや並列化の量などの他の入力または構成オプションも、パスワードハッシュで使用できる場合があります。

ただし、パスワードハッシュでH(X)あっても、指定されたパスワードを誰でも確認できH(X)ます。パスワードハッシュは依然として確定的であるため、誰かがすべての入力とハッシュアルゴリズム自体を知っている場合はX、計算に使用H(X)できます。もう一度、結果を比較できます。

一般的に使用されるパスワードハッシュは、bcryptscrypt、およびPBKDF2です。ありArgon2は、合理的に、最近のパスワードハッシュの競争の勝者である様々な形で。CrackStationには、パスワードのセキュリティを正しく行うための優れたブログ投稿があります。


攻撃者がハッシュ計算を実行してパスワードが正しいことを確認できないようにすることが可能です。このため、パスワードハッシュへの入力としてペッパーを使用できます。あるいは、AESなどの暗号と、CBCまたはGCMなどの動作モードを使用して、ハッシュ値を暗号化することもできます。ただし、これにはシークレット/キーを個別に保存する必要があり、パスワードハッシュよりも高いアクセス要件が必要です。


0

MD5は暗号化(一方向)ハッシュ関数であるため、直接デコードする方法はありません。暗号化ハッシュ関数の目的は、元に戻せないことです。

できることの1つは、ハッシュされたものを推測し、同じ関数でハッシュして、一致するかどうかを確認するブルートフォース戦略です。ハッシュ化されたデータは非常に推測しやすいものでない限り、長い時間がかかる可能性があります。


-1

ハッシュは一方向の方法であるため、パスワードのハッシュをアルゴリズムに組み込んでプレーンテキストで戻すことはまだできません。しかし、人々がやったことは、ハッシュを生成してそれを大きなテーブルに格納することです。これにより、特定のハッシュを入力すると、ハッシュと一致するパスワードをテーブルでチェックし、そのパスワードを返します。それを行うサイトの例は http://www.md5online.org/です。最新のパスワードストレージシステムは、ソルティングアルゴリズムを使用してこれに対処し、登録​​時に同じパスワードをパスワードボックスに入力すると、異なるハッシュが生成されます。


-1

いいえ、MD5に広範な脆弱性が見つかるまで、md5は一方向のハッシュ関数であるため、md5を復号化/元に戻すことはできません。もう1つの方法は、一部のWebサイトに大量のパスワードデータベースのセットがあるため、オンラインでMD5またはSHA1ハッシュ文字列をデコードできることです。私はhttp://www.mycodemyway.com/encrypt-and-decrypt/md5のようなウェブサイトを試してみましたが、うまく機能しましたが、ハッシュがデータベースに保存されている場合は、実際の文字列を取得できます。


1
いいえ、MD5は暗号化ではなく、一方向の暗号化ですらありません(そもそも意味がありません)。
Maarten Bodewes 2018

@MaartenBodewesそれは私の間違いです、それは暗号化関数ではなく、そのハッシュ関数ですありがとうございます。
Rafi Ahmad
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.