100 万シンボルのパスワードの MD5 ハッシュを取得し、最初の 999,992 シンボルを取得しました。最後の 8 桁をブルートフォースする必要があります。最初のシンボルのハッシュ (ベース ハッシュと呼びましょう) を事前にカウントしてから、8 文字の長さの文字列をブルートし、そのハッシュをベース ハッシュに追加して、正しいパスの検索を高速化できますか? どのアルゴリズムを使用する必要がありますか、またはどのソフトウェアが役に立ちますか?
1 に答える
はい、可能です。MD5 は、ブロック単位でハッシュを実行するMerkle-Damgård 構造に基づいています。多数のブロックをハッシュしてから、ハッシュ関数の状態を保存し、それを開始点として使用して、残りのブロックに対してさまざまな可能性を試すことができます。
ドキュメント (私はテストしていません) に基づいて、Javaを呼び出すと、ハッシュ関数の現在の状態がコピーされると思います。それを使用して、既知の文字から部分ハッシュを作成し、推測ごとにクローンを作成できます。これは、MD5 実装が実際に複製をサポートしていることを前提としています。(使用する言語とライブラリによっては) 独自の MD5 実装を作成しなければならない可能性があります。clone()
MessageDigest
MD5 のブロック サイズは 512 ビット (64 文字) であり、パスワードの長さ (100 万) はその整数倍であることに注意してください。これは、パスワード文字がデータの最後のブロックを完全に埋め、ハッシュ関数がパディングのために追加のブロックを必要とすることを意味します。したがって、既知の最初の 999,936 文字の部分ハッシュを事前に計算し、残りの既知の 56 文字と推測している 8 文字から最終的なデータ ブロックを生成し、その後にパディング ブロックを追加します。
ただし、 Java のような実装MessageDigest
では、物事をブロックに分割する詳細を処理する必要があります。おそらく(繰り返しますが、私はテストしていません) を作成し、既知の 999,992 バイトをMessageDigest
呼び出してから を呼び出すことができます。digest(byte[])
clone()