أعلن جيسون أ. دونينفيلد ، مؤلف برنامج WireGuard VPN، مؤخرًا عن تطبيق جديد ومحدث لمولد الأرقام العشوائية RDRAND ، وهو المسؤول عن تشغيل أجهزة /dev/random و /dev/urandom في نواة لينكس.
في نهاية شهر نوفمبر ، تم إدراج Jason في قائمة المشرفين على وحدة التحكم العشوائية ونشر الآن النتائج الأولى لأعمال إعادة العمل الخاصة به.
يذكر الإعلان أن التنفيذ الجديد جدير بالذكر لانتقاله إلى استخدام دالة التجزئة BLAKE2s بدلاً من SHA1 لعمليات خلط الإنتروبيا.
تتمتع BLAKE2s نفسها بخاصية جميلة تتمثل في كونها تعتمد داخليًا على
تبديل ChaCha ، والذي يستخدمه RNG بالفعل للتوسيع ، لذلك
يجب ألا تكون هناك مشكلة في الجدة أو الأصالة أو وحدة المعالجة المركزية المذهلة
السلوك لأنه يعتمد على شيء قيد الاستخدام بالفعل.
علاوة على ذلك، تجدر الإشارة إلى أن هذا التغيير قد حسّن أيضًا من أمان مولد الأرقام العشوائية الزائفة، وذلك بإزالة خوارزمية SHA1 الإشكالية ومنع الكتابة فوق متجه تهيئة مولد الأرقام العشوائية. وبما أن خوارزمية BLAKE2s تتفوق على SHA1، فقد كان لاستخدامها أثر إيجابي على أداء مولد الأرقام العشوائية الزائفة (أظهرت الاختبارات على نظام بمعالج Intel i7-11850H زيادة في السرعة بنسبة 131%).
ومن المزايا الأخرى التي تم تسليط الضوء عليها أن نقل مزيج الإنتروبيا إلى BLAKE2 هو توحيد للخوارزميات المستخدمة: يتم استخدام BLAKE2 في تشفير ChaCha، والذي يتم استخدامه بالفعل لاستخراج التسلسلات العشوائية.
يُعدّ BLAKE2s أسرع بشكل عام وأكثر أمانًا بلا شك، ولكنه تعرّض لاختراق خطير. علاوة على ذلك، لا تستخدم بنية مولد الأرقام العشوائية الحالية وظيفة SHA1 كاملة كما هو مُحدد، وتسمح بالكتابة غير الموثقة لمتجه التهيئة (IV) بمخرج RDRAND ، حتى لو لم يتم تكوين RDRAND على أنه "موثوق"، مما يعني وجود خيارات لمتجه التهيئة قد تكون ضارة.
وقصر طولها يعني أن الاحتفاظ بنصفها فقط من السرية عند إعادتها إلى المُخَلِّط لا يُعطينا سوى 2^80 بت من السرية الأمامية. بعبارة أخرى، ليس اختيار دالة التجزئة قديمًا فحسب، بل إن استخدامها ليس جيدًا أيضًا.
بالإضافة إلى ذلك ، تم إجراء تحسينات على منشئ الأرقام العشوائية الزائفة CRNG ذات التشفير الآمن المستخدم في مكالمة getrandom.
يُذكر أيضًا أن التحسينات تتلخص في الحد من استدعاء مولد RDRAND البطيء عند استخراج الإنتروبيا، مما قد يُحسّن الأداء بمقدار 3,7 أضعاف. وقد أوضح جيسون أن استدعاء RDRAND لا يكون مُجديًا إلا في حالة عدم اكتمال تهيئة مولد الأرقام العشوائية المُعاد توليدها (CRNG)، ولكن إذا اكتملت تهيئة CRNG، فإن قيمته لا تؤثر على جودة التسلسل المُولّد، وفي هذه الحالة، يُمكن القيام بذلك دون استدعاء RDRAND.
يهدف هذا الالتزام إلى حل هاتين المشكلتين وفي نفس الوقت الحفاظ على الهيكل العام والدلالات أقرب ما يمكن إلى الأصل.
على وجه التحديد:أ) بدلاً من الكتابة فوق التجزئة IV باستخدام RDRAND ، وضعنا حقلي "ملح" و "شخصي" موثقين من BLAKE2 ، وهما تم إنشاؤها خصيصًا لهذا النوع من الاستخدام.
ب) نظرًا لأن هذه الوظيفة ترجع نتيجة التجزئة الكاملة إلى ملف جامع الانتروبيا ، نعيد فقط نصف طول التجزئة ، تمامًا كما تم إجراؤها من قبل. هذا يزيد من سر البناء المسبق 2 ^ 80 أ 2 ^ 128 أكثر راحة.
ج) بدلاً من مجرد استخدام وظيفة "sha1_transform" الخام ، بدلاً من ذلك ، نستخدم وظيفة BLAKE2s الكاملة والمناسبة ، مع اكتمالها.
من المقرر إدراج التغييرات في النواة 5.17 وقد تمت مراجعتها بالفعل من قبل المطورين تيد تسو (الشخص الثاني المسؤول عن صيانة برنامج التشغيل العشوائي)، وجريج كروه هارتمان (المسؤول عن الحفاظ على استقرار نواة لينكس) وجان فيليب أوماسون (مؤلف خوارزميات BLAKE2/3).
وأخيرًا، إذا كنت مهتمًا بمعرفة المزيد، يمكنك العثور على التفاصيل في الرابط التالي.