كتابة «لا نحفظ كلمة مرورك» على صفحة ويب تكلّف تمامًا ما تكلّفه كتابة أي شيء آخر: لا شيء. إنها جملة، لا ضمانة. يكتبها الصادق كما يكتبها الكاذب، ومن جهتك أنت من الشاشة تبدو الجملتان متطابقتين.
هذه هي المشكلة الجوهرية في أي موقع يطلب منك كلمة مرور كي «يحلّلها». حتى لو كانت الخدمة نظيفة تمامًا — شيفرة مرتّبة، نوايا حسنة، أناس شرفاء — فلا سبيل لديك لمعرفة ذلك. الخادم صندوق مغلق. تُرسل إليه أخطر ما تملك وتثق بأن ما وُعِدت به هو ما يجري على الطرف الآخر.
وثمة تفصيل يُنسى عادةً: الوعد بعدم الحفظ لا يحمي أيضًا مما لا يملكه صاحب الوعد. خادم أمين قد تكون فيه سجلات لم يراجعها أحد، أو وسيط proxy في الطريق، أو نسخة احتياطية تلقائية، أو موظف جديد، أو ببساطة يوم سيئ. كلمة المرور غادرت جهازك بالفعل. وما يحدث بعد ذلك خارج عن يدك، وخارج عن يده هو أيضًا في كثير من الأحيان.
الجواب الوحيد الذي لا يطلب منك تصديق شيء
الحل ليس أن نُحسِن الوعد. الحل هو ألّا نحتاج إلى البيانات.
إن لم تغادر كلمة مرورك المتصفح أبدًا، فسؤال «ماذا يفعلون بها؟» يفقد معناه. لا يوجد «هُم». لا خادم يستقبلها، ولا سجلات تظهر فيها، ولا نسخة احتياطية تحتويها، ولا موظف يستطيع قراءتها. الثقة هنا لا تُدار على نحو أفضل: بل تُشطب من المسألة كلها.
هذا ما يفعله password.es. المدقّق يحلّل ما تكتبه داخل متصفحك أنت، بمعالجك أنت. النص الذي تطبعه لا يسافر إلى أي مكان لأنه لا يوجد مكان يسافر إليه.
من أين تأتي العشوائية
المولّد قائم على المنطق نفسه. لصنع كلمة مرور عشوائية تحتاج إلى عشوائية، وثمة طريقتان للحصول عليها: أن تطلبها من خادم أو أن تطلبها من المتصفح. طلبها من خادم عبث: الخادم سيعرف كلمة المرور قبلك أنت.
لذلك نطلبها من المتصفح، عبر crypto.getRandomValues(). هي الواجهة القياسية
لمنصّة الويب للعشوائية التشفيرية — الموجودة لهذا الغرض تحديدًا، في مقابل
Math.random() التي تصلح لخلط أوراق اللعب في لعبة ولا تصلح لأي شيء يُفترض أن
يصمد أمام من له مصلحة في كسره. مَن ينتج العشوائية هو المتصفح نفسه، على جهازك
أنت. نحن لا نشارك: النتيجة تظهر على شاشتك وتبقى هناك.
كيف تتحقق دون أن تصدّقني
كل ما سبق يبقى، حتى الآن، فقرة كتبها الناس أنفسهم الذين صنعوا الموقع. أي: بالضبط ذلك الشيء الذي قلت لك ألّا تثق به. فلا تصدّقني إذن. انظر بنفسك.
افتح أدوات المطوّر في متصفحك — F12، أو Cmd+Option+I على ماك — وانتقل إلى
تبويب الشبكة (Network)، واتركه مفتوحًا وادخل إلى المدقّق. سترى الصفحة
تُحمَّل. الآن امسح القائمة، وانقر على حقل كلمة المرور واكتب.
هذا ما ستراه، والدقّة هنا أولى من لغة البائعين:
- عند النقر على الحقل، ينطلق طلب واحد. ليس كلمة مرورك — فأنت لم تكتب شيئًا
بعد — بل هو المكتبة التي تقوم بالتحليل، ملف اسمه
zxcvbn-ar.min.jsيحمل في داخله قوائم الكلمات والأسماء وأنماط لوحة المفاتيح وكلمات المرور المعروفة التي تجري المقارنة معها. يُنزَّل من password.es لحظة لمسك الحقل، كي يصل بينما أنت تطبع. يخرج من النطاق نفسه، وهو ملف ساكن، وهو نفسه لكل من يفتح هذه الصفحة — للموقع نسخ متعددة بحسب اللغة، وهذه الصفحة تحمّل النسخة العربية. - من تلك اللحظة، مهما كتبت، تبقى القائمة ساكنة. حرف واحد، أو عشرون، امسح، ابدأ من جديد، الصق نصًا طويلًا. صفر طلبات. العدّاد لا يتحرك. القاموس صار في متصفحك، والبحث يجري في ذاكرة جهازك.
هذا التمييز هو الفرق كله. ليست المسألة أن تثق بأن الطلب لا يحمل كلمة مرورك: المسألة أنه لا يوجد طلب. لا تحتاج إلى تأويل شيء ولا إلى فهم الشيفرة؛ يكفي أن تنظر إلى عدّاد لا يرتفع.
الجرد الكامل، بعيوبه
ما دامت الحجّة هي «تحقّق بنفسك»، فمن الغريب أن نخفي ما ستجده حين تتحقق. الجرد الأمين لـ password.es:
لا تحليلات. لا Google Analytics، ولا بديل خفيّ، ولا بكسل تتبّع. كان هناك واحد وأُزيل من كل الصفحات. لا كوكيز. الموقع لا يكتب أي واحدة. نعم، ثمة شيء واحد محفوظ في متصفحك: تفضيلك للسِّمة الفاتحة أو الداكنة، في التخزين المحلي على جهازك أنت. لا يُرسل إلى أي مكان أبدًا ويمكنك محوه من أدوات المطوّر نفسها. لا تسجيل ولا حسابات ولا استمارات: لا مكان تترك فيه بيانًا حتى لو أردت.
والعيب، لأن ثمة عيبًا: الصفحة تطلب خطّين من خوادم Google عند التحميل. أي أن Google ترى أن أحدًا بعنوان IP الخاص بك حمّل صفحة من هذا النطاق، مثلما يحدث في مواقع لا تُحصى. لا ترى ما تكتبه — فذلك الطلب يقع قبل ذلك ولا يتكرر — لكنه طلب إلى طرف ثالث، وستراه في تبويب الشبكة نفسه، ولا معنى لأن نطلب منك فتح أدوات المطوّر ثم نغفل عن ذكره. إنه على قائمة ما ينبغي إصلاحه.
لماذا نروي هذا
كان بوسعنا أن نكتب «صفر طلبات، خصوصية كاملة» ونمضي مرتاحي البال. لكان وقعه أجمل ولكان كاذبًا في التفاصيل: هناك طلب قاموس وهناك خطوط. حجّة تسقط حين يتحقق منها أحدهم لم تكن حجّة: كانت إعلانًا.
الصيغة الدقيقة أقل استدارة وأقدر على الصمود أمام الفحص: ما تكتبه أنت لا يخرج من متصفحك، وهذا يُرى في ثلاثين ثانية بأداة مثبّتة عندك أصلًا.
وانتبه، فالأمر يعود إليك قاعدةً عامة. في المرة القادمة التي يطلب فيها موقع كلمة مرورك لأي غرض، افتح ذلك التبويب وانظر هل يظهر طلب عند ضغط أي مفتاح. إن ظهر، فكلمة مرورك رحلت. لا يهم ما يقوله إشعار الخصوصية، ولا كم هو جميل ذلك القفل المرسوم على الاستمارة، ولا كم تبدو الشركة جادّة. وإن أراك الموقع كلمة المرور محلّلة بعد دورة من مؤشّر التحميل، فأنت تعرف من أين مرّت.
القاعدة الأقل تداولًا في الأمن ليست عن كلمات المرور: هي عن التحقق. الثقة حسنة. والتحقق أحسن، وهنا هو مجاني.
المصادر: بنية password.es نفسه، قابلة للتحقق بأدوات المطوّر في أي متصفح — يُنزّل
المدقّق من النطاق نفسه، عند التركيز على الحقل، مكتبة التحليل بقوائمها
(zxcvbn-ar.min.js) ولا يصدر أي طلب أثناء الكتابة ·
crypto.getRandomValues()، الواجهة القياسية في Web Crypto API للعشوائية
التشفيرية · شيفرة الموقع لا تحتوي تحليلات ولا بكسلات تتبّع ولا كوكيز؛ البيان
الوحيد المخزَّن محليًا هو تفضيل السِّمة · الخطوط تُقدَّم من Google Fonts.