الخلاصة

  • يتيح TLS 1.3 لعميل يملك مادة استئناف أن يرسل بيانات التطبيق مع ClientHello، فيوفّر رحلة أو رحلتين عبر الشبكة. البيانات مشفرة، لكنها لا تحمل ضماناً بعدم الإعادة بين اتصالات مختلفة.
  • جعل RFC 8470 القرار خاصاً بالمورد: يحفظ الوسيط منشأ الخطر في Early-Data: 1، ويقرر الأصل إن كان الأثر يتحمل التكرار، ويرفض 425 الطلب الحساس وحده.
  • ينبغي للعميل إعادة المحاولة تلقائياً بعد 425، لكن يجب ألا تكون المحاولة الجديدة بيانات مبكرة. يمكن أن يبقى الأسلوب والهدف والمحتوى كما هي؛ الذي يتغير هو الزمن التشفيري. وحافظ HTTP/3 على العقد نفسه فوق QUIC.

اختصار الزمن سبق كلام الخادم الجديد

ينتظر HTTP في المصافحة التقليدية. يرسل الطرفان مدخلات جديدة، ويشتقان مفاتيح خاصة بالاتصال، ثم تبدأ بيانات التطبيق. يظهر ثمن هذا الترتيب بوضوح على المسارات البعيدة.

سمح TLS 1.3 لعميل يحتفظ بمفتاح مشترك وتذكرة من جلسة سابقة أن يضع بيانات التطبيق بجوار ClientHello. يخرج الطلب قبل ServerHello الجديد، فيختصر رحلة أو رحلتين.

يحدد RFC 8446 المقابل بدقة. بيانات 0-RTT مشفرة، لكنها لا تتمتع بالسرية المستقبلية ولا بضمان عدم الإعادة بين الاتصالات. لقد غادرت قبل وصول عشوائية الخادم الجديدة التي تربط بيانات 1-RTT باتصال بعينه.

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

إعادة المهاجم ومحاولة العميل مساران مختلفان

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

تقبل المنطقة الأولى نسخة مبكرة وتنفذها. ترفض الثانية 0-RTT لكنها تكمل المصافحة. إذا حُجبت استجابة الأولى، يعيد العميل الطلب بصورة مشروعة على الثانية. وقع الأثر مرة بسبب replay ومرة بسبب retry.

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

اسم الأسلوب ليس معرفة بالمورد

توفر أساليب HTTP الآمنة والمتماثلة دليلاً أولياً، لا حكماً نهائياً. قد يستهلك GET رابطاً موقعاً لمرة واحدة، أو يشغل حساباً مدفوعاً، أو يغيّر ذاكرة مؤقتة، أو ينشئ أثراً تدقيقياً دائماً. وقد يتعرف طلب كتابة ذو معرّف معاملة على النسخة المكررة.

لذلك يجعل RFC 8470 تحمل الإعادة خاصية للمورد. يعرف العميل ما يريد تقديمه مبكراً، ويعرف TLS مرحلة البايتات، وتعرف البوابة المسار، ويعرف الأصل نتيجة التنفيذ مرتين. ولهذا لا يجوز لمكتبة TLS تشغيل 0-RTT أو إعادة بيانات مرفوضة من تلقاء نفسها؛ يحتاج التطبيق إلى ملف سلوك صريح.

ثلاث طرق لمنع الأثر المبكر

يمكن للخادم رفض كل البيانات المبكرة في TLS. الحد واضح، لكنه يلغي ميزة السرعة عن كل طلب في الرحلة لأن TLS لا يختار رسالة HTTP منفردة.

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

أو يعيد 425 Too Early لطلب واحد. يحتفظ المورد الموافق عليه بالمسار السريع، بينما يرجع المورد الحساس إلى العميل. تصبح السرعة إذناً محدوداً لا قاعدة مفروضة على الأصل كله.

كان على البت أن يعبر الوسطاء

قد يكون الأصل خلف CDN ووكيل عكسي وبوابة، فلا يرى اتصال TLS الأول. يمكن أن يصل الطلب إليه على اتصال مكتمل رغم أن القفزة الأولى تلقته مبكراً.

للحقل Early-Data قيمة صحيحة واحدة هي 1. يجب على الوسيط الذي يرسل قبل اكتمال المصافحة مع عميله أن يضيفه إذا غاب، ولا يجوز لمن يستلمه أن يحذفه. كما تبقى العلامة عندما يكون الطلب قد أُرسل أو يحتمل أنه أُرسل من نسخة أخرى.

