الخلاصة

  • إطار CRYPTO هو كتلة متصلة، محددة بالإزاحة والطول، من تدفق مصافحة يخص مستوى تشفير واحدًا.
  • حدود الإطار والحزمة لا تثبت رسالة TLS مكتملة أو دفعة رسائل مكتملة أو قبول شهادة أو توافر مفتاح أو جاهزية تطبيق.
  • يجب فصل نقل QUIC وإعادة التجميع والتحليل في TLS وحالة المفاتيح وإعادة الإرسال وإيصالات الإكمال.

يبدأ الالتباس غالبًا من ملاحظة صحيحة تُحمّل أكثر مما تحتمل. يرى المراقب حزمة QUIC محمية، يزيل حماية الحزمة، يجد إطار CRYPTO، ثم يسجل حدث ClientHello أو Finished كاملًا. لكن QUIC يصف هنا نطاقًا متصلًا من بايتات المصافحة بواسطة offset وlength داخل مستوى تشفير محدد. لا يقول الإطار إن النطاق يطابق رسالة TLS كاملة، ولا يقدم علامة نهاية صريحة.

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

لا يوجد أيضًا تدفق CRYPTO واحد على مستوى الاتصال. لكل مستوى تشفير تدفق مستقل تبدأ إزاحاته من الصفر. يمكن أن تحمل حزم Initial وHandshake و1-RTT إطارات CRYPTO، أما 0-RTT فلا يحملها. لذلك لا يجوز جمع الإزاحات المتساوية من مستويات مختلفة في تسلسل عالمي. يضع QUIC البيانات في تسلسل المستوى الصحيح، ويحتفظ بالفجوات، وقد ينتظر بيانات مستوى مستقبلي إلى أن يصبح TLS مستعدًا له. ثم يسلم البايتات المتصلة حديثًا إلى TLS بالترتيب.

يجب الفصل بين عمل الطبقتين. يتولى QUIC الترتيب والتخزين المؤقت للبايتات الواردة خارج الترتيب، بينما يتولى TLS تخزين البايتات التي وصلته بالترتيب وتحليل الرسائل المكتملة. قد يعالج TLS البايتات تدريجيًا أو ينتظر رسالة أو دفعة رسائل مكتملة. إزالة حماية الحزمة ليست نجاحًا في تحليل TLS. كما أن توافر مفتاح نتيجة لمعالجة مدخلات TLS، وليس برهانًا توفره رؤية إطار واحد. ولا يثبت الإطار أيضًا أن مفتاحًا قد ثُبّت.

ينبغي أن يسجل السجل التشغيلي إصدار QUIC ونوع الحزمة ومساحة أرقام الحزم ومستوى التشفير ونتيجة حماية الحزمة ورقمها. ثم يسجل offset وlength وبصمة بيانات تراعي الخصوصية، والنطاق المتصل المستلم لكل مستوى، والفجوات التي يحتفظ بها QUIC، والنطاق والوقت اللذان سُلّما إلى TLS. ولا يسجل نوع رسالة TLS إلا بعد أن يحلل TLS رسالة مكتملة. أما التحقق من الشهادة والتنبيهات وتوافر المفاتيح والتخلص منها واكتمال TLS وتأكيد QUIC وجاهزية التطبيق فهي إيصالات مستقلة.

لا تحمل إطارات CRYPTO سوى رسائل مصافحة TLS. وتُحوّل تنبيهات TLS إلى رموز خطأ QUIC من نوع CONNECTION_CLOSE، ولا يمكن نقل بيانات تطبيق TLS أو أنواع محتواه الأخرى في إطارات CRYPTO. ولا يخضع CRYPTO للتحكم في التدفق، ولا يملك stream ID أو FIN أو نهاية صريحة. ويجب أن تدعم عمليات التنفيذ 4096 بايت على الأقل من بيانات CRYPTO الواردة خارج الترتيب. وقد يؤدي أكبر offset مفرط إلى FRAME_ENCODING_ERROR أو CRYPTO_BUFFER_EXCEEDED. هذه إشارات تخص النقل وحماية الموارد، وليست إثباتًا لقبول شهادة أو انتقال مفتاح أو جاهزية خدمة.

إذا تقدم TLS إلى مستوى أعلى وبقيت بيانات من المستوى السابق لم يستهلكها TLS، يعامل الطرف الحالة باعتبارها PROTOCOL_VIOLATION. وعند التخلص من مفاتيح مساحة أرقام الحزم المعنية، يتم التخلص من بيانات Initial أو Handshake المقابلة. لكن ذلك لا يمثل حدًا دلاليًا لرسالة TLS. لا تكتمل مصافحة TLS إلا عندما يبلغ مكدس TLS عن إكمالها بعد إرسال Finished والتحقق من Finished الخاص بالطرف الآخر. أما تأكيد المصافحة في QUIC وجاهزية التطبيق فهما حالتان لاحقتان ومستقلتان.

ينبغي كذلك عدم خلط هذه المسألة بخمس مسائل قريبة. TR-048 يخص تأكيد المصافحة وجاهزية التطبيق. TR-049 يخص تجميع حزم QUIC في وحدة بيانات UDP واحدة. TR-045 يخص ما الذي يثبته الإقرار. TR-056 يخص إعادة بناء أرقام الحزم. TR-063 يخص الانتقال إلى العنوان المفضل. لا يحول أي منها حدود إطار CRYPTO إلى حدود رسالة TLS.

القاعدة العملية هي أن تكون قوة الادعاء مساوية لقوة الإيصال. يثبت الإطار أن حزمة محمية حملت نطاقًا معينًا من بايتات المصافحة في مستوى محدد. تثبت إعادة التجميع الاستمرارية داخل ذلك المستوى. ويثبت محلل TLS الرسالة الكاملة. أما الشهادة والمفتاح واكتمال TLS وتأكيد QUIC وجاهزية التطبيق فتحتاج إلى إيصالاتها الخاصة.