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