لينكس: إزالة قفل التجمع / ديف / عشوائي

كما تعلمون ، / dev / random ، يحتوي مولد الأرقام العشوائية الزائفة القوي (CSPRNG) ، على مشكلة واحدة غير سارة - حظر. توضح هذه المقالة كيفية حلها.

خلال الأشهر القليلة الماضية ، تمت إعادة صياغة وسائل توليد أرقام عشوائية في النواة بشكل طفيف ، لكن تم حل المشكلات في هذا النظام الفرعي على نطاق زمني أوسع. تم إجراء أحدث التغييرات لمنع حظر استدعاء النظام getrandom () لفترة طويلة أثناء تشغيل النظام ، ولكن السبب وراء ذلك هو سلوك تجمع العشوائي المحظور. من شأن التصحيح الأخير إزالة هذا التجمع ، وكان من المتوقع أن يذهب إلى النواة الرئيسية.

أصدر أندي لوتوميرسكي النسخة الثالثة من التصحيح في أواخر ديسمبر. يجعل "اثنين من التغييرات الدلالية الأساسية إلى واجهات برمجة التطبيقات لينكس عشوائي . " يضيف التصحيح علامة GRND_INSECURE الجديدة إلى استدعاء نظام getrandom () (على الرغم من أن Lutomirsky يشير إليها كـ getentropy () ، والتي يتم تنفيذها في glibc باستخدام getrandom () مع إشارات ثابتة) ؛ يفرض هذا العلم الدعوة إلى إرجاع كمية البيانات المطلوبة دائمًا ، ولكن دون ضمان أن تكون البيانات عشوائية. ستبذل النواة ببساطة قصارى جهدها لتقديم أفضل البيانات العشوائية الموجودة في وقت معين. "ربما أفضل شيء يمكنك القيام به هو تسميته" غير آمن " (غير آمن) لمنع استخدامه للأشياء التي تحتاج إلى الأمان."

بقع أيضا إزالة تجمع حجب. حاليًا ، تدعم النواة مجموعتي بيانات عشوائية ، أحدهما يتوافق مع / dev / random والآخر بـ / dev / urandom ، كما هو موضح في مقالة 2015. تجمع حظر هو تجمع لـ / dev / عشوائي؛ سيتم حظر القراءة لهذا الجهاز (بمعنى اسمه) حتى يتم جمع إنتروبيا "كافية" من النظام لتلبية الطلب. يتم حظر المزيد من القراءات من هذا الملف أيضًا في حالة عدم وجود إنتروبيا كافية في التجمع.

تعني إزالة تجمع القفل أن القراءة من / dev / عشوائي تتصرف مثل getrandom () مع تعيين قيمة الإشارات على صفر (وتحويل علامة GRND_RANDOM إلى noop). بعد تهيئة مولد الأرقام العشوائية المشفرة (CRNG) ، لن تؤدي القراءة من / dev / random و getrandom (... ، 0) إلى حظر وإرجاع الكمية المطلوبة من البيانات العشوائية.

يقول Lutomirsky: "أعتقد أن مجموعة حظر Linux أصبحت قديمة. يُنشئ CRNG Linux مخرجات جيدة بما يكفي لاستخدامها حتى في إنشاء المفاتيح. مجموعة الحجب ليست أقوى بأي معنى مادي ، وتتطلب الكثير من البنية التحتية ذات القيمة المشكوك فيها للحفاظ عليها. "

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

"يجب ألا تنتهك هذه السلسلة أي برامج حالية. / ديف / urandom يبقى دون تغيير. / dev / عشوائي لا يزال كتل مباشرة بعد التحميل ، لكنه كتل أقل من ذي قبل. سيعود getentropy () مع الأعلام الموجودة حاليًا بنتيجة ستكون عملية للغرض كما كان من قبل. "

أشار Lutomirsky إلى أن السؤال يظل مفتوحًا حول ما إذا كان يجب على القلب توفير "الأرقام العشوائية الحقيقية" المزعومة ، والتي كان ينبغي القيام بها إلى حد ما من قبل العنصر المحظور. لا يرى سوى سبب واحد لذلك: "الامتثال لمعايير الدولة". اقترح Lutomirsky أنه إذا كان يجب على kernel توفير ذلك ، فيجب أن يتم ذلك من خلال واجهة مختلفة تمامًا أو ينبغي نقله إلى مساحة المستخدم ، مما يسمح له باسترداد أنماط الأحداث غير المجهزة التي يمكن استخدامها لإنشاء تجمع تأمين.

