الخلاصة

  • يبدأ الضغط ثنائي الاتجاه فوراً بعد CRLF الذي ينهي جواب النجاح 206، ولا يتوقف إلا بانتهاء الاتصال.
  • بعد التفعيل تُغلق انتقالات STARTTLS وAUTHINFO وMODE READER؛ والجمع بين TLS والهوية والضغط لا ينجح إلا بهذا الترتيب.
  • يسبق الضغط طبقتي SASL وTLS عند الإرسال، لذلك تصبح حدود القاموس والأطوال المرئية والتفريغ وتلف الدفق مسائل أمنية وتشغيلية.

توفير البايتات أولاً أغلق بابين

رأى العميل القدرة COMPRESS DEFLATE فاختارها قبل غيرها. لم يكن الطلب خاطئاً، وأجابه الخادم بنجاح. لكن النجاح هو الذي غيّر ما يمكن فعله لاحقاً: لم يعد ممكناً إدخال حماية TLS أو بيانات التوثيق أمام طبقة قائمة بالفعل.

إذا أرسل العميل أمراً صحيحاً لـ STARTTLS أو AUTHINFO بعد ذلك، تلقى 502. وللعودة إلى اتصال غير مضغوط كان عليه إرسال QUIT وإنشاء اتصال جديد. لا يوجد زر عكسي داخل الجلسة.

حدّد RFC 8054 ترتيباً واحداً عند الحاجة إلى الخصائص الثلاث: STARTTLS ثم AUTHINFO ثم COMPRESS. جعل الترتيب سرية بيانات الدخول شرطاً في بنية الحالة، لا ملاحظة جانبية للمشغّل.

آخر سطر غير مضغوط

يصل 206 Compression active كنص NNTP عادي. بعد CRLF النهائي مباشرة تبدأ الطبقة الجديدة في الاتجاهين. البايت التالي لا يُقرأ كسطر قبل أن يمر عبر مزيل الضغط.

لهذا لا يجوز وضع COMPRESS في pipeline. ينتظر العميل النتيجة قبل إرسال أي أمر آخر. الرفض يعني بقاء القواعد السابقة؛ النجاح يعني أن كل ما يأتي بعد الحد داخل الدفق المضغوط.

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

طبقة واحدة لكل الأوامر

كانت أساليب غير معيارية تضغط بعض ردود الخادم وحدها. لم تشمل أوامر العميل، وجعلت كل عملية تحتاج نسخة خاصة. وضع RFC 8054 طبقة عديمة الفقد تحت كل الأوامر والردود اللاحقة.

قد تستفيد أوامر العميل المتكررة والقوائم الطويلة ورؤوس المقالات والنصوص. يسجل القسم المعلوماتي من RFC تفاوتاً كبيراً: بعض الردود متعددة الأسطر تنضغط جيداً، بينما لا تكسب الردود القصيرة أو المرفقات المرمزة القدر نفسه. ليست تلك الأرقام ضمان أداء حالي.

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

اختفت القدرات حين لم تعد قابلة للوصول

بعد تفعيل أي طبقة ضغط، لا يعلن الخادم COMPRESS أو STARTTLS. ولا يقبل ضغطاً ثانياً أو تفاوض TLS لاحقاً قد يضيف ضغطاً على مستوى TLS. كما لا يجوز للعميل تنفيذ MODE READER بعد الانتقال.

يعامل RFC 3977 CAPABILITIES بوصفه وصفاً للحالة الراهنة، ويمكن أن يتغير خلال الجلسة. ويحظر RFC 8054 الاعتماد على نتيجة مخزنة من اتصال سابق لأن الضغط قد يضعف سرية التشفير.

لذلك لا يعني غياب القدرة أن البرنامج نسيها. يعني أن الاتصال الحالي تجاوز النقطة التي يمكن عندها استخدامها. الحالة الحية أعلى حجية من كتالوج قديم.

لا تمر كلمة السر بعد القاموس

يوفر الضغط المساحة بمقارنة النص الجديد بما رآه سابقاً. يخفي التشفير المحتوى، لكنه لا يخفي بالضرورة طول النتيجة المضغوطة. إذا تحكم مهاجم في جزء معلوم من الإدخال وراقب تغير الطول، فقد تكشف المطابقة مع سر معلومة عنه. يذكر RFC هجمات CRIME وBREACH مثالين على الفئة.

كانت بيانات الدخول سراً يمكن إبعاده بوضوح. بعد نجاح COMPRESS لا يحاول عميل غير موثق استخدام AUTHINFO. يحذف الخادم القدرة أو يعرضها بلا معاملات قابلة للاستخدام، ويرفض الأمر الصحيح نحوياً برمز 502.

يعرّف RFC 4643 توثيق NNTP. الضغط لا يثبت الهوية ولا يمنح إذناً؛ إنما يمنع إدخال كلمة المرور متأخرة في ذاكرة سيعبر طول خرجها الشبكة.

الحماية والهوية والتمثيل سلطات منفصلة

يعرّف RFC 4642 انتقال TLS. يحمي وصلة النقل، لكنه لا ينشئ تلقائياً صلاحيات الحساب. يثبت AUTHINFO هوية يقبلها الخادم، لكنه لا يشفر القناة. ويغير COMPRESS تمثيل البايتات من دون أن يؤدي أي الوظيفتين.

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

إذن ترتيب التفاوض لا يدمج الأدلة. توضع حماية القناة أولاً، ثم تُحسم هوية الحساب، وبعدها فقط يُتخذ قرار المخاطرة بطول ناتج الضغط.

للقاموس حدود ثقة أيضاً

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

ويُفضّل ألا تشترك مقالتان سريتان مختلفتان في قاموس واحد عندما يمكن تجنب ذلك. مسح قاموس DEFLATE وسيلة مقترحة. لا يغير المسح مفتاح TLS أو حق الوصول، بل يحد الماضي القادر على التأثير في الحجم التالي.

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

تلف الذاكرة أنهى الاتصال

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

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

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

التوفير احتاج إلى ترتيب يمكن إسناده

يسجل سجل IANA لمعاملات NNTP قدرة COMPRESS وخوارزمية DEFLATE. يضمن أسماء ومراجع مشتركة، ولا يثبت النشر أو الأداء أو أمان إعداد بعينه.

بسّط الضغط العام البروتوكول واستفاد من التكرار في الاتجاهين. وفي المقابل صار النجاح قراراً مستمراً، يحذف انتقالات لاحقة ويربط سرية البيانات بتسلسلها.

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

المصادر