ما ملف htpasswd
تتحقق المصادقة الأساسية في أباتشي من الزوار بالرجوع إلى ملف نصي بسيط فيه مستخدم واحد في كل سطر، يُكتب بالشكل: اسم المستخدم ثم نقطتان ثم تجزئة كلمة المرور، مثل admin:$2y$10$…. ولا يخزّن الخادم كلمة المرور نفسها، بل يجزّئ ما يكتبه المستخدم عند الدخول ويقارن النتيجة. ويُسمّى الملف عادةً .htpasswd، وينبغي أن يكون خارج المجلد العام للموقع حتى لا يستطيع أحد تنزيله. وتقرأ صيغة الملف نفسها خوادم ويب أخرى ولوحات تحكم استضافة كثيرة.
لماذا bcrypt هو الخيار الصحيح
إذا تسرّب الملف يومًا فسيحاول المهاجمون تخمين كلمات المرور دون اتصال. وقد صُممت bcrypt لتكون بطيئة، وتضيف ملحًا عشوائيًا، ويجعل معامل التكلفة كل تخمين أغلى؛ إذ تضاعف كل درجة منه حجم العمل. فعند التكلفة 10 لا تجرّب بطاقة رسوميات حديثة إلا آلاف التخمينات في الثانية، مقابل مليارات مع التجزئة العادية. وقد قبل أباتشي bcrypt منذ الإصدار 2.4.4، ويكتبها الأمر htpasswd بالبادئة $2y$، وهي البادئة التي تستخدمها هذه الأداة أيضًا.
لماذا صيغ SHA1 وcrypt وMD5 العادية ضعيفة
تخزّن صيغة {SHA} تجزئة SHA-1 لكلمة المرور دون ملح، فتعطي كلمات المرور المتطابقة أسطرًا متطابقة، وتكسر الجداول المحسوبة مسبقًا والأجهزة السريعة كلمات المرور الشائعة في لحظات. أما صيغة crypt القديمة فتعتمد على DES، ولا تنظر إلا إلى أول 8 أحرف، وملحها صغير جدًا. وصيغة APR1-MD5 أفضل، فلها ملح و1,000 جولة من MD5، لكن MD5 سريعة جدًا حتى إن بطاقة رسوميات واحدة تختبر ملايين التخمينات في الثانية. لذلك لا تقدّم هذه الأداة صيغتي SHA1 وcrypt أصلًا، وتصف APR1 بأنها خيار احتياطي.
اختيار معامل التكلفة في bcrypt
تستخدم أداة htpasswd في أباتشي التكلفة 5 افتراضيًا، وهي سريعة لكنها ضعيفة بمعايير اليوم، والتكلفة 10 حل وسط معقول. والتكلفة الأعلى تُبطئ كل عملية دخول أيضًا، لأن الخادم يكرر العمل نفسه مع كل طلب يحمل كلمة المرور، والمصادقة الأساسية ترسلها مع كل صفحة وصورة. وفي موقع مزدحم قد تضيف التكلفة 12 أو أكثر حملًا ملحوظًا. اختر أعلى تكلفة يتحملها خادمك براحة، واستخدم كلمة مرور عشوائية طويلة؛ فلا معامل تكلفة ينقذ كلمة مرور مثل admin123.
أسماء المستخدمين والنص غير الإنجليزي وكلمات المرور الطويلة
لا يجوز أن يحتوي اسم المستخدم على نقطتين، وفواصل الأسطر تقسم الملف، لذا تمنع الأداة الاثنين. وتعمل الأحرف العربية والرموز التعبيرية في الملف بترميز UTF-8، لكن المتصفحات تختلف في طريقة إرسالها في نافذة الدخول، فالأسماء الإنجليزية البسيطة هي الخيار الآمن. ولا تقرأ bcrypt إلا أول 72 بايت من كلمة المرور؛ والحرف العربي يأخذ بايتين والرمز التعبيري أربعة، فتنبّهك الأداة حين يُهمَل آخر كلمة مرور طويلة.
الخصوصية وطريقة التأكد من النتيجة
يجري كل شيء هنا في متصفحك باستخدام bcryptjs، وهي تطبيق واسع الاستخدام لخوارزمية bcrypt بلغة جافاسكربت، مع دالة MD5 مدمجة في الصفحة. ولا يُرسل شيء مما تكتبه، ولا تسجّل أدوات القياس في الموقع إلا الصيغة والتكلفة اللتين اخترتهما. ويستخدم كل سطر ملحًا عشوائيًا جديدًا، فلن تحصل على السطر نفسه مرتين حتى مع كلمة المرور نفسها. وللتأكد من أن السطر يعمل قبل رفعه، انتقل إلى «التحقق من سطر» واختبر كلمة المرور عليه.