1. ホーム
  2. hash

[解決済み】MD5ハッシュを復号化することは可能ですか?

2022-04-03 07:38:42

質問

ある人が、こんなソフトウェアシステムを見たことがあると言っていました。

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

それは可能ですか?MD5ハッシュの復号化は不可能/実現不可能だと思っていました。

MD5辞書があるのは知っていますが、実際に復号化するアルゴリズムはあるのでしょうか?

どのように解決するのですか?

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

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

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

とはいえ、MD5にはいくつかの弱点があることが分かっており、複雑な数学を使えば、2を試さずに衝突を見つけることができるかもしれません。 128 を入力することができます。また、ほとんどのパスワードは短く、人々はしばしば共通の値 ("password" や "secret" など) を使用するという事実は、場合によっては、ハッシュをググるか、あるいは、ハッシュを使用して誰かのパスワードを適度に推測することができることを意味します。 レインボーテーブル . これが、常にquot.を使用すべき理由の1つです。 ハッシュ化されたパスワードは、2つの同じ値がハッシュ化されたときに同じ値にならないようにするためです。

一度ハッシュ関数を通したデータは、もう元には戻れない。