كلمات المرور هي أقدم طريقة للمصادقة في تكنولوجيا المعلومات ، ولا تزال مستخدمة على نطاق واسع حتى اليوم. للأسف ، من المستحيل الاحتفاظ بكلمات مرور لجميع موارد الإنترنت في الذاكرة ، شريطة أن تكون جميعها مختلفة ومعقدة! هنا ، يأتي مديرو كلمات المرور لمساعدة الشخص الذي يتولى هذه المهمة: يتذكر الشخص كلمة مرور رئيسية واحدة فقط ، والتي تتيح الوصول إلى البقية.
لم يعجبني مديري كلمات المرور الحاليين: من غير الملائم مزامنة قاعدة بيانات كلمات المرور بين الأجهزة وأنظمة التشغيل المختلفة ؛ علاوة على ذلك ، غالبًا ما تكون برامج الإدارة محمية بشكل سيء . بمجرد أن كنت أقرأ مقالات عن التشفير ، وخطرت لي الفكرة: لماذا لا أقوم بإنشاء مدير كلمات مرور يقوم بحسابها بدلاً من تخزين كلمات المرور؟
الطريقة الأولى لتنفيذ هذه الفكرة التي تتبادر إلى الذهن هي وظائف تجزئة التشفير. للوهلة الأولى ، كل شيء رائع: نختار وظيفة ثابتة (على سبيل المثال ، SHA-3 في الإصدار 224 بت) ، ونعطيها كلمة المرور الرئيسية qwerty ونوع الحساب vk ، ونحصل على الفور على 56 حرفًا من المجموعة 0123456789abcdef. وعلى الفور وجدت اثنين من مشاريع مماثلة: اختراق و يحتمل أن اخترق... يواجه هذا النهج مشكلة كبيرة: تم تصميم وظائف تجزئة التشفير ، من بين أشياء أخرى ، بهدف أن تكون سريعة ومتساهلة مع الموارد ، وبالتالي من الممكن ترتيب قاموس أو هجوم كامل بكلمة المرور الرئيسية لموقع واحد على وحدة المعالجة المركزية (بطيئة نسبيًا) ، GPU ، FPGA (أسرع بكثير) ، ASIC (سريع جدًا). لتنفيذ مثل هذه الهجمات على خوارزميات التجزئة الشائعة دون استخدام التمليح ، يمكنك أيضًا استخدام جداول قوس قزح ، والتي تسرع بشكل كبير عملية التكسير على وحدة المعالجة المركزية.
لحسن الحظ ، هناك خيار تنفيذ آخر - وظائف للحصول على المفاتيح. باختصار ، يقومون بإجراء تجزئة ، ولكن ببطء نسبي (على سبيل المثال ، ثانية واحدة على معالج عادي) واستهلاك مرتفع نسبيًا للموارد (على سبيل المثال ، 16 ميغا بايت من ذاكرة الوصول العشوائي) لجعل هجمات القوة الغاشمة والقوة الغاشمة صعبة قدر الإمكان. من بين الوظائف الحديثة المألوفة بالنسبة لي ، PBKDF2 و bcrypt و scrypt ، يبدو scrypt هو الأفضل: تم إنشاؤه بناءً على تجربة الأولين ، حيث عارض بنجاح الحوسبة على وحدات معالجة الرسومات والدوائر الدقيقة (كل من FPGA و ASIC) ومصممًا لتحقيق المرونة في التخصيص لأي مهمة. فكرت في تنفيذ هذا المشروع ، لكن لسبب ما دفعته إلى الخلف. وعبثا.
عالم التشفير نديم قبيسيتم إنشاء مدير كلمات مرور npwd في JavaScript (يعمل كتطبيق سطح مكتب من خلال Node.JS). لقد قمت بتثبيت الأداة على جهاز كمبيوتر يعمل بنظام التشغيل Linux و Windows ، بالإضافة إلى كمبيوتر محمول Linux ، وبدأت في استخدامه في القتال ، وقد أحببته حقًا. تقوم بإدخال كلمة المرور الرئيسية الوحيدة ونوع الحساب (على سبيل المثال ، "twitter") في التطبيق ، وبعد بضع ثوانٍ تحتوي الحافظة الخاصة بك بالفعل على كلمة مرور معقدة محسوبة خصيصًا لهذا الحساب ، واختراق كلمة مرورك الرئيسية (اقرأ: جميع كلمات المرور الخاصة بك) عن طريق كلمة المرور لحساب واحد ستكون صعبة للغاية.
لكن كانت هناك مشكلة أيضًا. أعطى إصدار Windows كلمة مرور بالفعل بعد بضع ثوانٍ ، ولكن في نظام Linux (بما في ذلك على نفس الكمبيوتر!) استغرق الأمر 15 ثانية للحسابات ، وهو أمر مزعج. في البداية ، قمت بتخفيض ثابت واحد فقط ، مما جعل كلمة المرور الرئيسية أقل أمانًا ، ولكن بعد ذلك فكرت - لماذا لا تعيد كتابة التطبيق في لغة C ، لأنه من المحتمل أن يعمل بشكل أسرع! لقد شجعني بشكل خاص فكرة أن لديّ خطة لهذا المشروع لفترة طويلة ، لكنني كنت بطيئًا ، وقام شخص ما بتنفيذها قبلي.
بعد بضعة أيام من العمل المريح ، أنشأت مدير كلمات المرور الخاص بي cpwdمتوافق تمامًا مع الأصل. كان ممتعا! بعد قليل من التحسين ، تمكنت من تحقيق السرعة العالية المطلوبة. لم أحاول نقل cpwd إلى Windows ، لكن يجب أن يكون الأمر سهلاً. في صفحة المشروع على GitHub ، جمعت مجموعة من الروابط لمشاريع مماثلة في العالم الأكاديمي وخارجه - اتضح أن الفكرة قديمة جدًا في الواقع.
بالتأكيد ليست رصاصة فضية ، لكنها تعمل بالنسبة لي. أثناء عملية الاستخدام ، صادفت مشكلة: بعض المواقع لديها متطلبات مثيرة للاهتمام لكلمات المرور مثل "لا يزيد عن 20 حرفًا" ، "يجب أن يكون هناك حرف كبير وحرف صغير ورقم وحرف خاص" ، ونتيجة لذلك ، تتطلب كلمة مرور npwd / cpwd التي تم إنشاؤها أحيانًا عمل يدوي قبل الدخول ... لحسن الحظ ، لا يوجد الكثير من هذه المواقع.
تم نشر النص الأصلي على مدونتي في 7.08.15. لقد مرت 5 سنوات ، وما زلت أستخدم هذه الأداة.