FreeToGenerate.com

‏AES-256-GCM في متصفحك أنت. لا تغادر عبارةُ المرور اللسان، والصفحةُ تقول لك بالضبط ما الذي يحميه ذلك وما الذي لا يحميه.

التشفيرُ داخل صفحة وِب لا يحميك من الصفحة نفسها. وفي كل أمرٍ يقصدك فيه أحدٌ حقًّا، استعمل برنامجًا ثبّتّه بنفسك وتستطيع تدقيقه.

متوفر أيضًا بلغات أخرى: English · Español · Português · Français

تشفير النصوص

تشفيرٌ بعبارة مرور عبر AES-256-GCM، يجريه متصفحك أنت، ومعاييرُه مكتوبةٌ داخل الناتج وحدودُه مكتوبةٌ في الصفحة.

ما تشفير النصوص؟

تشفيرُ نصٍّ هو تحويلُه حتى لا يستطيع قراءتَه ثانيةً إلا من بيده المفتاح الصحيح. وهذه الأداةُ تفعل ذلك بعبارةِ مرورٍ تختارها أنت: تكتب رسالة، وتكتب عبارةَ مرور، فتخرج لك سطرٌ واحدٌ من النص لا يعني شيئًا لمن لا يملك تلك العبارة. ثم تلصق ذلك السطر بعد حينٍ بالعبارة نفسها فترجع الرسالةُ الأصلية كما هي بالضبط.

والخوارزميةُ هي AES-256-GCM، وهي الاختيارُ المعياري لهذا العمل ومبنيّةٌ في كل متصفح. وGCM نمطٌ موثَّق، وهذا أهمُّ مما يبدو: فهو لا يخفي الرسالة فحسب، بل يكشف أيضًا أيَّ تغييرٍ يقع عليها. غيّر بتًّا واحدًا من النص المشفَّر يمتنع فكُّ التشفير امتناعًا صريحًا، بدل أن يعيد إليك ركامًا يبدو معقولًا.

غير أن عبارةَ المرور ليست مفتاحًا، وفي هذه المسافة تسكن أكثرُ الهندسة إثارةً للاهتمام. فـAES-256 يريد مفتاحًا من 256 بتًّا عشوائيًّا انتظامًا؛ وأنت تريد أن تكتب شيئًا تذكره. وردمُ هذه المسافة عملُ دالّةِ اشتقاق مفتاح، وهي هنا PBKDF2 بستمئة ألف تكرارٍ من HMAC-SHA256، وهو الرقمُ الذي تنشره OWASP في ورقتها لتخزين كلمات المرور. وكلُّ ذلك يجري في متصفحك عبر واجهة Web Crypto. لا يُرفع شيء، ولا حساب.

كيف تستعملها؟

  1. اختر التشفير واكتب رسالتك. وأيُّ نصٍّ يصلح: الحركاتُ والعربيةُ والصينيةُ والرموزُ التعبيرية كلُّها تنجو من الذهاب والإياب، لأن النصَّ يُحوَّل إلى بايتات UTF-8 قبل أن تراه الخوارزمية أصلًا.
  2. اكتب عبارةَ مرورٍ ثم اضغط شفّر. ثمة وقفةٌ قصيرة ريثما يُشتقّ المفتاح، وتلك الوقفةُ هي عينُ التدبير الأمني، والأداةُ تخبرك كم مللي ثانيةٍ استغرقت على جهازك أنت. ثم انسخ السطرَ الناتج واحفظه أو أرسله كيف شئت.
  3. ولقراءته ثانيةً انتقل إلى فكّ التشفير وألصق السطر. اكتب عبارةَ المرور نفسها واضغط فكّ التشفير. فإن أخفق قالت لك الأداةُ ذلك، لكنها لا تستطيع أن تخبرك أكانت العبارةُ خاطئةً أم كان النصُّ قد عُدِّل: فالأمران لا يتمايزان حقيقةً، لسببٍ مشروحٍ أدناه.

لا يقدّم المتصفح إلا دالّةَ اشتقاقٍ واحدة، وهي التي تضعها OWASP آخرًا

