13

一部のアプリケーション (または Web サイト) は、入力時にパスワードの複雑さを計算します。

通常、赤いバーが表示され、パスワードが長くなるとオレンジ、緑、さらに緑になり、より多くの文字クラス (小文字、大文字、句読点、数字など) が含まれます。

パスワードの複雑さを確実に計算するにはどうすればよいですか?

私は次のアルゴリズムを思いつきましたが、7 文字しかないため、Password1!「非常に強い」と「弱い」と評価されるという事実が懸念されます。]@feé:m

private int GetPasswordComplexity(string password)
{
    if (password.Length <= 4)
        return 1;

    int complexity = 0;

    int digit = 0;
    int letter = 0;
    int cap = 0;
    int other = 0;

    for (int i = 0; i < password.Length; i++)
    {
            if (char.IsDigit(password[i]) && i!=password.Length-1)
            digit = 1;
        else if (char.IsLower(password[i]))
            letter = 1;
        else if (char.IsUpper(password[i]) && i!=0)
            cap = 1;
        else
            other = 1;
    }

    complexity = digit + letter + cap + other;

    if (password.Length <= 7)
        complexity = Math.Min(3, complexity);

    return complexity;
}
4

4 に答える 4

32

すべての潜在的なルールに対してチェックする時間があれば、cracklib のようなものを使用することは非常に良いことです。何か手っ取り早いもの (たとえば JavaScript ベースの強度メーター) が必要な場合は、ブルート フォース攻撃に必要となる可能性のある推測の数を見積もることを検討してください。見られるすべての文字タイプについて、そのタイプの潜在的な文字の数に基づいて乗数を更新します。したがって、数字のみの場合、乗数は 10 になります。小文字のみの場合、乗数は 26 になります。両方の場合、乗数は 36 になります。つまり、パスワードの各文字に対して、ブルート フォース攻撃が行われます。最大 36 の異なる文字を試す必要があります。大文字と小文字、数字、句読点を含むパスワード

ブルート フォース方式で行われる順列の最大数を見積もるには、乗数をパスワードの桁数に等しい累乗にします。これにより、ブルート フォース攻撃を使用してパスワードを解読するのに必要な推測の最大数が得られます。各推測には 1 CPU サイクルが必要であると仮定し、最速のプロセッサを使用して、特定の数の順列が与えられた場合にパスワードを解読するのにかかる時間を計算します。たとえば、乗数が 10 で、パスワードが 10 文字だった場合、10,000,000,000 通りの組み合わせが考えられます。3GHz プロセッサでは、これには 10/3 * k または 3k 秒かかります (k は推測あたりのサイクル数で、通常は小さい)。明らかに、これは脆弱なパスワードです。

ここで、妥当なパスワード強度を表すいくつかの範囲を確立します。たとえば、大文字と小文字を含む 8 文字のパスワードが中程度の強度で最低限必要であると考える場合、カットオフは 52^8 または 3 GHz プロセッサで約 1.5 年になります (k = 1 と仮定)。数字を足すと、カットオフは 62^8 になり、3 GHz プロセッサでは約 8 年になります。

それを使用するには、表示される文字の種類を追跡し、適切な乗数を作成し、パスワードの長さに基づいて予想される順列を計算し、それを事前定義されたカットオフと比較して、パスワードの強度を判断するだけです.

于 2008-12-25T18:55:32.443 に答える
8

これにはcracklibを使用することをお勧めします。

于 2008-12-25T16:32:07.070 に答える
3

数字や大文字などを見たときに単純にフラグを設定するのではなく、それらにポイントを与えます。スコアシステムのようなもの。通常の文字は 1、数字は 2、特殊文字は 3 と数えます。

これで、文字数とパスワードの構成方法の両方が合計数に含まれるようになりました。弱いところと強いところに線を引けばいいだけです。

于 2008-12-25T16:28:32.397 に答える
1

また、辞書と照合する必要があります。アップルは、組み込みのパスワードチェッカーでこれを行っていると思います。

于 2008-12-25T21:03:29.830 に答える