حقل obfuscation في Chat Completions من OpenAI يوحّد حجم أجزاء الرد لإخفاء طوله
التشفير يخفي محتوى الرد لكنه لا يخفي حجمه، وحقل مفعّل افتراضيًا يسد هذه الثغرة مقابل استهلاك أعلى، وإيقافه لتوفير البيانات يعيدها.
أضاف الإصدار 3.4.0 من مكتبة openai-python، المنشور في 25 أغسطس 2026، حقلًا باسم obfuscation إلى ChatCompletionChunk، أي إلى كل جزء (chunk) من الرد عند استخدام الـ streaming في Chat Completions. وكان الحقل موجودًا من قبل في Responses API، والجديد وصوله إلى Chat Completions، وهو الـ endpoint الذي يعتمد عليه أغلب المطورين. وصدر الإصدار 3.5.0 بعده بيومين.
ويصف كود الـ SDK الحقل بأنه نص يُضاف لتوحيد حجم الأجزاء المرسلة، كتخفيف لنوع معيّن من هجمات الـ side-channel. وهو مفعّل افتراضيًا، ويمكن إيقافه عبر ضبط stream_options.include_obfuscation على false.
ولفهم سبب وجوده: يصل الرد في وضع الـ streaming على دفعات متتالية. وبروتوكول TLS يشفّر محتوى كل دفعة، لكنه لا يخفي حجمها. وحجم الدفعة ليس عشوائيًا، بل يرتبط بطول النص الذي تحمله.
فمن يراقب الشبكة بين المستخدم والـ API لا يرى أي كلمة، لكنه يرى تسلسل الأحجام بالترتيب. وهذا التسلسل وحده قد يكفي لتخمين بعض الكلمات أو الاقتراب من موضوع المحادثة، دون فك أي حرف. والحل أن تخرج كل الدفعات بحجم واحد، فيصبح التسلسل مسطّحًا لا يكشف شيئًا.
والأثر العملي أن كل رد عبر الـ streaming يستهلك bandwidth إضافيًا، وهذا مقصود وليس خطأ. وإيقاف الخاصية يوفر هذا الحجم، لكنه يعيد فتح الـ side channel الذي أُضيفت لإغلاقه.
واللافت أن الخاصية أُضيفت مفعّلة افتراضيًا ودون إعلان واسع. ومن يوقفها بهدف تقليل البيانات المنقولة قد لا يدرك ما الذي يوقفه تحديدًا.