وهذا هو الجزءُ الذي لا تكاد أداةٌ تذكره، والأولى قولُه كما هو لا تزويقُه. فمواصفةُ Web Cryptography API من W3C، وهي المواصفةُ وراء التعميةِ المبنية في المتصفحات، تعرّف أربع خوارزمياتٍ بالضبط تقدر على اشتقاق مفتاح: ECDH وX25519 وHKDF وPBKDF2. اثنتان منها للاتفاق على مفتاحٍ بين طرفين، وHKDF مصمَّمةٌ لمادةٍ عشوائيةٍ انتظامًا سلفًا، وعبارةُ المرور البشرية ليست كذلك قطعًا. فتبقى واحدة: PBKDF2.

وفي المقابل ترتّب ورقةُ OWASP دوالَّ تلبيدِ كلمات المرور ترتيبَ تفضيلٍ لا لبس فيه: Argon2id أولًا، ثم scrypt، ثم bcrypt، وPBKDF2 رابعةً. وتوصي بـPBKDF2 تحديدًا حيث يُشترط الامتثالُ لـFIPS-140، وذلك سببٌ تنظيميٌّ لا سببٌ تعمويّ. أي أن المتصفح لا يعطي صفحةَ الوِب إلا خيارًا واحدًا، وهو الخيارُ الذي تتركه OWASP أخيرًا.

وإنما كانت PBKDF2 في الذيل لأنها ليست شاقّةً على الذاكرة. فعملُها حسابٌ محض، وذلك عينُ الشكل الذي تصنعه بطاقةُ الرسوميات آلافَ المرات على التوازي. أما Argon2id فصُمّمت لتغلوَ في الذاكرة كما تغلو في الزمن، حتى تضيق أفضليةُ عتادِ المهاجم. وإدخالُ Argon2id في متصفحٍ يعني تنزيلَ بناءٍ بـWebAssembly، وهي كلفةٌ حقيقيةٌ تُدفع في كل زيارةٍ لصفحةٍ قد لا تُستعمل إلا مرة.

فهذه الأداةُ إذن تستعمل PBKDF2 بالرقم الذي تنشره OWASP، وتقول ذلك، بدل أن توهم أن الاختيار وقع على جدارة. وإن كنت تحمي شيئًا يهمّك فيه الفرقُ بين PBKDF2 وArgon2id حقًّا، فتلك علامةٌ على أنه ينبغي لك برنامجٌ مثبَّتٌ لا صفحةُ وِب، وهي نفسُها الخلاصةُ التي يبلغها قسمُ الحدود من طريقٍ آخر.

ماذا يشتري ستمئة ألف تكرارٍ في الحقيقة: نحو 19 بتًّا

كلُّ أداةٍ في هذا الباب تُشهر عددَ تكراراتها، والرقمُ موضوعٌ ليطمئن. وهذا ما لا يكاد يُطبع إلى جواره. فإجراءُ الاشتقاق ستمئة ألف مرةٍ يضاعف كلفةَ كل محاولةٍ عند المهاجم ستمئة ألف ضعف. وإذا عُبّر عن ذلك كما تُعبَّر القوةُ التعموية عادةً كان اثنين مرفوعًا إلى 19.19، فعددُ التكرارات كلُّه يساوي نحو تسعة عشر بتًّا.

وتسعة عشر بتًّا إسهامٌ حقيقيٌّ وليس بالكبير. ومعناه أن من كان يقدر على تجربة مليار عبارةٍ في الثانية على تلبيدةٍ غير محميّة يهبط إلى نحو ألفٍ وسبعمئة في الثانية. وذاك عائقٌ جدّيٌّ أمام من يحزر عبارةً مسحوبةً من فضاءٍ واسع، ولا يكاد يكون عائقًا أمام من يمشي في قائمة كلمات المرور الشائعة. فالتكراراتُ تزحزح الخط؛ وعبارةُ المرور تقرّر في أيّ جانبيه تقع أنت.

