誰かが私に、次のようなソフトウェアシステムを見たことがあると言っています。
- 他のシステムからMD5暗号化パスワードを取得します。
- 暗号化されたパスワードを復号化し、
- システム独自のアルゴリズムを使用して、システムのデータベースにパスワードを保存します。
それは可能ですか?MD5ハッシュを復号化することは不可能/実現不可能であると私は思いました。
MD5辞書があることは知っていますが、実際の復号化アルゴリズムはありますか?
誰かが私に、次のようなソフトウェアシステムを見たことがあると言っています。
それは可能ですか?MD5ハッシュを復号化することは不可能/実現不可能であると私は思いました。
MD5辞書があることは知っていますが、実際の復号化アルゴリズムはありますか?
回答:
いいえ。MD5は暗号化ではありません(一部の暗号化アルゴリズムの一部として使用される場合があります)が、一方向のハッシュ関数です。です。元のデータの多くは、変換の一部として実際に「失われます」。
これについて考えてください。MD5は常に128ビット長です。つまり、2 128 MD5ハッシュが可能です。これはかなり大きな数ですが、それでも最も確実に有限です。それでも、特定のハッシュ関数への入力は無限にあります(そしてそれらのほとんどは128ビット以上、またはわずか16バイトを含みます)。したがって、実際には、同じ値にハッシュされるデータには無限の可能性があります。ハッシュを興味深いものにしているのは、同じ値にハッシュする2つのデータを見つけるのが非常に難しく、偶然に発生する可能性がほとんどないということです。
(非常に安全でない)ハッシュ関数の簡単な例(これは一方向であるという一般的な考え方を示しています)は、データの一部のすべてのビットを取り、それを大きな数として扱うことです。次に、いくつかの大きな(おそらく素数)数nを使用して整数除算を実行し、剰余を取る(Modulusを参照)。0からnまでの数字が残ります。まったく同じ文字列を使用して、同じ計算を(いつでも、どのコンピューターでも、どこでも)実行すると、同じ値になります。それでも、元の値が何であるかを知る方法はありません。nで割ったときに、その正確な余りを持つ数は無限にあるためです。
とは言っても、MD5にはいくつかの弱点があることがわかっているため、複雑な数学では、2 128の可能な入力文字列を試さなくても衝突を見つけることができる場合があります。また、ほとんどのパスワードは短く、一般的な値(「パスワード」や「シークレット」など)を使用することが多いという事実は、場合によっては、ハッシュをグーグルするか、Rainbowを使用することで、誰かのパスワードをかなり正確に推測できることを意味しますテーブル。これは、ハッシュされたパスワードを常に「ソルト化」して、2つの同一の値がハッシュされたときに同じ値にハッシュされないようにする1つの理由です。
データの一部がハッシュ関数を介して実行されると、戻ることはありません。
あなたはできません-理論的には。ハッシュの要点は、それが一方向に過ぎないということです。これは、誰かがハッシュのリストを取得できたとしても、パスワードを取得できないことを意味します。さらに、複数のサイトで同じパスワードを使用している場合でも(そうです、私たちは誰もそうすべきではないことを知っていますが...)、サイトAのデータベースにアクセスできる人は誰でもユーザーのパスワードを使用できません。サイトB.
MD5がハッシュであることは、情報を失うことも意味します。特定のMD5ハッシュについて、任意の長さのパスワードを許可すると、同じハッシュを生成する複数のパスワードが存在する可能性があります。優れたハッシュの場合、ごくわずかな最大長を超えてそれらを見つけることは計算上不可能ですが、ターゲットハッシュを持つパスワードを見つけた場合、それが間違いなく元のパスワードであるという保証はありません。それはだ天文学そうあなたが同じMD5ハッシュを持つ2つのASCIIのみ、合理的な長さのパスワードを見るだろうと、それは不可能ではありません。
MD5は、パスワードに使用するのに適さないハッシュです。
私はセキュリティの専門家ではないので、「独自の認証システムを導入しないでください」以上の具体的な推奨はしません。評判の良いサプライヤーから1つ見つけて、それを使用してください。セキュリティシステムの設計と実装はどちらもトリッキーなビジネスです。
技術的には「可能」ですが、非常に厳しい条件下(レインボーテーブル、ユーザーのパスワードがそのハッシュデータベースにあるという非常に小さな可能性に基づくブルートフォーシング)です。
しかし、だからといって
MD5ハッシュを「リバース」する必要はありません。以下に概説する方法を使用すると、必要はありません。MD5の「逆転」は実際には悪意のあるものと見なされています-一部のWebサイトはMD5ハッシュを「クラック」してブルートフォースする機能を提供しています-しかし、それらはすべて、辞書の単語、以前に送信されたパスワードなどの単語を含む大規模なデータベースです。MD5ハッシュを元に戻す必要がある可能性はほとんどありません。MD5ハッシュをソルトした場合-これも機能しません!:)
MD5ハッシュを使用したログインが機能する方法は次のとおりです。
登録時:
ユーザーがパスワードを作成-> MD5を使用してパスワードがハッシュされます->データベースに保存されたハッシュ
ログイン時:
ユーザーはユーザー名とパスワードを入力します->(ユーザー名がチェックされます)パスワードはMD5を使用してハッシュされます->ハッシュはデータベースに保存されているハッシュと比較されます
「ロストパスワード」が必要な場合:
2つのオプション:
または
直接ではありません。そのための鳩の巣原理、(おそらく)複数の値は、任意のMD5ハッシュ出力することがあります。そのため、確実に元に戻すことはできません。さらに、MD5は、そのような逆ハッシュを見つけるのを難しくするように作られています(ただし、衝突を引き起こす攻撃がありました。つまり、同じ結果にハッシュする2つの値を生成しますが、結果のMD5値が何になるかを制御することはできません。あります)。
ただし、検索スペースを、たとえば長さがN未満の一般的なパスワードに制限すると、不可逆性プロパティがなくなる可能性があります(MD5出力の数が対象ドメインの文字列の数よりもはるかに多いため)。次に、レインボーテーブルなどを使用して、逆ハッシュを作成できます。
password
、同じハッシュを生成する他のすべての無限入力ではなく、すべてがかなりランダムに見えるパスワードではなく、パスワードが確実であるとは限らない場合がありますが、十分近い場合があります。
不可能、少なくとも妥当な時間内に。
これがよく処理される方法は、パスワードの「リセット」です。つまり、新しい(ランダムな)パスワードを与え、それを電子メールで送信します。
md5パスワードを元に戻すことはできません。(任意の言語)
でも君ならできる:
ユーザーに新しいものを与えます。
レインボーテーブルをチェックインして、おそらく古いテーブルを取得してください。
いいえ、彼はMD5辞書について混乱していたに違いありません。
暗号化ハッシュ(MD5など)は1つの方法であり、元のメッセージなどに関する必要のない他の情報がない限り、ダイジェストのみで元のメッセージに戻ることはできません。
MD5はハッシュアルゴリズムです。ハッシュ値を元に戻すことはできません。
ユーザーが別のパスワードを入力し、ハッシュを計算して新しいパスワードとして保存する「パスワード変更機能」を追加する必要があります。
どのようにそしてなぜそれがリバーシブルではないのか、なぜあなたがとにかくしたくないのかについて、ここで他のすべての答えを見てください。
ただし、完全を期すために、可能な一致を検索できるレインボーテーブルがあります。レインボーテーブルの回答がユーザーによって選択された元のパスワードになるとは限らないため、ユーザーを混乱させる可能性があります。
また、これはソルトハッシュでは機能しません。ソルティングは、多くのセキュリティ専門家によって推奨されています。
ハッシュ関数の逆関数を見つけるという点では、ハッシュ関数を「元に戻す」方法はありません。前述したように、これがハッシュ関数を持つことの要点です。これは可逆的であってはならず、ハッシュ値の計算を高速化する必要があります。したがって、特定のハッシュ値を生成する入力文字列を見つける唯一の方法は、可能なすべての組み合わせを試すことです。そのため、これはブルートフォース攻撃と呼ばれます。
考えられるすべての組み合わせを試すには時間がかかり、これがハッシュ値を使用してパスワードを比較的安全な方法で格納する理由でもあります。攻撃者がすべてのユーザーパスワードを使用してデータベースにアクセスできる場合は、いずれにせよあなたを失います。ハッシュ値と(理想的には)強力なパスワードがある場合、攻撃者がハッシュ値からパスワードを取得するのは非常に困難になります。
ハッシュ値の計算は比較的高速であるため、ハッシュ値を格納してもパフォーマンス上の問題はありません。したがって、ほとんどのシステムは、ユーザーが入力したパスワードのハッシュ値を計算し(高速)、それをユーザーデータベースに格納されているハッシュ値と比較します。
MD5は壊れていると見なされます。ハッシュから元のコンテンツを取得できるからではなく、作業によって、同じハッシュにハッシュする2つのメッセージを作成できるためです。
MD5ハッシュのハッシュ化を解除することはできません。
辞書を使用して元のメッセージを取得するオンラインツールを見つけることができます。
場合によっては、ディクショナリメソッドが役に立たないこともあります。
たとえば、これは1つのMD5復号化オンラインツールです。
はい、まさにあなたが求めていることは可能です。MD5パスワードを手助けなしに「復号化」することは不可能ですが、MD5パスワードを別のアルゴリズムに再暗号化することは可能です。
ユーザーが古いMD5パスワードを使用して新しいシステムにログオンできるようにします。彼らがログインした時点で、彼らはあなたのログインプログラムにハッシュ化されていないものを与えましたあなたはマッチあなたが持っているMD5ハッシュを証明するパスワードのバージョンを。その後、このハッシュされていないパスワードを新しいハッシュアルゴリズムに変換できます。
ユーザーがパスワードを教えてくれるのを待たなければならないので、これは明らかに拡張されたプロセスですが、機能します。
(注:7年後、うまくいけば誰かがそれを役に立つと思うでしょう)
いいえ、できません。辞書を使用するか、探しているハッシュが得られるまでさまざまな値をハッシュしてみることができます。ただし、「復号化」することはできません。
MD5には弱点があるため(Wikipediaを参照)、ハッシュを事前計算しようとするプロジェクトがいくつかあります。ウィキペディアはこれらのプロジェクトのいくつかについても示唆しています。私が知っている(そして尊敬している)ものはophrackです。ユーザーに自分のパスワードを教えることはできませんが、機能するパスワードを伝えることができる場合があります。しかし、私は思う:彼らが忘れた場合に備えて、新しいパスワードをメールで送信してください。
MD5ハッシュアルゴリズムは元に戻せないため、MD5デコードは不可能ですが、一部のWebサイトにはパスワードの一致の一括セットがあるため、MD5ハッシュをデコードするためにオンラインで試すことができます。
オンラインでお試しください:
理論的にはハッシュ値を復号化することは不可能ですが、元のプレーンテキストを取得するためのいくつかのダーティテクニックがあります。
いいえ、MD5などのハッシュ関数を元に戻すことはできません。出力ハッシュ値が与えられた場合、入力メッセージに関する十分な情報が知られていない限り、入力メッセージを見つけることはできません。
復号化は、ハッシュ関数に対して定義された関数ではありません。暗号化と復号化は、CBCモードのAESなどの暗号の機能です。ハッシュ関数は暗号化も復号化もしません。ハッシュ関数は、入力メッセージをダイジェストするために使用されます。その名前が示すように、設計上、可能な逆アルゴリズムはありません。
MD5は、暗号的に安全な一方向ハッシュ関数として設計されています。入力メッセージの大部分が事前に決定されている場合でも、MD5の衝突を簡単に生成できるようになりました。そのため、MD5は公式に破られており、MD5は暗号的に安全なハッシュと見なされるべきではありません。ただし、ハッシュ値につながる入力メッセージを見つけることは依然として不可能です。H(X)のみが既知であるときにXを見つけます(Xには、事前計算されたデータの少なくとも1つの128バイトブロックを持つ事前計算された構造がありません)。 。MD5に対する既知のプリイメージ攻撃はありません。
通常、ブルートフォース攻撃または(拡張)辞書攻撃を使用してパスワードを推測したり、データベースを比較したり、いわゆるレインボーテーブルでパスワードハッシュを検索したりすることもできます。一致が見つかった場合、入力が見つかったことは計算上確実です。ハッシュ関数はまた、衝突攻撃に対して安全である:見つけるX'
ようにH(X') = H(X)
与えられましたH(X)
。したがって、X
が見つかった場合、それが実際に入力メッセージであったことは計算上確実です。そうでなければ、結局衝突攻撃を実行することになります。レインボーテーブルを使用して攻撃の速度を上げることができます。特定のハッシュを指定してパスワードを見つけるのに役立つ特別なインターネットリソースがそこにあります。
もちろん、ハッシュ値H(X)
を再利用して、他のシステムで生成されたパスワードを検証することもできます。受信システムがしなければならない唯一のことF
はH(X)
、入力として受け取る決定論的関数の結果を保存することです。場合X
、システムに与えられH(X)
、したがって、F
再計算することができ、結果を比較することができます。つまり、パスワードが正しいことを確認するためだけにハッシュ値を復号化する必要はなく、ハッシュを別の値として保存できます。
MD5の代わりに、パスワードハッシュまたはPBKDF(パスワードベースのキー導出関数)を使用することが重要です。このような関数は、ソルトの使用方法を指定しますは、ハッシュと一緒に。そうすれば、(他のユーザーから、または他のデータベース内の)同一のパスワードに対して同一のハッシュが生成されません。そのため、パスワードハッシュでは、ソルトが十分に大きく、適切にランダム化されている限り、レインボーテーブルを使用できません。
パスワードハッシュには、ソルトおよびハッシュ値を指定してパスワードを見つけようとする攻撃を大幅に遅くする可能性がある作業要素(反復カウントを使用して構成される場合もあります)も含まれています。saltとハッシュ値を含むデータベースが盗まれる可能性があるため、これは重要です。最後に、パスワードハッシュもメモリに負荷がかかる可能性があるため、ハッシュを計算するには大量のメモリが必要です。これにより、攻撃者が検索を高速化するために特別なハードウェア(GPU、ASIC、FPGAなど)を使用することが不可能になります。コショウや並列化の量などの他の入力または構成オプションも、パスワードハッシュで使用できる場合があります。
ただし、パスワードハッシュでH(X)
あっても、指定されたパスワードを誰でも確認できH(X)
ます。パスワードハッシュは依然として確定的であるため、誰かがすべての入力とハッシュアルゴリズム自体を知っている場合はX
、計算に使用H(X)
できます。もう一度、結果を比較できます。
一般的に使用されるパスワードハッシュは、bcrypt、scrypt、およびPBKDF2です。ありArgon2は、合理的に、最近のパスワードハッシュの競争の勝者である様々な形で。CrackStationには、パスワードのセキュリティを正しく行うための優れたブログ投稿があります。
攻撃者がハッシュ計算を実行してパスワードが正しいことを確認できないようにすることが可能です。このため、パスワードハッシュへの入力としてペッパーを使用できます。あるいは、AESなどの暗号と、CBCまたはGCMなどの動作モードを使用して、ハッシュ値を暗号化することもできます。ただし、これにはシークレット/キーを個別に保存する必要があり、パスワードハッシュよりも高いアクセス要件が必要です。
MD5は暗号化(一方向)ハッシュ関数であるため、直接デコードする方法はありません。暗号化ハッシュ関数の目的は、元に戻せないことです。
できることの1つは、ハッシュされたものを推測し、同じ関数でハッシュして、一致するかどうかを確認するブルートフォース戦略です。ハッシュ化されたデータは非常に推測しやすいものでない限り、長い時間がかかる可能性があります。
ハッシュは一方向の方法であるため、パスワードのハッシュをアルゴリズムに組み込んでプレーンテキストで戻すことはまだできません。しかし、人々がやったことは、ハッシュを生成してそれを大きなテーブルに格納することです。これにより、特定のハッシュを入力すると、ハッシュと一致するパスワードをテーブルでチェックし、そのパスワードを返します。それを行うサイトの例は http://www.md5online.org/です。最新のパスワードストレージシステムは、ソルティングアルゴリズムを使用してこれに対処し、登録時に同じパスワードをパスワードボックスに入力すると、異なるハッシュが生成されます。
いいえ、MD5に広範な脆弱性が見つかるまで、md5は一方向のハッシュ関数であるため、md5を復号化/元に戻すことはできません。もう1つの方法は、一部のWebサイトに大量のパスワードデータベースのセットがあるため、オンラインでMD5またはSHA1ハッシュ文字列をデコードできることです。私はhttp://www.mycodemyway.com/encrypt-and-decrypt/md5のようなウェブサイトを試してみましたが、うまく機能しましたが、ハッシュがデータベースに保存されている場合は、実際の文字列を取得できます。