اقترح Stephan Müller أن مجموعة التصحيح الخاصة به لمولد Linux رقم عشوائي (LRNG) (الإصدار 26 تم إصداره حاليًا) قد تكون وسيلة لتوفير أرقام عشوائية حقيقية للتطبيقات التي تحتاجها. LRNG "يتوافق تمامًا مع متطلبات" التوصيات المتعلقة بمصادر إنتروبيا المستخدمة لإنشاء وحدات البت العشوائية "SP800-90B" ، مما يجعله حلاً لمشكلة معايير الدولة.
اعترض ماثيو غاريت على مصطلح "بيانات عشوائية حقيقية" ، مشيرًا إلى أن الأجهزة القابلة للاختيار يمكن ، من حيث المبدأ ، أن تصمم بدقة بما يكفي لجعلها قابلة للتنبؤ: "نحن لا نأخذ أحداثًا مهمة هنا".

أجاب مولر بأن المصطلح يأتي من معيار AIS 31 الألماني لوصف مولد الأرقام العشوائية الذي ينتج فقط النتيجة "بنفس السرعة التي ينتج بها مصدر الضوضاء الأساسي إنتروبيا".

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

كما قال لوتوميرسكي: "هذا لا يحل المشكلة. إذا قام اثنان من المستخدمين بتشغيل برامج غبية مثل gnupg ، فإنهم ببساطة يستنفدون بعضهم البعض. أرى أن هناك حاليًا مشكلتان رئيسيتان في / dev / random: تكون عرضة لـ DoS (أي ، استنفاد الموارد ، أو التأثير الضار ، أو شيء مشابه) ، وبما أنها لا تتطلب أي امتيازات لاستخدامها ، فهي أيضًا عرضة لسوء المعاملة. Gnupg خطأ ، إنه انهيار كامل. إذا أضفنا واجهة جديدة غير مسبوقة تستخدمها gnupg والبرامج المماثلة ، فسنخسر مرة أخرى. "

لاحظ Muller أن إضافة getrandom () سيسمح الآن لـ GnuPG باستخدام هذه الواجهة ، حيث إنه سيوفر الضمان اللازم بتهيئة التجمع. استنادًا إلى المناقشات مع مطور GnuPG Werner Koch ، يعتقد Muller أن الضمان هو السبب الوحيد الذي يقرأ GnuPG حاليًا بشكل مباشر من / dev / عشوائي. ولكن إذا كان هناك واجهة غير منقطعة تخضع لرفض الخدمة (اعتبارًا من اليوم / dev / random) ، فوفقًا لـ Lutomirsky ، سيتم إساءة استخدامها من قبل بعض التطبيقات.

يبدو أن ثيودور يوي تاك تسو ، مطور نظام لينكس الفرعي للأرقام العشوائية ، قد غير رأيه بشأن الحاجة إلى تجمع للحجب. وقال إن إزالة هذا التجمع سيؤدي فعليًا إلى التخلص من فكرة أن Linux لديه منشئ حقيقي للأرقام العشوائية (TRNG): "هذا ليس هراءًا ، لأن هذا بالضبط ما فعلته BSD دائمًا."

إنه قلق أيضًا من أن توفير آلية TRNG سيكون بمثابة شرك لمطوري التطبيقات ويعتقد أنه في الواقع ، نظرًا لأنواع الأجهزة المختلفة التي يدعمها Linux ، لا يمكن ضمان TRNG في النواة. حتى القدرة على العمل مع المعدات القائمة على امتيازات الجذر لن تحل المشكلة: "يحدد مطورو التطبيقات أن تطبيقهم سيتم تثبيته كجذر لأسباب أمنية ، لأن هذه هي الطريقة الوحيدة التي يمكنك من خلالها الوصول إلى أرقام عشوائية" جيدة حقًا "."

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

"لا يمكن للنواة تقديم أي ضمانات بشأن ما إذا كان مصدر الضوضاء قد تم تحديده بشكل صحيح أم لا. الشيء الوحيد الذي يمكن أن يحصل عليه مطور GPG أو OpenSSL هو الشعور الغامض بأن TRUERANDOM "أفضل" ، ولأنهم يريدون مزيدًا من الأمان ، فإنهم بلا شك سيحاولون استخدامه. في مرحلة ما ، سيتم حظره ، وعندما يقوم مستخدم ذكي آخر (ربما متخصص في التوزيع) بإدراجه في البرنامج النصي الأولي وتوقف الأنظمة عن العمل ، سيتعين على المستخدمين تقديم شكوى إلى Linus Torvalds نفسه. "

تدعو Cao أيضًا إلى توفير cryptographers وأولئك الذين يحتاجون حقًا إلى TRNG معًا لجمع الانتروبيا الخاصة بهم في مساحة المستخدم حتى يتمكنوا من استخدامها كما يرونها مناسبة. يقول إن مجموعة إنتروبي ليست عملية يمكن أن تقوم بها النواة على جميع أنواع الأجهزة التي تدعمها ، بالإضافة إلى ذلك ، لا يمكن للنواة نفسها تقدير مقدار إنتروبيا التي توفرها مصادر مختلفة.