والنتيجةُ العملية أن عبارةَ المرور تقدّم الأمنَ كلَّه تقريبًا، وأن التكرارات تضيف فوقه علاوةً ثابتةً نحو تسعةَ عشرَ بتًّا. فعبارةٌ من أربع كلماتٍ مسحوبةٍ عشوائيًّا من قائمةٍ كبيرة تساوي وحدها أكثر من تلك العلاوة بكثير. وعبارةٌ قصيرة، أو واردةٌ في أيّ تسريب، تبقى عبارةً قصيرةً بعد ستمئة ألف تكرار: فعاملُ الشغل يضاعف كلفةَ كل محاولة، ولا يزيد عددَ المحاولات التي على المهاجم أن يقوم بها.

ولهذا السبب نفسِه تعرض الأداةُ زمنَ الاشتقاق على جهازك أنت. فالذي يقرّر ما تكلّفه تلك التكرارات فعلًا هو متصفحك وعتادك، لا رقمٌ قيس في مكانٍ آخر، ورؤيةُ الرقم تجعل المقايضة ملموسةً بدل أن تبقى مجرّدة.

الناتجُ يصف نفسه، عن قصد

النصُّ المشفَّر سطرٌ واحدٌ فيه خمسةُ حقولٍ تفصلها نقاط: علامةُ إصدار، وعددُ التكرارات، والملح، ومتجهُ التهيئة، وأخيرًا النصُّ المعمَّى ومعه بطاقةُ توثيقه. والأجزاءُ الثنائيةُ الثلاثة مكتوبةٌ بـbase64url، فينجو المجموعُ من أن يُلصق في بريدٍ أو محادثةٍ أو مسار وِب من غير أن يفسده شيء.

وعددُ التكرارات داخل الناتج عمدًا. فOWASP تراجع رقمَها الموصى به صعودًا كلما تحسّن العتاد، وقد حرّكته مرارًا وستحرّكه ثانية. والأداةُ التي تثبّت ذلك العدد في شفرتها، عند التشفير وعند فكّه، تفقد بصمتٍ قدرتَها على قراءة نواتجها القديمة يومَ تحدّث ذلك الثابت. ولمّا كان العددُ هنا يسافر مع النص المشفَّر، فما تشفّره اليوم سيُفكّ بعد سنين، حين يكون الافتراضيُّ قد تغيّر. وكذلك المِلحُ ومتجهُ التهيئة: كلاهما عشوائي، وكلاهما لازمٌ لفكّ التشفير، فكلاهما مسجَّلٌ لا مُعادُ حسابه.

ولهذا التصميم حدٌّ ينبغي تسميتُه، فهو من الأشياء التي تُدخلها الصيغةُ الواصفةُ لنفسها بلا إنذار. فإذا كان عددُ التكرارات آتيًا من النص الملصوق، فالنصُّ الملصوق هو الذي يتحكّم في مقدار الشغل الذي يبذله متصفحك قبل أن تُفحَص أيُّ عبارةِ مرورٍ أصلًا، ونصٌّ عدائيٌّ يزعم تريليون تكرارٍ كان ببساطةٍ سيجمّد اللسان. فالأداةُ تضع سقفًا للعدد الذي تقبله وترفض ما فوقه بدل أن تشرع في العمل.

وفي لوحة التفصيل تفصيلان آخران. فلكل عمليةِ تشفيرٍ يُولَّد ملحٌ عشوائيٌّ جديد ومتجهُ تهيئةٍ عشوائيٌّ جديد، ولذلك كان تشفيرُ الرسالة نفسِها مرتين بعبارة المرور نفسِها يعطي ناتجين مختلفين تمامًا: وذلك هو السلوكُ الصحيح لا خلل. وبطاقةُ التوثيق 128 بتًّا، أي ستةَ عشرَ بايتًا بالضبط زيادةً. وWeb Crypto تسمح ببطاقاتٍ من 32 أو 64 أو 96 أو 104 أو 112 أو 120 أو 128 بتًّا وتأخذ 128 افتراضًا؛ والقصيرةُ أيسرُ تزويرًا بكثير، فتثبّت هذه الأداةُ الحدَّ الأعلى بدل الاتكال على الافتراضي.

حدودٌ صادقة

