28

いくつかのパスワードを生成する必要があります。互いに混同される可能性のある文字は避けたいと考えています。避けるべきキャラクターの決定的なリストはありますか? 私の現在のリストは

il10o8B3Evu![]{}

他に混同しやすい文字の組み合わせはありますか? 特殊文字については、キーボードの国籍によって異なることはわかっていますが、数字キーの下にあるものに限定するつもりでした!

ライダーの質問として、パスワードを「wordlike」にしたいのですが、そのための好ましいアルゴリズムはありますか?

ありがとう :)

4

11 に答える 11

47

Steve Gibson が「Perfect Paper Password」システムに使用する文字セットを次に示します。それらは「避けるべき文字」ではなく「許可する文字」ですが、あなたが望むものにはかなり合理的です:

64 文字の標準セット

!#%+23456789:=?@ABCDEFGHJKLMNPRS
TUVWXYZabcdefghijkmnopqrstuvwxyz

88 文字のより大きなセット

!"#$%&'()*+,-./23456789:;<=>?@ABCDEFGHJKLMNO
PRSTUVWXYZ[\]^_abcdefghijkmnopqrstuvwxyz{|}~

発音可能なパスワードについては、私はそのアルゴリズムに精通していませんが、出発点としてAPGpwgenを検討することをお勧めします。

于 2008-09-11T01:24:43.760 に答える
9

