これは、PHPでハッシュされたパスワードを解読する正しい方法ですか?
password_hash
パスワードをハッシュする関数(PHPバージョン7.3)。
次に、Pythonスクリプトを使用してWordリストを作成しました。サイズは約1GBです。
次に、PHPスクリプトを作成して、そのWordリストを読み取り、password_hash
。
最後に、ターミナルを使用してPHPスクリプトを実行しました。
正常に動作していますが、パスワードを解読するのに時間がかかりすぎています。学生として、自分のスクリプトとツールを書くのが好きです。より良いパフォーマンスと効率でこれを行う方法についてのアイデアはありますか?
また、パスワードクラッキングにクラスタとGPUを使用する方法について検索しましたが、それが役立つかどうかはわかりません。
最新のハッシュ手法(password_hash
が使用)は意図的に低速であり、実行しようとしていることを正確に実行できません。ほとんどは、GPUとの並列化に対してさえ耐性があります。
したがって、最新のパスワードアルゴリズムに対して1 GBのパスワードリストの実行を高速化することが目標である場合、答えは1つだけです。巨大なコンピューティングクラスターですべてを実行せずに実行する方法はありません。それでも、十分に長いパスワードは文字通り解読できない可能性があります。
あなたがしようとしていることを達成することはできません。
「これを行うことはできません」というのは、いくつかの難しい数値を使用する可能性がある種類のステートメントです
ハッシュ率
パスワードを解読するには、まずハッシュをテストできる速さを知る必要があります。 4つのGPUを備えたクラッキングリグを使用して、誰かが Ashley Madison data dump でパスワードをクラックしようとしたとき、私は実際の例から惜しみなく借りています。これは、一般的なホームユーザーがアクセスできるハードウェアよりはるかに優れています。その場合、bcryptはコストファクタ12(別名4069ラウンドのハッシュ)を使用するように構成され、4 GPUリグは1秒あたり156ハッシュしか管理できませんでした。コスト係数が低いほど、ハッシュレートは急速に上昇します。 PHPはデフォルトで10を使用します。これは単純に4倍のハッシュレートをもたらします。楽しみのために切り上げ、750ハッシュ/秒をヒットしたと仮定します。
ハッシュ
次に、解読しようとしているパスワードの数を知る必要があります。いくつかの例を使用してみましょう:考えられるすべての4文字のパスワード(数字、文字、10の特殊文字)、考えられるすべての6文字のパスワード、考えられるすべての8文字のパスワード、またはパスワードが入った1Gバイトのファイル。これは、各リストに含まれるパスワードの数です。
72^4 = ~27,000,000
の組み合わせ72^6 = ~74,000,000,000
の組み合わせ72^8 = ~700 trillion
の組み合わせハッシュ時間
ハッシュしたいパスワードの数とハッシュレート(750 /秒)がわかっているので、簡単な計算により、最上位のハッシュアルゴリズムでこれらのリストを実行するのにかかる時間がわかります。
より現実的な数値については、自分のマシンのCPUの1つを使用してハッシュレートを概算し、毎秒約10ハッシュを管理しました。 thatハッシュレートを使用:
自分で6ダースの高品質GPUを購入します。デフォルトのコストファクターを使用するとすれば、考えられるすべての4桁のパスワードを1日で解読できます。 6桁のパスワードをだけ試してみてください。それでも何年もかかります。パスワードが入った1 GBのファイルは、時間を推測するのが困難ですが、現実的には、GPUの束が手助けしていても、実行に数日かかるでしょう。
私はConor Manconeの答えが本当に好きです。私が追加する唯一のことは、おそらく最も漏えいしたパスワードを最初にチェックすることにより、おそらく以前に漏らされたパスワードのリストまたはターゲットについて知っていること(例えば、地元のスポーツチーム)を使用することによって効率を改善できることです。