التشفيرُ داخل صفحة وِب لا يحميك من صفحة الوِب. فالجافاسكربت الذي يؤدي العمل يقدّمه هذا الموقعُ في كل مرةٍ تحمّل فيها الصفحة، ولو صار ذلك الرمزُ خبيثًا يومًا، باختراقٍ أو باعتماديةٍ مسمومةٍ أو بتغييرٍ متعمَّد، لأمكنه أن يقرأ عبارةَ مرورك ونصَّك الصريح قبل أن يُشفَّر شيء. وأنت من الخارج لا تستطيع التحقق من أنه لا يفعل. وليس هذا عيبًا في AES ولا في هذا التنفيذ: بل هو الشرطُ البنيويُّ للتعمية في صفحةٍ يقدّمها لك غيرُك، وهو يسري على كل أدوات التشفير في المتصفح سواءً، بما فيها التي لا تذكره.

والذي تعطيه هذه الأداةُ حقًّا هو حمايةُ رسالةٍ مستقرّةٍ في مكانٍ آخر. فإذا شفّرت ملحوظةً وألصقتها في بريدٍ أو مستندٍ مشترَكٍ أو تطبيق ملحوظاتٍ أو سجلِّ محادثة، فمن حصل على ذلك النص لاحقًا بلا عبارة المرور لم يستطع قراءته. وذلك سيناريو واقعيٌّ وشائع، والأداةُ تخدمه جيدًا. وأما ما لا تقدر عليه فحمايتُك من خصمٍ مصمِّمٍ يقصدك أنت بعينك، لأن من يقصدك كذلك بيده وسائلُ أفضلُ من مهاجمة النص المشفَّر. ولذلك العمل استعمل برنامجًا مدقَّقًا ثبّتّه بنفسك وتستطيع التحقق منه.

وفكُّ تشفيرٍ فاشلٌ لا يستطيع أن يخبرك لماذا فشل. فـAES-GCM يتحقق من بطاقة التوثيق ويبلّغ نتيجةً واحدةً عند أيّ اختلاف، والمواصفةُ تعرّف خطأً واحدًا بالضبط لذلك. فعبارةُ مرورٍ خاطئةٌ ومحرفٌ واحدٌ مغيَّرٌ يؤديان إلى المآل نفسِه، ولا يستطيع أيُّ تدقيقٍ في التنفيذ أن يفصل بينهما: فتلك المعلومةُ ببساطةٍ غيرُ موجودة. والأداةُ تقول ذلك بدل أن تحزر، لأن أداةً تدّعي المعرفةَ إنما تختلق الجواب.

ولا استرجاعَ لعبارة المرور، ولا يمكن أن يكون. فلا يُحفظ من عبارتك شيءٌ في أيّ مكان، وذلك عينُ ما يجعل التشفيرَ يساوي شيئًا؛ والنتيجةُ التي لا مهرب منها أن ضياعها ضياعٌ للنص إلى الأبد. وأخيرًا فهذه تشفّر نصًّا لا ملفات: فالرسالةُ تمرّ بالمتصفح نصًّا، فالمرفقاتُ الثنائية خارجُ ما تصنعه هذه الصفحة.

لماذا هي مجانية؟

لأن تشغيلها لا يكلّف شيئًا. فكلُّ هذا، اشتقاقُ المفتاح والتشفيرُ وفكُّه، يقع داخل متصفحك أنت بواجهة Web Crypto الموجودة فيه أصلًا. فلا تُنزَّل مكتبة، ولا يُرسَل نصٌّ إلى أيّ مكان، ولا يرى خادومٌ رسالتَك ولا عبارةَ مرورك، إذ لا خادومَ في الأمر أصلًا.

فلا حساب ولا تسجيل ولا شيءَ محجوبٌ وراءهما ولا علامةَ مائية. والخوارزميةُ هي AES-256-GCM الذي في المتصفح نفسِه، ورقمُ الاشتقاق من توصيات OWASP المنشورة، والصيغةُ موثَّقةٌ أعلاه حتى لا يبقى الناتجُ رهينةَ بقاءِ هذا الموقع.