私が好む方法は、3 文字、4 文字、および 5 文字の単語の単語リストを取得することです。次に、それらのうち少なくとも 2 つを選択し、ランダムな 2 桁の数字または特殊記号 (%&*@#$) を各単語の間に配置します。必要に応じて、ランダムに単語ごとに最大 1 文字まで大文字にすることができます。

強度要件に応じて、次のような覚えやすく伝達しやすいパスワードになります。

  • レモン%デスク
  • paper&boy32hat

ときどき、単語の興味深い組み合わせや不適切な組み合わせが表示されることを覚えておいてください (想像力を働かせます)。通常、提示されたパスワードが気に入らない場合は、新しいパスワードを生成できるボタンがあります。

原則として、人々が一般的に名前を知っている記号のみを使用してください。米国標準キーボードでは ~`'/\^ は避けます

これは、主な質問よりもライダーの質問に答えていると思います。..

幸運を!

于 2008-09-11T00:37:48.117 に答える
7

安全なパスワードの選択をお読みください。

そこからの興味深い情報: より安全なパスワードを得るには、いくつかの数字と特殊文字が真ん中にあることを確認してください。クラッキング プログラムは、最初にそれらをチェックし、すぐに終了します。

于 2008-09-11T04:18:23.217 に答える
3

別のオプションとして、クーリエのような等幅/端末フォントを使用してパスワードを印刷することもできます。似たようなキャラクターは、そのようにもっと区別できるはずです。

于 2008-09-11T02:25:17.313 に答える
3

数年前、海外のクライアントのために、ランダムで安全なパスワードを生成しなければなりませんでした。このパスワードは、クライアントによってドキュメントにメールマージされ、郵便で 40 か国の受信者に送信されました。ドキュメントで使用する書体が不明だったので、Steve Gibson の64 文字セットのような文字のリストを使用して、類似したグリフ間の混乱を排除しました。

結果のパスワードを発音可能にして覚えやすくするために、子音と母音を組み合わせて、いくつかの子音の有向グラフ (sh、th、w など) をミックスに追加しました。

不適切または不快な単語が (英語または受信者の言語で) 生成される可能性を減らすために、連続するアルファベット文字の実行を 2 つに制限し、その間に数字または句読点を入れます。

Es4tU$sA6
wH@cY8Go2

今自分のやり方を振り返ってみると、不適切アルゴリズムには改善の余地があったことに気づきました。上記のルールだけを使用すると、一部の数字と句読点が文字に置き換えられているため、不快な単語が発生する可能性があります。

于 2008-09-15T17:16:22.597 に答える
3

ジムの答えに追加するには、単語リストを使用して、特定の文字をランダムに記号 (A の場合は @、O の場合は 0 (ゼロ)、S の場合は 5) に置き換えたり、単語から母音を削除したりすることもできます。 .

  • lmn%デスク
  • p@per&b0y32H@t

まだほとんど人間が読めます。

于 2008-09-11T01:16:54.417 に答える
2

私の (電気工学、技術者) 大学院では、すべてのコンピューター アカウントが、標準の Linux ユーティリティによって生成されたパスワードで初期化されていました。それらはランダムな 3 つの音節で構成され、各音節に 3 つの小文字が含まれていました。その結果、かなり安全であり (数十億通りの組み合わせが可能)、非常に発音しやすいので、10 年以上経った今でもこれらのパスワードのいくつかを使用しています。ジェームスの例は、このことの優れたデモンストレーションです。

一般的なパスワードに関するネットワーク セキュリティの専門家からのコメント: パスワードは、次のようないくつかの理由でひどいものです。

  • 一般に、ソーシャル エンジニアリングまたは攻撃ソフトウェアを使用して簡単に破ることができます。特に、ターゲットについて 何か知っている場合は特にそうです。

    例 1: 最近、パスワードで保護された技術文書を改訂する必要がありました。日付を見て、私たちの Tech Writer が当時誰であるかを知り、頭に浮かんだ最初の単語を入力し、すぐにドキュメントのロックを解除しました。

    例 2: 標準的なパスワード クラッキング プログラムを使用すると、クラッカーは、ユーザー提供の辞書で動作する一連のルールを指定できます。特定の文字を $ymb01$ に置き換えたり、1337 に変換したりするのは簡単です。

  • 「安全な」パスワードはそうではありません。ほとんどの人が覚えなければならないパスワードの数が非常に多いことを考えると、「a4$N!8_q」のような「強力な」パスワードを「覚える」ための最も一般的な方法は、それを紙に書くことですテキストファイル)。'言っ途切れる。

本当に安全な認証が必要な場合は、多要素(または2 要素) が業界で受け入れられているメカニズムです。「2 つの要素」とは、通常、ユーザーが持っているもの(アクセス カードなど) と、それを有効にするために知っているもの (PIN など) です。どちらか一方がなければ機能しません。両方が必要です。

一方で、本当に必要なセキュリティのレベルを考慮してください。何を守っているの?「悪者」はどれだけそれを手に入れたいと思っているのでしょうか。チャンスは「Its@Secret!」です。十分すぎるほどです。:-)

于 2008-10-28T05:02:40.243 に答える
2

人間が読めるパスワードの場合、私は最近、以下のような PHP スクリプトを使用しました。うまくいきました。確かに、パスワードは非常に安全ではありません (辞書攻撃を受けやすいため)。ただし、この関数はそのまま使用するべきではありません。説明のためのものです。

function generatePassword($syllables = 2, $use_prefix = true)
{

    // Define function unless it is already exists
    if (!function_exists('arr'))
    {
        // This function returns random array element
        function arr(&$arr)
        {
            return $arr[rand(0, sizeof($arr)-1)];
        }
    }

    // Random prefixes
    $prefix = array('aero', 'anti', 'auto', 'bi', 'bio',
                    'cine', 'deca', 'demo', 'dyna', 'eco',
                    'ergo', 'geo', 'gyno', 'hypo', 'kilo',
                    'mega', 'tera', 'mini', 'nano', 'duo',
                    'an', 'arch', 'auto', 'be', 'co',
                    'counter', 'de', 'dis', 'ex', 'fore',
                    'in', 'infra', 'inter', 'mal', 
                    'mis', 'neo', 'non', 'out', 'pan',
                    'post', 'pre', 'pseudo', 'semi',
                    'super', 'trans', 'twi', 'vice');

    // Random suffixes
    $suffix = array('dom', 'ity', 'ment', 'sion', 'ness',
                    'ence', 'er', 'ist', 'tion', 'or',
                    'ance', 'ive', 'en', 'ic', 'al',
                    'able', 'y', 'ous', 'ful', 'less',
                    'ise', 'ize', 'ate', 'ify', 'fy', 'ly'); 

    // Vowel sounds 
    $vowels = array('a', 'o', 'e', 'i', 'y', 'u', 'ou', 'oo', 'ae', 'ea', 'ie'); 

    // Consonants 
    $consonants = array('w', 'r', 't', 'p', 's', 'd', 'f', 'g', 'h', 'j', 
                        'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'qu');

    $password = $use_prefix?arr($prefix):'';
    $password_suffix = arr($suffix);

    for($i=0; $i<$syllables; $i++)
    {
        // selecting random consonant
        $doubles = array('n', 'm', 't', 's');
        $c = arr($consonants);
        if (in_array($c, $doubles)&&($i!=0)) { // maybe double it
            if (rand(0, 2) == 1) // 33% probability
                $c .= $c;
        }
        $password .= $c;
        //

        // selecting random vowel
        $password .= arr($vowels);

        if ($i == $syllables - 1) // if suffix begin with vovel
            if (in_array($password_suffix[0], $vowels)) // add one more consonant 
                $password .= arr($consonants);

    }

    // selecting random suffix
    $password .= $password_suffix;

    return $password;
}
于 2008-09-11T19:49:49.843 に答える
1

最初のアプローチは、ほぼ有効な英語の音節を生成し、それらを混ぜ合わせてから、text->l33t 変換を投入することです。世代別の自然言語文法に関する作業が行われているため、そのうちの 1 つが役立つ可能性があります。

たとえば、すべて有効な音節またはそれに近い音節です...それらを混ぜてください -> Ingulah...l33t it -> 1ngu4h. そこは最高ですか?いや。しかし、少なくとも準発音可能 (l33t を話す場合) であり、計算上より安全です。

于 2008-10-14T15:15:06.917 に答える
1

私は単語リストのアプローチが好きではありません。たとえば、OSX の /usr/share/dict/words には、5110 個の 4 文字の単語があります。それらのうちの 2 つを区切り文字と共に使用すると、最大 6 億の組み合わせが生成されます。しかし、強力な乱数ジェネレーターで文字セットを直接使用すると、88^9 の可能なパスワード、3.16e+17 の組み合わせが得られます。

いずれにせよ、このシステムに対する攻撃は乱数ジェネレーターに対するものになる可能性が高いため、暗号的に強力なものを使用していることを確認してください。PHP の標準の rand 関数を使用すると、何千ものパスワードを登録およびリセットして RNG 状態をサンプリングし、残りの RNG 状態を予測することによって攻撃されます。これにより、攻撃者がテストする必要がある可能性のあるパスワードの数が減ります。

于 2008-09-11T19:35:26.167 に答える
1
function random_readable_pwd($length=12){
    // special characters
    $sym="!\"§$%&/()={[]}\,.-_:;@>|";

    // read words from text file to array
    $filename="special.txt";
    if (!file_exists($filename)) { die('File "'.$filename.'" is not exists!'); }
    $lines = file($filename);
    foreach ($lines as $line_num => $line) {
        $line=substr($line, 0, -2);
        $words[].=$line;
    }

    // Add words while password is smaller than the given length
    $pwd = '';
    $ran_date=date("s");
    while (strlen($pwd) < $length){
        $r = mt_rand(0, count($words)-1);
        // randomly upercare word but not all in one time
        if ($ran_date % 3 == 0) $words[$r]=ucwords($words[$r]);
        $pwd .= $words[$r];
        //randomly add symbol
        if ($ran_date % 2 == 0) $pwd .= $sym{mt_rand(0,strlen($sym))};
        $ran_date++;
    }

    // append a number at the end if length > 2 and
    // reduce the password size to $length
    $num = mt_rand(1, 99);
    if ($length > 2){
        $pwd = substr($pwd,0,$length-strlen($num)).$num;
    } else { 
        $pwd = substr($pwd, 0, $length);
    }

    return $pwd;

}
于 2012-03-10T23:30:54.557 に答える