استبدال SHA-1 بـ xxHash في محرر Unreal يخفض زمن تجزئة الشيدرات من 12.90 إلى 1.59 ثانية
المغزى: سؤال هل تغيّر الملف لا يحتاج دالة تشفيرية، واستخدام دالة آمنة في مكان لا يحتاج إلى الأمان تكلفة يدفعها المستخدم من وقته دون مقابل.
نشر المطور Lars Thießen في 11 أكتوبر 2026 مقالة يشرح فيها كيف وجد محرر Unreal Engine يستخدم دالة SHA-1 لحساب بصمة (hash) لكود الشيدرات، وهي البرامج الصغيرة التي ترسم الصورة على كرت الشاشة. وبعد استبدالها بدالة xxHash، انخفض الزمن من 12.90 ثانية إلى 1.59 ثانية، أي نحو ثمانية أضعاف.
ودالة SHA-1 دالة تجزئة تشفيرية، أي أنها مصممة بحيث يصعب على أحد اختلاق مُدخل مختلف يعطي الناتج نفسه. ولهذه الحماية تكلفة في الحساب، وهي تكلفة مبررة حين يكون هناك ما يُحمى من التلاعب.
لكن المحرر كان يستدعي الدالة FSHA1::Update في خطوة Compile Global Shader Map ليمرر عليها كود المصدر كاملًا، بما فيه التعليقات وسطور حقوق الملكية، لغرض واحد: معرفة ما إذا كان الملف قد تغير. وهذا السؤال لا يحتاج إلى تشفير، بل إلى checksum سريع. والدالة البديلة FXxHash64Builder كانت موجودة أصلًا داخل كود المحرك، فلم يُضَف أي مكتبة جديدة، وصغرت البصمة المخزنة من 20 بايت إلى 8.
والقياس جاء بحذر. فقد فُتح مشروع Electric Dreams خمس مرات بالتعديل وخمسًا دونه، وقيس الأداء بأداة Superluminal. والرقم مجموع وقت المعالج على كل الـ threads وليس الزمن الفعلي على الساعة، فأثره الحقيقي على زمن فتح المشروع يقارب هذا الرقم مقسومًا على عدد أنوية المعالج. وقُدِّم التعديل إلى Epic في pull request رقم 15237 وقُبل، ولم يكن قد دُمج وقت كتابة المقالة، وغلّفت مراجعة Epic البصمة في struct باسم FShaderHash.
والدرس أوسع من محركات الألعاب. ففي مواضع كثيرة صار SHA-256 خيارًا افتراضيًا، مثل مفاتيح الكاش وإزالة التكرار وتسمية الملفات المؤقتة، بينما السؤال في كل منها هو هل تغيّر الشيء، لا هل يحاول أحد الخداع.