تخطَّ إلى المستندات
قاعدة المعرفة

التشفير من طرف إلى طرف

مفاتيح OpenPGP تُنشأ في متصفحك. والبريد الذي ترسله إلى عنوان OpenEmail آخر يمكن ختمه قبل مغادرة التبويب، والبريد المختوم الموجَّه إليك يُفتح في جزء القراءة، بفكّ تشفير على جهازك. والمفاتيح ليست ملكنا قط لنسلّمها.

التفاصيل

  • النصفان موصولان من طرف إلى طرف. فالإنشاء إلى مستلم مفتاحه منشور يختم النصّ في المتصفح قبل أن يغادره الطلب؛ ويُسلَّم الخادم درعًا لا يستطيع قراءته، فيَسِمه pgp-mime، ويبني رسالة multipart/encrypted حقيقية. والقراءة تجري بالطريقة نفسها معكوسة: يُجلب النصّ المشفَّر، ويُفكّ في التبويب، ويُعرض كبريد عادي.
  • الخوارزمية هي التي يستخدمها الجميع أصلًا: OpenPGP، عبر openpgp.js، و PGP/MIME على السلك. مفتاح v4 على Curve25519، وهو الشكل نفسه الذي تصدره Proton وينتجه gpg بخوارزميته الحديثة الافتراضية. فالبريد الذي يقرؤه هذا هو من حيث المبدأ البريد نفسه الذي ينتجه Thunderbird و gpg و Proton، ولا شيء هنا صيغة من عندنا تحتاج إلى فكّ لاحقًا.
  • لكنه عمليًّا من OpenEmail إلى OpenEmail. فلا يوجد Web Key Directory، ولا بحث في خادم مفاتيح، ولا تحليل لترويسة Autocrypt في أي موضع من هذه الشيفرة: والمكان الوحيد الذي يُعثر فيه على مفتاح مستلم هو دليلنا نحن، الذي يحمل مفاتيح نشرها من هذا التطبيق أشخاص عناوينهم على نطاقات مستضافة هنا. ولا سبيل كذلك إلى تسليم مفتاحك لأحد. فالتطبيق ينشر نصفك العامّ في ذلك الدليل ولا يعرض نسخًا له ولا تصديرًا، فمراسلك على Thunderbird ليس له طريق مدعوم للحصول عليه. والتعامل مع عالم PGP الأوسع خاصية في الصيغة، لا شيء يفعله المنتج لك بعد.
  • القراءة ليست محدودة بذلك، لأن فكّ التشفير لا يحتاج إلى دليل. فأي رسالة PGP/MIME أو PGP مضمَّن تصل إلى صندوق البريد هذا مختومة بمفتاح موجود في هذا المتصفح تُفتح، أيًّا كان مرسلها وأيًّا كان العميل الذي استخدمه. ويشمل ذلك الرسائل المختومة بمفتاح دوّرته منذئذٍ: فالمفاتيح المتقاعدة تبقى في حلقة المفاتيح وتُجرَّب إلى جانب المفتاح الحالي، فالتدوير لا يكلّفك البريد الذي تلقيته بالفعل.
  • الأخضر يعني أنها فُتحت، ولا يُبلَغ بأي طريق آخر. فصفّ التفاصيل ← الأمان لا يتحول إلى الأخضر إلا بعد أن يعيد فكّ التشفير نصًّا واضحًا فعليًّا في هذا التبويب، لا من حقل على الرسالة أبدًا، ولا من مجرد وصول مغلّف مشفَّر. ويقرأ «مشفَّرة من طرف إلى طرف. فُتحت بمفتاحك في هذا المتصفح». وكل ما دون ذلك له جملته الخاصة لا جملة مشتركة: ما زال البحث جاريًا، والمفتاح مقفل، ومختومة بمفتاح لا يحمله هذا المتصفح، وتعذّر فتحها، ولا مفتاح هنا إطلاقًا، وهذا المتصفح لم يسمح لنا بالنظر. فـ«تعذّر علينا التحقق» و«ليس لديك المفتاح» عبارتان مختلفتان، والصفّ يجعلك تقرأ أيّهما حصلت عليها.
  • S/MIME لا يزال غير قابل للفتح. فهو CMS تحت شهادة X.509، ولا يستطيع openpgp.js لمسه، ولا يوجد في المنتج مخزن شهادات ليحمل المفتاح لو استطاع، فرسالة S/MIME تقول إن OpenEmail لا يستطيع فتحها، ولا يُعرض عليها فكّ قفل لن يفعل شيئًا.
  • النصف الخاص يُولَّد في متصفحك ولا يغادره أبدًا: لا مشفَّرًا، ولا داخل نسخة احتياطية، ولا في أداة دعم. ولا يُرسَل إلى الخادم أبدًا، فليس هنا ما يُسلَّم أو يُستدعى قضائيًّا أو يُسرَّب. وهو مخزَّن مقفلًا بعبارة مرور في قاعدة بيانات IndexedDB خاصة به، openemail-keyring، بعيدًا عن متناول نصيحة «امسح ذاكرتك المؤقتة» وإعادة الضبط في وحدة تصحيح الأخطاء عن عمد: فكلاهما يمسح ذاكرة الاستعلامات، ومفتاح مخزَّن إلى جانبها سيجعل نصيحة دعم روتينية تدمّر نهائيًّا كل رسالة مشفَّرة تلقّاها الحساب يومًا. أما حذف حسابك فيحذفه فعلًا، لأن البريد ذاهب معه هناك. وفتح قفله يبقيه في الذاكرة 15 دقيقة من الخمول و8 ساعات كحدّ أقصى، وبعدها تطلب قراءة الرسالة المختومة التالية عبارة المرور من جديد.
  • لا إيداع ولا استرداد، وذلك دائم لا شيء لم يُبنَ بعد. فعبارة مرورك هي السبيل الوحيد للدخول؛ وإن نسيتها بقيت كل رسالة ختمها أحد لك على خوادمنا نصًّا مشفَّرًا لا يستطيع أحد قراءته، ونحن منهم. البريد ضاع، ولا قدر من الطلب يستعيده. وتقول شاشة التسجيل ذلك قبل وجود المفتاح الأول، خلف مربع اختيار عليك تأشيره، وملف النسخة الاحتياطية إلزامي، ويبقى زرّ «تمّ» معطّلًا حتى تنزّله. ويُكتب ذلك الملف من دون التحصين الإضافي أثناء التخزين الذي يستخدمه هذا المتصفح، عن قصد، حتى يظلّ يُستورد في إصدارات gpg الأقدم: فنسخة احتياطية لا تستطيع فتحها في مكان آخر ليست نسخة احتياطية. كما أن المفتاح يعيش في متصفح واحد على جهاز واحد، ولن يكون لدى هاتف أو حاسوب ثانٍ شيء حتى تستورد ذلك الملف هناك.
  • الدليل يحمل المفاتيح العامة ولا شيء غيرها، والمفتاح يخصّ شخصًا لا صندوق بريد، إذ إن مفتاحًا مرتبطًا بعنوان سيضطرّ إلى النسخ بين كل من يُشارَك معهم ذلك العنوان، وهو إيداع باسم آخر. والبحث عن مفتاح يستلزم جلسة مسجَّلة الدخول وصلاحية إرسال، لا نقطة نهاية عامة أبدًا، لأن سبر العناوين المفتوح عرّافة تخبر أي أحد أيّ العناوين صناديق بريد حيّة هنا. وهو يجيب بالجواب نفسه عن «لا نستضيف ذلك» وعن «نستضيفه ولم ينشر أحد مفتاحًا»، لأن التمييز بينهما ينقل العرّافة خلف تسجيل الدخول فحسب بدل إزالتها. ويتوقف تقديم المفتاح لحظة فقدان صاحبه الوصول إلى العنوان، لا حين يتذكر أحد إبطاله.
  • كل بايت يُختم في المتصفح لحظة كتابتك له، وهو ما يجعل الإرسال المؤجَّل ممكنًا أصلًا: فالرسالة المجدولة أو التي تنتظر في نافذة التراجع تُخزَّن كنصّ مشفَّر ويُرسلها لاحقًا طابور لا يحمل مفتاحًا ولا يستطيع قراءة شيء منها. والمستلم الذي فشل البحث عن مفتاحه في الدليل يوقف الإرسال بدل معاملته بصمت كمن لا مفتاح له. والرسالة المختومة لا تخرج أبدًا إلا عبر مسار يحمل الرسالة كاملة. فمسار صادر يأخذ نصّ HTML بدلًا من ذلك سينشر الدرع كنصّ ظاهر ويبلّغ بالنجاح، فالإرسال الذي سيحطّ هناك يُرفض قبل مغادرة بايت واحد لا بعده.
  • ما سيكلّفه الختم، مقيسًا لا مخمَّنًا: الدرع نحو 1.86 ضعف البايتات الخام، فنحو 2.7 ميغابايت من المرفقات تسع في حدّ الـ 5 ميغابايت الذي يسمح به مسار الإرسال، ويرفض المحرِّر حمولة تتجاوز ذلك قبل قضاء ثوانٍ في تشفير حمولة سيرفضها النقل. والبريد المشفَّر لا يبلّغ عن أي فتح ولا أي نقرة، لأن التتبّع لكل مستلم يعمل بتغيير النصّ لكل شخص وكتلة مختومة واحدة لا يمكن أن تتغير، ولأن الرابط المُعاد كتابته رابط نستطيع قراءته، وهو عكس الادّعاء. ولا يمكن أبدًا إلغاء تكرار إرسال مشفَّر عبر مفتاح idempotency: فمفتاح جلسة جديد يجعل النصّ المشفَّر بايتات مختلفة في كل محاولة، فلا تحمل إعادة المحاولة بصمة أصلها.
  • الجدولة تختم عند الإنشاء لا عند الإرسال. فالمحرِّر يبني النصّ المشفَّر مقابل المفاتيح التي يحملها مستلموه يوم كتابتك، لا يوم مغادرة الرسالة، وهي القاعدة التي يطبّقها هذا المنتج أصلًا على القوالب والترجمات، حيث تحمل الرسالة المجدولة ما وافقت عليه أنت لا ما تغيّر بعد ذلك. والفرق أن القالب القديم متأخر فحسب بينما المفتاح القديم غير قابل للقراءة، فيذكر المحرِّر التاريخ بالكلمات بدل عرض تحفّظ: «مختومة الآن، تُرسل في …. سيحتاج كل من عليها إلى المفتاح الذي يحمله اليوم.» أما الرفض الذي يحرس النصف الآخر فقد وصل ولم ينطلق قط، لأنه لا يمكن أن توجد رسالة كهذه بعد: فلو وُجدت، لكان تحريرها بعد ذلك مرفوضًا لا مسموحًا به بصمت، لأن تعديل النصّ سيكتب نصًّا واضحًا فوق النصّ المشفَّر وتغيير المستلمين سيغيّر من خُتمت له، وأيّهما وقع سلّمت الرسالة في الوضوح بينما تظل كل شاشة تسمّيها مشفَّرة.
  • شيئان لن يعرضهما المحرِّر إطلاقًا، ويقول ذلك بدل أن يفشل عند السلك. فالقالب يُعرَض على الخادم من نسخة منشورة، فليس في هذا المتصفح شيء يُختم. والردّ يقتبس المحادثة أسفله، وذلك الاقتباس يُلحَق بعد الموضع الذي كان سيُختم فيه النصّ، فيترك نسخة مقروءة من السلسلة كلها خارج الختم، ولذلك لا يمكن تشفير الردود وعمليات إعادة التوجيه حتى يُطوى السجل المقتبس داخل النصّ المشفَّر.
  • لا شيء من هذا يخفي سطر موضوعك، ولا من كتبت إليه، ولا متى. فالموضوع يسافر في الوضوح على الرسالة المختومة تمامًا كما على أي رسالة أخرى، وجزء القراءة يقول ذلك على الرسالة نفسها: «سافر الموضوع والعناوين في الوضوح؛ أما هذا النصّ فلا.» فـ PGP يغطي النصّ ولا يغطي سواه أي تطبيق له. والمسوّدات غير مختومة أيضًا، لأن الحفظ التلقائي يظلّ يكتب نصًّا واضحًا في صندوق بريدك أثناء الإنشاء، ولأن الامتناع عن الحفظ بصمت سيضيّع عملك، والقفل يفصح عن ذلك بالكلمات.
  • التعرّف على البريد الذي يصل مختومًا جاء أولًا ولا يزال قائمًا. فـ PGP/MIME ودرع PGP المضمَّن و S/MIME كانت تُعرض سابقًا كنصّ فارغ مع مرفقين بلا معنى، لأن المحلّل لا يعامل إلا النصّ العادي و HTML على أنهما مقروءان ويُسقط الباقي في شريط الملفات. أما الآن فتُعرَّف تلك الأجزاء، ويُبقى أثاث البروتوكول خارج قائمة المرفقات، ويُخزَّن النصّ المشفَّر سليمًا، وهو ما يفكّ منه القارئ بدل جلب أي شيء جديد، والرسالة التي لا يستطيع أحد هنا فتحها تقول ذلك صراحةً.
  • الرسالة المُوقَّعة تُعامَل كشيء منفصل، لأنها كذلك. فنصّها مقروء، فيظل البحث والقواعد وكل شيء آخر يعمل عليها؛ ولا تُوضع خلف قفل أبدًا ولا تُمرَّر على فكّ تشفير. ويذكر الصفّ «موقَّعة من المُرسِل. لم يُتحقَّق من التوقيع»، باهتًا، ويبقى باهتًا حتى يتمكن شيء هنا من التحقق من توقيع فعلًا، وهو ما لا يفعله شيء بعد، بما في ذلك على رسالة فُكّ تشفيرها بنجاح. فرؤية أن رسالة مختومة ليست كفتحها، وفتحها ليس كمعرفة من ختمها.
  • على الرسالة المشفَّرة يُحجب النصّ عن كل ما كان سيقرؤه: مقتطف البحث، وممرّ النصّ في مقيّم التصيّد، وفحص الكتابة بالذكاء الاصطناعي، وشروط النصّ في القواعد، واستيراد دعوات التقويم، وملخّصات السلاسل. ويظل نصف المصادقة من فحص التصيّد عاملًا، لأن DMARC و DKIM و SPF تُقرأ من ترويسات لا يخفيها النصّ المشفَّر. وفكّ التشفير لا يغيّر شيئًا من ذلك. فالنصّ الواضح لا يوجد إلا في التبويب الذي فتحه، فتبقى الرسالة المختومة غير قابلة للبحث وتبقى خارج ميزات الذكاء الاصطناعي حتى بعد قراءتك لها، ولا تُعرض الترجمة عليها. وتلك كلفة الادّعاء، لا إغفال.