"لا ينبغي أن تجمع النواة بين مصادر الضوضاء المختلفة معًا ، وبالطبع ، لا ينبغي لها أن تدعي أنها تعرف عدد بتات الإنتروبيا التي تتلقاها عندما تحاول أن تلعب نوعًا من" لعبة متشنجة من الانتروبيا "على بنية وحدة المعالجة المركزية بسيطة للمستخدم القبيح "حالات IOT / المضمنة ، عندما يكون كل شيء غير متزامن مع مولد رئيسي واحد ، عندما لا يكون هناك تعليمات وحدة المعالجة المركزية لإعادة ترتيب أو إعادة تسمية السجل ، إلخ."

"يمكننا التحدث عن توفير الأدوات التي تحاول إجراء هذه الحسابات ، ولكن يجب إجراء مثل هذه الأشياء على أجهزة كل مستخدم ، وهو أمر غير عملي بالنسبة لمعظم المستخدمين. إذا كان هذا مخصصًا فقط للمشفرين ، فليكن ذلك في مساحة المستخدم الخاصة بهم. ودعنا لا نبسط GPG ، OpenSSL ، إلخ ، بحيث يقول الجميع: "نحن نريد" عشوائية عشوائية "ولا نتفق على أي شيء أقل". يمكننا أن نتحدث عن كيفية توفير واجهات للمشفرين بحيث يمكنهم الحصول على المعلومات الضرورية من خلال الوصول إلى مصادر الضوضاء الأساسية ، مفصولة ومسمومة ، وربما يمكن لمصدر الضوضاء بطريقة ما المصادقة في مكتبة أو تطبيق مساحة مستخدم. "

كان هناك القليل من النقاش حول كيفية ظهور مثل هذه الواجهة ، لأنه على سبيل المثال ، قد تكون هناك بعض الآثار الأمنية لبعض الأحداث. أشار تساو إلى أن رموز فحص لوحة المفاتيح (أي ضغطات المفاتيح) يتم خلطها في المجموعة كجزء من مجموعة إنتروبي: "نقل هذا إلى مساحة المستخدم ، حتى من خلال مكالمة نظام مميزة ، سيكون غير معقول على الأقل." من الممكن أن تؤدي مواعيد الأحداث الأخرى إلى نوع من تسرب المعلومات عبر القنوات الجانبية.

وبالتالي ، هناك شعور بأن مشكلة نظام الأرقام العشوائية لينكس طويلة الأمد في طريقها إلى حل. التغييرات التي شهدها النظام الفرعي للرقم العشوائي مؤخرًا ، في الواقع ، أدت فقط إلى مشاكل DoS في عملية استخدامه. الآن هناك طرق فعالة للحصول على أفضل الأرقام العشوائية التي يمكن أن توفرها النواة. إذا كان TRNG لا يزال مرغوبًا فيه على نظام Linux ، فسوف يتعين معالجة هذا القصور في المستقبل ، ولكن على الأرجح لن يتم ذلك داخل النواة نفسها.

قليلا من الإعلان :)


شكرا لك على البقاء معنا. هل تحب مقالاتنا؟ تريد أن ترى المزيد من المواد المثيرة للاهتمام؟ ادعمنا عن طريق تقديم طلب أو التوصية لأصدقائك ، VPS المستندة إلى مجموعة النظراء للمطورين من 4.99 دولار ، وهو تناظرية فريدة من الخوادم على مستوى الدخول التي اخترعناها لك: الحقيقة الكاملة حول VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps من 19 $ أو كيفية تقسيم الخادم؟ (تتوفر خيارات مع RAID1 و RAID10 ، ما يصل إلى 24 مركزًا وما يصل إلى 40 جيجابايت من ذاكرة DDR4).

Dell R730xd أرخص مرتين في مركز بيانات Equinix Tier IV في أمستردام؟ فقط لدينا 2 من Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6 جيجا هرتز 14 جيجا بايت 64 جيجا بايت DDR4 4 × 960 جيجا بايت SSD 1 جيجابت في الثانية 100 TV من 199 دولار في هولندا! Dell R420 - 2x E5-2430 سعة 2 جيجا هرتز 6 جيجا بايت 128 جيجا بايت DDR3 2x960GB SSD بسرعة 1 جيجابت في الثانية 100 تيرابايت - من 99 دولارًا! اقرأ عن كيفية بناء البنية التحتية فئة باستخدام خوادم V4 R730xd E5-2650d تكلف 9000 يورو عن بنس واحد؟

Source: https://habr.com/ru/post/ar484736/


All Articles