パスワード ハッシュを破ることが scriptkidies の新しい娯楽になったので、私はその問題について考え、斬新な (?) アイデアを思いつきました。
- パスをハッシュではなくオフセット+数値として保存します
- 数は 2 つの大きな素数の積です
- パスワードは数値に変換され、オフセットが追加され、その素数が数値の分割に使用されます。割り切れて、除数が 2 つの素数のうち大きい方の場合、パスワードは正しいです。
定義上、各ハッシュは一意であり、各パスワードはオフセットに応じてさまざまな方法でハッシュできます。1 つのハッシュを破るということは、数値を因数分解する必要があることを意味し (これは難しいことです)、それからより大きなプライム オフセットの数値に対応する単語を見つける必要があります (これは些細なことです)。
関数 f() を使用してパスワードをパスワード番号に変換する (重要ではありません) を生成するには、2^4096 より大きい 2 つのランダムな素数を生成します。大きい方の素数を取り、prime-passwordnumber=offset を計算します。素数を掛けると「数」になります。ストア番号とオフセット。
チェックする。関数 f() を使用してパスワードをパスワード番号に変換し、オフセットを追加して素数を見つけます。数を素数で割り、もう一方の素数を取得します。最初の素数が 2 つのうち大きい方であることを確認します。もしそうなら、パスワードは正しかった。
f() は、たとえば、大きな 2 進整数として理解されるパスワードの utf-8 エンコードである可能性があります。