العربية

أدوات النص واليومية · مولد كلمة المرور

crypto.getRandomValues مقابل Math.random: سبب أهمية كلمات المرور

· كيف يعمل

كلمات المرور تشفير الويب العشوائية

ينتهي مسار عشوائي ضعيف بينما يستمر مسار Web Crypto في رموز كلمة المرور
الرسم التوضيحي المتجه الأصلي ToolAcre

يشرح الفرق بين مولد الأرقام العشوائية للأغراض العامة في المتصفح ومولد التشفير الخاص به، ولماذا تعد القدرة على التنبؤ قاتلة لكلمات المرور، وكيفية معرفة الأداة التي تستخدمها.

عشوائي بما يكفي للعبة النرد، وليس لكلمة المرور - وهما نوعان من العشوائية التي يقدمها المتصفح

يمكن أن يقدم المتصفح أكثر من مصدر واحد للقيم التي تبدو غير منتظمة، ولكن الاضطراب البصري ليس دليلاً على أن التسلسل مناسب لبيانات الاعتماد. ToolAcre يرسم حدودًا صارمة للمنتج: كل اختيار كلمة واختيار محدد واختيار حرف وتبديل عشوائي يمر عبر وظيفة عدد صحيح آمنة واحدة مدعومة بـ `crypto.getRandomValues`. إذا تعذر استخدام API، فستقوم الصفحة بتعطيل الإنشاء بدلاً من إنتاج بديل ذي مظهر معقول.

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

الهدف من Math.random هو العشوائية الزائفة السريعة والمصنوعة والتي يمكن إعادة بناء مخرجاتها من خلال بعض الملاحظات

يصف المصنف Math.random بأنه عشوائية زائفة يمكن إعادة بنائها من خلال بعض الملاحظات، ولكن هذه مطالبات تنفيذ عامة لا ينشئها هذا المستودع لكل محرك JavaScript. الحقيقة المحلية أبسط وأقوى بالنسبة لهذا المنتج: ملفات منشئ الإنتاج لا تستدعي `Math.random`. يقوم الاختبار على مستوى المصدر بإزالة التعليقات، ومسح التعليمات البرمجية القابلة للتنفيذ، ويفشل إذا ظهر مثل هذا الاستدعاء في أي مكان في المحرك أو تطبيق كلمة المرور.

يمنع هذا التمييز المقالة من تحويل قاعدة التنفيذ إلى محاضرة عالمية لسجل المتصفح. لا يحتاج ToolAcre إلى تمييز كل خوارزمية Math.random الممكنة لرفض API لإنشاء كلمة المرور. تقبل حزمتها Web Crypto أو المصدر الآمن المحقون الذي تستخدمه الاختبارات، ولا تعرض أي خيار إنتاج للبذرة أو الوضع الحتمي أو التراجع الضعيف.

ما يثبته هذا المستودع بشأن Math.random: أنه غائب عن عملية إنتاج الإنتاج

يبحث `createWebCryptoSource` عن `getRandomValues` القابل للاستدعاء، ثم يقوم بتغليف هذه الطريقة كمصدر عشوائي للحزمة. يقوم التطبيق بإجراء فحص إضافي قبل تمكين عناصر التحكم: فهو يطلب من كائن التشفير العام ملء مصفوفة مكتوبة مكونة من عنصر واحد داخل كتلة المحاولة. يؤدي ذلك إلى اكتشاف البيئات المقيدة حيث توجد الخاصية ولكن يتم التخلص منها عند استخدامها، بدلاً من الثقة في التحقق السطحي من الميزات.

يتوقف المصدر عند حدود المتصفح API. ولا يثبت أي مجموعة من أنظمة التشغيل أو تعليمات الأجهزة أو تصميم إعادة النشر يقع أسفل متصفح معين. تختلف هذه التفاصيل أسفل الواجهة وتحتاج إلى وثائق النظام الأساسي. ما يثبته الكود هو أن البايتات تصل عبر طريقة Web Crypto المسماة ولا تتم محاولة هذا الإنشاء عندما يفشل المسبار.

ما يفعله crypto.getRandomValues هنا: تعبئة المصفوفات المكتوبة من خلال المتصفح API

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

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

قراءة الكود - كيفية التحقق من API التي تستخدمها الصفحة، ولماذا من الأسهل الوثوق بالصفحات المفتوحة والقابلة للفحص

تبدأ قراءة الكود عند `packages/password-generator/src/index.js`، الذي ينص عقده على أن كل قرار عشوائي يصل إلى `secureRandomInt`. يعرض ملف التنفيذ بعد ذلك `getRandomValues` وأخذ عينات الرفض والأخطاء الصريحة. أخيرًا، `no-math-random.test.js` ومجموعة أمان كلمات المرور الأوسع تجعل الضمان السلبي قابلاً للتنفيذ بدلاً من ترك "نحن لا نستخدم Math.random أبدًا" كتعليق لم يتم اختباره.

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

مثال عملي - نفس روتين انتقاء الكلمات المكتوب في كلا الاتجاهين، وما يمكن أن يفعله المهاجم بكل منهما

فكر في طلب لعدد صحيح أدناه 100. يحتاج `secureRandomInt` إلى بايت واحد، يحتوي نطاقه على قيم 256. فهو يقبل فقط البادئة الأكبر القابلة للقسمة على 100، والتي تنتهي قبل 200، ويرفض الذيل المتبقي. يقوم الاختبار الحتمي بتغذية البايت 200 متبوعًا بالبايت 7. يتجاهل التنفيذ 200 ويعيد 7؛ كان من الممكن أن يُرجع اختصار modulo المباشر صفرًا من البايت المرفوض.

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

مثال عملي: تتبع رسمًا محددًا عبر مسار SecureRandomInt الذي تم شحنه

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

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

الوجبات الجاهزة - يستخدم مولد كلمات المرور مولد الأرقام العشوائية المشفرة للمتصفح، ويمكنك التحقق من ذلك من الصفحة نفسها

خيار ToolAcre الذي يمكن التحقق منه هو التشفير أو لا شيء. تستدعي الصفحة المتصفح API أثناء اكتشاف الدعم، وتعطل عناصر التحكم عند فشلها، وتسمح للمحرك بطرح `InsecureRandomError` إذا وصل الجيل بطريقة أو بأخرى إلى نفس الحالة المفقودة. لا يوجد Math.random احتياطي مخفي خلف أي من الفرعين.

استخدم هذا النمط عند مراجعة المولد: حدد المصدر، وتتبع كل رسم محدد، وافحص الاختزال والخلط، وافرض مسار المصدر غير المتاح. ثم قم بتقييم الجهاز والوجهة بشكل منفصل. يعد المصدر العشوائي الصوتي ضروريًا لوظيفة هذا المولد، ولكنه ليس شهادة عالمية طوال عمر بيانات الاعتماد.