الأحرف التي يجب تجنبها في كلمات المرور التي يتم إنشاؤها تلقائيًا

StackOverflow https://stackoverflow.com/questions/55556

سؤال

أحتاج إلى إنشاء بعض كلمات المرور، وأريد تجنب الأحرف التي يمكن الخلط بينها وبين بعضها البعض.هل هناك قائمة محددة من الشخصيات التي يجب أن أتجنبها؟قائمتي الحالية هي

il10o8B3Evu![]{}

هل هناك أي أزواج أخرى من الشخصيات يسهل الخلط بينها؟بالنسبة للأحرف الخاصة، كنت سأقتصر على تلك الموجودة تحت مفاتيح الأرقام، على الرغم من أنني أعلم أن هذا يختلف باختلاف جنسية لوحات المفاتيح الخاصة بك!

كسؤال متسابق، أود أن تكون كلمات المرور الخاصة بي "شبيهة بالكلمات"، هل لديك خوارزمية مفضلة لذلك؟

شكرًا :)

هل كانت مفيدة؟

المحلول

فيما يلي مجموعات الشخصيات التي يستخدمها ستيف جيبسون في أعماله "كلمة المرور الورقية المثالية" نظام.إنها "شخصيات يجب السماح بها" وليست "شخصيات يجب تجنبها"، لكنها تبدو معقولة جدًا لما تريد:

مجموعة قياسية من 64 حرفًا

!#%+23456789:=?@ABCDEFGHJKLMNPRS
TUVWXYZabcdefghijkmnopqrstuvwxyz

مجموعة أكبر من 88 حرفًا

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

بالنسبة لكلمات المرور القابلة للنطق، لست على دراية بالخوارزميات ولكن قد ترغب في إلقاء نظرة عليها أبغ و pwgen كنقطة بداية.

نصائح أخرى

