دليل الأمان
لماذا Math.random غير آمنة لكلمات المرور
تعرف على سبب مناسبة Math.random لتأثيرات واجهة المستخدم ولكنها غير مناسبة لكلمات المرور أو رموز إعادة التعيين أو الرموز المميزة أو غيرها من الأسرار الحساسة أمنيًا.
ملخص
Math.random() هي دالة شبه عشوائية عامة في JavaScript. إنها مفيدة للرسوم المتحركة وسلوك واجهة المستخدم العشوائي والأمثلة والألعاب والمحاكاة. لكنها غير محددة للأمان التشفيري ولا ينبغي استخدامها لتوليد كلمات المرور أو رموز إعادة التعيين أو أسرار API أو مفاتيح التوقيع أو رموز الاسترداد.
المشكلة
يحتاج مولد كلمات المرور إلى عدم قابلية التوقع ضد المهاجم، وليس مجرد قيم تبدو متنوعة للمستخدم. لا توفر Math.random() ضمانًا أمنيًا تشفيريًا قياسيًا في المتصفح، وقد تختلف التطبيقات بين المحركات.
الخيار الأكثر أمانًا في المتصفح
توفر المتصفحات الحديثة crypto.getRandomValues() من خلال Web Crypto API. يستخدم PwdGen هذه الواجهة وأخذ العينات بالرفض، مما يتجنب التحيز في اختيار الأحرف. إذا كانت هذه الواجهة غير متوفرة، فإن السلوك الآمن هو إيقاف التوليد وشرح متطلبات التوافق.
كيفية مراجعة المولد
ابحث في المصدر عن Math.random. يجب ألا يستخدم مولد كلمات مرور جاد هذه الدالة لأحرف كلمة المرور. قد تظهر في الوثائق التي تشرح سبب عدم أمانها، ولكن ليس في مسار التوليد.
إرشادات مفصلة
يركز هذا الدليل على سبب عدم ملاءمة Math.random لكلمات المرور والأسرار. هو مكتوب للمطورين والطلاب ومستخدمي الأدوات الذين يتحققون مما إذا كان المولد يستخدم عشوائية آمنة، لذا فإن الهدف العملي ليس إنشاء ادعاء أمني دراماتيكي. الهدف هو اختيار عادة كلمة مرور يمكنها البقاء في الاستخدام اليومي: نماذج تسجيل الدخول ومديري كلمات المرور ولوحات المفاتيح المحمولة واسترداد الحساب والأجهزة المشتركة والخدمات العرضية ذات قواعد التحقق الغريبة. التوصية الآمنة مفيدة فقط إذا كان بإمكان شخص حقيقي اتباعها باستمرار.
أفضل نقطة بداية هي العشوائية بالإضافة إلى التفرد. العشوائية تعني أن القيمة تم اختيارها من مساحة كبيرة بواسطة مصدر عشوائي مناسب تشفيريًا، وليس اختراعها من تاريخ ميلاد أو اسم حيوان أليف أو نمط لوحة مفاتيح أو اقتباس مفضل. التفرد يعني أن نفس كلمة المرور لا تُستخدم في أي مكان آخر. كلمة مرور طويلة ولكنها معاد استخدامها يمكن أن تفشل بسرعة بعد اختراق واحد غير ذي صلة، بينما كلمة مرور فريدة عشوائية تحد من الضرر إلى الحساب الوحيد الذي استخدمت فيه.
لهذا الموضوع، الإعداد العملي هو crypto.getRandomValues مع أخذ العينات بالرفض بدلاً من Math.random. يمكنك تطبيق هذا الإعداد باستخدام دليل Web Crypto API ثم تخزين القيمة النهائية في مدير كلمات مرور موثوق. يقوم PwdGen بتوليد القيم محليًا في المتصفح باستخدام Web Crypto؛ لا يتم إرسال كلمة المرور المولدة إلى خادم PwdGen. هذا التصميم المحلي يقلل من التعرض من جانب الخادم، لكنه لا يحمي من كل تهديد. إضافة متصفح ضارة أو جهاز مخترق أو صفحة تصيد أو معالجة غير آمنة للحافظة يمكن أن تكشف السر بعد توليده.
المشكلات الأكثر شيوعًا التي يجب تجنبها هي التسلسلات شبه العشوائية القابلة للتنبؤ والتحيز النمطي والدوال العشوائية المخصصة والكود التجريبي المنسوخ إلى الإنتاج. هذه المشكلات مهمة لأن المهاجمين نادرًا ما يحتاجون إلى تجربة كل كلمة مرور ممكنة عندما تعطيهم العادات البشرية اختصارًا. حشو بيانات الاعتماد والتصيد وقوائم كلمات المرور المسربة وإساءة استخدام استرداد الحساب غالبًا ما تكون أكثر واقعية من البحث الرياضي البحت. لهذا السبب، أفضل نصيحة تجمع بين جودة كلمة المرور وضوابط مستوى الحساب مثل MFA ومفاتيح المرور وتخزين رموز الاسترداد والمراجعة المنتظمة للبريد الإلكتروني أو إعدادات الهاتف للاسترداد.
استخدم قائمة التحقق هذه عند تطبيق التوصية:
- لا تستخدم Math.random لكلمات المرور.
- استخدم Web Crypto في المتصفحات.
- استخدم Node crypto أو حزمة موثوقة في كود CLI.
- اختبر وجود كود احتياطي عرضي.
إذا رفض موقع الويب الإعداد المثالي، لا تجبر كلمة المرور على نمط أضعف يدويًا. اضبط متغيرًا واحدًا في كل مرة. إذا تم رفض الرموز، احتفظ بالأحرف الكبيرة والصغيرة والأرقام مفعلة وزد الطول. إذا كان الحد الأقصى للطول منخفضًا، استخدم أكبر طول مقبول وتأكد من أن القيمة فريدة. إذا كان يجب قراءة كلمة المرور بصوت عالٍ أو طباعتها أو كتابتها على شاشة تلفزيون أو جهاز توجيه، فكر في استبعاد الأحرف المربكة وزيادة الطول لتعويض الأبجدية الأصغر.
أخيرًا، تذكر حدود نصيحة كلمة المرور. كلمة المرور القوية هي طبقة دفاع واحدة، وليست ضمانًا. لا يمكنها جعل صفحة التصيد آمنة أو إصلاح البرامج الضارة أو تعويض خدمة تخزن بيانات الاعتماد بشكل سيء. العادة المفيدة مملة ولكنها دائمة: توليد قيمة فريدة، تخزينها بأمان، حماية مسار الاسترداد، واستبدالها بسرعة إذا اشتبهت في التعرض.
خطوة تالية آمنة
بعد قراءة هذا الدليل، قم بتدقيق حساب صغير واحد بدلاً من محاولة إصلاح كل شيء دفعة واحدة. اختر الحساب الذي سيسبب أكبر مشكلة إذا تم الاستيلاء عليه، وتأكد من أن كلمة مروره فريدة، وتحقق من البريد الإلكتروني للاسترداد وهاتف الاسترداد وطريقة MFA وتخزين رمز النسخ الاحتياطي. إذا كان أي جزء من هذه السلسلة ضعيفًا، قم بتحسين ذلك الجزء قبل الانتقال إلى الحسابات منخفضة المخاطر. هذا الترتيب يحافظ على قابلية إدارة العمل ويحمي الحسابات التي من المرجح أن يستخدمها المهاجمون كنقطة انطلاق. بالنسبة لسبب عدم أمان math.random لكلمات المرور، أفضل نتيجة هي عادة قابلة للتكرار: التوليد محليًا، التخزين بعناية، وتجنب إعادة الاستخدام.
الأسئلة الشائعة
هل Math.random مقبولة أبدًا؟
نعم، للتأثيرات البصرية والمحاكاة والعشوائية العادية لواجهة المستخدم، ولكن ليس لبيانات الاعتماد أو الرموز الأمنية.
ما الذي يجب أن تستخدمه مولدات كلمات المرور بدلاً من ذلك؟
يجب أن تستخدم مصدرًا عشوائيًا تشفيريًا مثل crypto.getRandomValues() في المتصفح.
هل يتراجع PwdGen إلى Math.random؟
لا. إذا كان Web Crypto غير متوفر، يعرض PwdGen تحذير توافق ولا يولد كلمات مرور باستخدام Math.random().