هذا البت سجل منشأ، لا طلب تسريع. انتظار مصافحة لاحقة لا يمحو نسخة محتملة نشأت في قفزة سابقة. إذا لم يستطع الأصل معالجة الطلب المعلّم بأمان فعليه إرجاع 425 ولو كان اتصاله المباشر عادياً.

تُعامل القيم المتعددة أو غير الصحيحة بوصفها الخطر المحافظ نفسه، فلا تتحول الفوضى النحوية إلى وسيلة لغسل التاريخ. ولا يظهر الحقل في الاستجابة أو trailer أو ضمن Connection.

المحاولة الجديدة تغيّر الوقت لا القصد

عندما يرسل وكيل المستخدم الطلب مبكراً ويتلقى 425، ينبغي أن يعيده تلقائياً. الشرط الحاسم أن الإرسال الجديد لا يستخدم early data. ينتظر العميل المصافحة ويرسل بيانات التطبيق العادية.

يمكن أن يبقى URI والأسلوب والجسم والفعل كما هي. 425 ليس إعادة توجيه. وهو ليس 421 لأن الاتصال قد يكون صاحب السلطة للأصل، ولا 429 لأنه لا يتحدث عن حصة، ولا 503 لأن الخدمة قد تكون سليمة، ولا 100 Continue لأنه لا ينسق إرسال الجسم.

لا ينبغي للخادم استخدام 425 من دون دليل early data أو Early-Data: 1، إذ لا يستطيع افتراض أن عميلاً عادياً يفهم قاعدة الإعادة الخاصة. والاستجابة غير قابلة للتخزين افتراضياً وليست تمثيلاً للمورد. يسجل سجل IANA الرمز باسم Too Early الضيق.

لا يصلح الوسيط إلا البداية التي صنعها

إذا وصل الطلب معلّماً، وجب على الوسيط تمرير 425. بدأ خطر الإعادة في الأعلى ولا يمحوه اتصال جديد في الأسفل.

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

لا يجوز لبوابة أن تمرر طلباً مبكراً إلى أصل لا تعرف أنه يفهم RFC 8470. عليها أن تنتظر أو تعيد 425. لا تملك الحافة تفويضاً لقبول خسارة تطبيق لا يرى سببها.

بداية الفعل أهم من وصول آخر بايت

قد تصل الرؤوس مبكراً والجسم لاحقاً. وفي QUIC قد يُسلّم stream مصنف مبكراً بعد اكتمال المصافحة. زمن الوصول لا يغير المنشأ.

السؤال هو: متى يبدأ الأثر؟ قد يكون التحليل واختيار المسار بلا أثر، لكن الكتابة أو استهلاك الرمز أو استدعاء نظام خارجي أو إدخال رسالة إلى طابور ليست كذلك. يجب أن تتفق كل نسخة تقبل التذكرة نفسها على ثابت «لا أثر قبل الاكتمال» حتى لو اختلفت وسائلها.

تفتقد النسخة التي أعيد تشغيلها تاريخ الإعادة السابق. ينبغي أن ترفض 0-RTT حين تتقاطع نافذة التسجيل مع فترة العمى. النسيان المحلي لا يمنح الطلب سلطة إضافية.

احتفظ HTTP/3 بمسألتين منفصلتين

يطبّق RFC 9114 قواعد RFC 8470 على 0-RTT في QUIC. ويعتمد العميل المبكر أيضاً على SETTINGS المحفوظة من الجلسة السابقة لأنه لم ير القيم الجديدة بعد.

يجب على الخادم رفض 0-RTT إذا لم يثبت توافق القيم، ولا يستطيع بعد القبول إعلان حدود أدنى تخالف بيانات أُرسلت بالفعل. توافق SETTINGS يحمي حالة HTTP/3، أما 425 فيحمي آثار المورد. وهما دليلان مختلفان.

المصادر وحدود الإثبات

الحزمة المغلقة هي TLS 1.3، RFC 8446، وUsing Early Data in HTTP، RFC 8470، وHTTP/3، RFC 9114، وسجل IANA لرموز HTTP. تثبت المواصفات والحدود، لا نسبة الانتشار الحالية أو دعم كل العملاء أو حادثة معينة أو وفراً مقاساً أو تنفيذاً لمرة واحدة بالضبط.