الطريقة المفضلة لدي هي الحصول على قائمة كلمات مكونة من 3 و4 و5 أحرف.ثم حدد 2 منها على الأقل، ثم ضع رقمًا عشوائيًا مكونًا من رقمين أو رمزًا خاصًا (%&*@#$) بين كل كلمة.إذا كنت ترغب في ذلك، يمكنك تكبير حرف واحد لكل كلمة بشكل عشوائي.

اعتمادًا على متطلبات قوتك، سينتهي بك الأمر بكلمات مرور سهلة التذكر والتواصل مثل:

  • مكتب ليمون٪
  • ورقة&boy32hat

ضع في اعتبارك أنك أحيانًا تحصل على مجموعات مثيرة للاهتمام أو غير مناسبة من الكلمات (سأسمح لك باستخدام مخيلتك).عادةً ما يكون لدي زر يسمح بإنشاء كلمة مرور جديدة في حالة عدم إعجاب كلمة المرور المقدمة.

كقاعدة عامة، استخدم فقط الرموز التي يعرف الناس اسمها عادةً.على لوحة المفاتيح القياسية الأمريكية، سأتجنب ~`'/\^

أعتقد أن هذا أجاب على سؤال الراكب الخاص بك أكثر من سؤالك الرئيسي...

حظ سعيد!

يقرأ اختيار كلمات المرور الآمنة.

معلومة مثيرة للاهتمام من هناك:للحصول على كلمات مرور أكثر أمانًا، تأكد من ظهور بعض الأرقام والأحرف الخاصة في المنتصف.تقوم برامج التكسير بالتحقق منها في البداية وتنتهي عاجلاً.

للإضافة إلى إجابة جيم، يمكنك أيضًا استخدام قائمة الكلمات واستبدال أحرف معينة بشكل عشوائي برموز (@ لحرف A، أو 0 (صفر) لحرف O أو 5 لحرف S) و/أو إزالة حروف العلة من الكلمات .

  • lmn%مكتب
  • ص@ل&b0y32H@t

لا تزال في الغالب قابلة للقراءة من قبل الإنسان.

كخيار آخر، يمكنك استخدام خط أحادي المسافة/خط طرفي مثل الخط السريع لطباعة كلمات المرور.يجب أن تكون الشخصيات المتشابهة أكثر تميزًا بهذه الطريقة.

بالنسبة لعميل دولي منذ عدة سنوات، كان عليّ إنشاء كلمات مرور عشوائية وآمنة تم بعد ذلك دمجها بالبريد في المستندات بواسطة عميلي وإرسالها بالبريد العادي إلى المستلمين في 40 دولة.ولم أكن أعرف نوع الخط الذي سيتم استخدامه في المستندات، فقد استخدمت قائمة من الأحرف مثل Steve Gibson 64 حرفا تم تعيينه لإزالة الارتباك بين الحروف الرسومية المتشابهة.

ولجعل كلمات المرور الناتجة قابلة للنطق، وبالتالي أسهل في التذكر، قمت بربط الحروف الساكنة والمتحركة معًا، مع إضافة بعض الحروف الساكنة (sh، th، wh، وما إلى ذلك) إلى المزيج.

لتقليل فرص إنشاء كلمات غير لائقة أو مسيئة (باللغة الإنجليزية أو بلغات المستلمين)، قمت بتقييد تشغيل أحرف ألفا المتتالية إلى اثنين، مع أرقام أو أحرف ترقيم بينهما:

Es4tU$sA6
wH@cY8Go2

بالنظر إلى طريقتي الآن، أدرك أن هناك مجالًا للتحسين في خوارزمية عدم الملاءمة.باستخدام القواعد المذكورة أعلاه فقط، أصبح من الممكن الآن بعض الكلمات المسيئة بعد استبدال بعض الأرقام وعلامات الترقيم بالحروف.

بالنسبة لكلمات المرور التي يمكن قراءتها بواسطة الإنسان، استخدمت مؤخرًا برنامج 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;
}

في دراستي العليا (الهندسة الكهربائية، التقنية)، تمت تهيئة جميع حسابات الكمبيوتر بكلمات مرور، أفترض أنها تم إنشاؤها بواسطة أداة مساعدة قياسية لنظام التشغيل Linux.وهي تتألف من ثلاثة مقاطع عشوائية، مع ثلاثة أحرف صغيرة في كل مقطع لفظي.وكانت النتيجة آمنة إلى حد معقول (في حدود المليارات من المجموعات المحتملة) ومع ذلك كانت واضحة جدًا لدرجة أنني ما زلت أستخدم بعض كلمات المرور هذه بعد مرور أكثر من عقد من الزمن.مثال جيمس هو دليل ممتاز على ذلك.

تعليق على كلمات المرور بشكل عام من متخصص في أمن الشبكات:إنهم فظيعون، لعدة أسباب، منها:

  • بشكل عام، يمكن اختراقها بسهولة، سواء من خلال الهندسة الاجتماعية أو باستخدام برامج الهجوم، خاصة إذا كنت تعرف ذلك أي شئ عن هدفك.

    مثال 1: لقد كنت بحاجة مؤخرًا إلى مراجعة مستند فني محمي بكلمة مرور.بالنظر إلى التاريخ، عرفت من هو الكاتب التقني المقيم لدينا في ذلك الوقت، وكتبت الكلمة الأولى التي خطرت في ذهني، وفتحت المستند على الفور.

    مثال 2: تسمح برامج كسر كلمات المرور القياسية للمخترق بتحديد مجموعة من القواعد التي تعمل على القاموس الذي يوفره المستخدم.من السهل استبدال أحرف معينة بـ $ymb01$، أو ترجمتها إلى 1337، وما إلى ذلك.

  • كلمات المرور "الآمنة" ليست كذلك.نظرًا للعدد الهائل من كلمات المرور التي يحتاج معظم الأشخاص إلى تذكرها، فإن الطريقة الأكثر شيوعًا "لتذكر" كلمة مرور "قوية" مثل "a4$N!8_q" هي كتابتها على قطعة من الورق (أو، الأسوأ من ذلك، تخزينها في ملف نصي).'قال ناف.

إذا كنت بحاجة حقا يؤمن المصادقة، متعدد العوامل (أو عاملين) هي الآلية المقبولة في الصناعة.عادة ما يكون "العاملان" شيئًا لك يملك (مثل بطاقة الوصول) وشيء لك يعرف التي تمكنه (مثل رقم التعريف الشخصي).ولا يعمل أي منهما بدون الآخر، فأنت بحاجة إلى كليهما.

ومن ناحية أخرى، فكر في مستوى الأمان الذي تحتاجه حقًا.ماذا تحمي؟ما مدى رغبة "الأشرار" في الحصول عليه، وما هي العواقب إذا فعلوا ذلك؟هناك احتمالات ، "سرية!" أكثر من جيد بما فيه الكفاية.:-)

أنا لا أحب نهج قائمة الكلمات.على سبيل المثال، في /usr/share/dict/words على OSX، هناك 5110 كلمة مكونة من 4 أحرف.يؤدي استخدام اثنين منهم بحرف فاصل إلى إنتاج مجموعات تصل إلى 600 مليون تقريبًا.ولكن إذا استخدمت مجموعة الأحرف مباشرة مع مولد أرقام عشوائي قوي، فسيكون لديك 88^9 كلمة مرور محتملة، و3.16e+17 مجموعة.

وفي كلتا الحالتين، فإن الهجوم المحتمل ضد هذا النظام سيكون ضد مولد الأرقام العشوائية، لذا تأكد من أنك تستخدم مولدًا قويًا من حيث التشفير.إذا كنت تستخدم دالة rand القياسية الخاصة بـ PHP، فسيتم مهاجمتها عن طريق تسجيل وإعادة تعيين آلاف كلمات المرور لأخذ عينات من حالة RNG ومن ثم التنبؤ بحالة RNG المتبقية، مما سيقلل من عدد كلمات المرور المحتملة التي يحتاج المهاجم إلى اختبارها.

قد يكون أسلوب البداية هو إنشاء مقاطع إنجليزية صالحة في الغالب، ومزجها، ثم إجراء تحويل نصي> l33t.لقد تم إنجاز العمل على قواعد اللغة الطبيعية للأجيال، لذلك قد يكون أحد هذه الأبحاث مفيدًا.

على سبيل المثالآه ul ing كلها مقاطع صحيحة أو قريبة منها ...امزجهم -> إنجولا...l33t it -> 1ngu4h.هل هو الأفضل هناك؟ناه.لكنها على الأقل شبه قابلة للنطق (إذا كنت تتحدث L33t) وأكثر أمانًا من الناحية الحسابية.

إذا كنت مهتمًا بإنشاء كلمات مرور قابلة للنطق، فهناك منفذ C# على:http://www.hoogervorst.ca/arthur/?attachment_id=1708

ستجد داخل الكود روابط مفيدة لمعرفة المزيد.http://www.multicians.org/thvv/gpw.html

حظ سعيد.جوامع

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;

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top