من المعروف أن /dev/random، وهو مولد أرقام عشوائية زائفة وآمن تشفيريًا (CSPRNG)، يعاني من مشكلة واحدة مزعجة: الحظر. تشرح هذه المقالة كيف يمكنك حلها.
على مدى الأشهر القليلة الماضية، تم إعادة صياغة مرافق توليد الأرقام العشوائية في النواة بشكل طفيف، ولكن تم حل المشاكل في هذا النظام الفرعي على مدار العام الأوسع . معظم تم إجراؤها لمنع استدعاء نظام getrandom() من الحظر لفترة طويلة عند تشغيل النظام، ولكن السبب الأساسي لذلك هو سلوك الحظر للتجميع العشوائي. كان من الممكن أن يؤدي التصحيح الأخير إلى إزالة هذا التجمع وكان من المتوقع أن يتجه نحو النواة الرئيسية.
نشر آندي لوتوميرسكي الإصدار الثالث من التصحيح في نهاية شهر ديسمبر. يساهم «два основных семантических изменения в случайных API Linux». يضيف التصحيح علامة GRND_INSECURE جديدة إلى استدعاء النظام getrandom() (على الرغم من أن Lutomirsky يشير إليها باسم getentropy()، والتي يتم تنفيذها في glibc باستخدام getrandom() مع العلامات الثابتة)؛ تؤدي هذه العلامة إلى قيام المكالمة بإرجاع كمية البيانات المطلوبة دائمًا، ولكن دون ضمان أن البيانات عشوائية. ستبذل النواة ببساطة قصارى جهدها لإنتاج أفضل البيانات العشوائية المتوفرة لديها في الوقت المحدد. "ربما يكون أفضل ما يمكنك فعله هو تسميته "غير آمن" (غير آمن) لمنع استخدام واجهة برمجة التطبيقات هذه للأشياء التي تحتاج إلى الأمان."
تقوم التصحيحات أيضًا بإزالة تجمع الحظر. تحتفظ النواة حاليًا بمجموعتي بيانات عشوائيتين، واحدة تتوافق مع /dev/random والأخرى لـ /dev/urandom، كما هو موضح في هذا 2015. تجمع الحظر هو تجمع /dev/random؛ سيتم حظر عمليات القراءة لهذا الجهاز (بمعنى اسمه) حتى يتم جمع إنتروبيا "كافية" من النظام لتلبية الطلب. يتم أيضًا حظر القراءات الإضافية من هذا الملف إذا لم يكن هناك إنتروبيا كافية في المجمع.
تعني إزالة تجمع القفل أن القراءة من /dev/random تتصرف مثل getrandom() مع تعيين العلامات على الصفر (ويحول علامة GRND_RANDOM إلى noop). بمجرد تهيئة منشئ الأرقام العشوائية المشفرة (CRNG)، لن يتم حظر القراءة من /dev/random واستدعاءات getrandom(...,0) وستعيد الكمية المطلوبة من البيانات العشوائية.
يقول لوتوميرسكي: «Я считаю, что блокирующий пул Linux изжил себя. CRNG Linux генерирует выходные данные, которые достаточно хороши, чтобы использовать их даже для генерации ключей. Блокирующий пул не является более сильным в любом материальном отношении, и для его поддержания требуется много инфраструктуры сомнительной ценности».
تم إجراء التغييرات بهدف ضمان عدم تأثر البرامج الحالية فعليًا، وفي الواقع، ستكون هناك مشكلات أقل مع فترات الانتظار الطويلة لأشياء مثل إنشاء مفتاح GnuPG.
"يجب ألا تؤدي هذه الأحداث إلى تعطيل أي برامج موجودة. /dev/urandom يبقى دون تغيير. لا يزال /dev/random يحظر فورًا عند التمهيد، ولكنه يحظر بشكل أقل من ذي قبل. getentropy() مع الأعلام الموجودة سيُرجع نتيجة مناسبة تمامًا للأغراض العملية كما كان من قبل."
وأشار لوتوميرسكي إلى أنه لا يزال هناك سؤال مفتوح حول ما إذا كان يجب على النواة توفير ما يسمى بـ "الأرقام العشوائية الحقيقية"، وهو ما كان من المفترض أن تفعله النواة المحظورة إلى حد ما. وهو يرى سببا واحدا فقط لذلك: "الامتثال للمعايير الحكومية". اقترح Lutomirsky أنه إذا كانت النواة ستوفر ذلك، فيجب أن يتم ذلك من خلال واجهة مختلفة تمامًا، أو يجب نقلها إلى مساحة المستخدم، مما يسمح للمستخدم باسترداد عينات الأحداث الأولية التي يمكن استخدامها لإنشاء تجمع القفل هذا.
اقترح ستيفان مولر مجموعته для генератора случайных чисел Linux (LRNG) (в настоящее время выпущена 26 версия) может быть способом предоставления истинных случайных чисел для приложений, которые в этом нуждаются. LRNG «полностью соответствует требованиям «Рекомендаций по источникам энтропии, используемым для генерации случайных битов» SP800-90B», что делает его решением проблемы государственных стандартов.
اعترض ماثيو جاريت على مصطلح «البيانات العشوائية الحقيقية»، مشيرًا إلى أن الأجهزة التي تم أخذ عينات منها يمكن من حيث المبدأ تصميمها بدقة كافية لجعلها قابلة للتنبؤ بها: «نحن لا نأخذ عينات من الأحداث الكمومية هنا».
أجاب مولر أن المصطلح يأتي من المعيار الألماني AIS 31 لوصف مولد الأرقام العشوائي الذي ينتج نتيجة فقط "بنفس المعدل الذي ينتج فيه مصدر الضوضاء الأساسي الإنتروبيا".
وبغض النظر عن الاختلافات في المصطلحات، فإن وجود مجموعة قفل كما هو مقترح من خلال تصحيحات LRNG سيؤدي ببساطة إلى مشكلات مختلفة، على الأقل إذا تم الوصول إليها دون امتيازات.
كما قال لوتوميرسكي: "هذا لا يحل المشكلة. إذا قام مستخدمان مختلفان بتشغيل برامج غبية مثل gnupg، فسوف يستنزفان بعضهما البعض. أرى أن هناك حاليًا مشكلتين رئيسيتين مع /dev/random: فهو عرضة لـ DoS (أي استنزاف الموارد أو التأثير الضار أو شيء مشابه)، وبما أنه لا يتطلب أي امتيازات لاستخدامه، فهو أيضًا عرضة لإساءة الاستخدام. Gnupg خطأ، إنه انهيار كامل. إذا أضفنا واجهة جديدة غير مميزة سيستخدمها برنامج gnupg والبرامج المشابهة، فسوف نخسر مرة أخرى."
أشار مولر إلى أن إضافة getrandom() ستسمح الآن لـ GnuPG باستخدام هذه الواجهة، لأنها ستوفر الضمان اللازم لتهيئة المجمع. استنادًا إلى المناقشات مع مطور GnuPG Werner Koch، يعتقد مولر أن الضمان هو السبب الوحيد الذي يجعل GnuPG يقرأ حاليًا مباشرة من /dev/random. ولكن إذا كانت هناك واجهة غير مميزة وعرضة لرفض الخدمة (كما هو الحال اليوم /dev/random)، فإن Lutomirsky يجادل بأنه سيتم إساءة استخدامها من قبل بعض التطبيقات.
Теодор Цао (Theodore Yue Tak Ts’o), разработчик подсистемы случайных чисел Linux, по-видимому, изменил свое мнение по поводу необходимости блокирующего пула. Он сказал, что удаление этого пула позволит эффективно избавиться от идеи, что Linux имеет настоящий генератор случайных чисел (TRNG): "هذا ليس هراء، لأن هذا هو بالضبط ما فعلته *BSD دائمًا."
Он также обеспокоен тем, что предоставление механизма TRNG будет просто служить в качестве приманки для разработчиков приложений и считает, что на самом деле, учитывая различные типы аппаратного обеспечения, поддерживаемого Linux, невозможно гарантировать TRNG в ядре. Проблему не решит даже возможность работы с оборудование только на основе root-привилегий: "يحدد مطورو التطبيقات تثبيت تطبيقاتهم كجذر لأغراض أمنية، بحيث تكون هذه هي الطريقة الوحيدة التي يمكنك من خلالها الوصول إلى الأرقام العشوائية "الجيدة حقًا"."
وتساءل مولر عما إذا كان تساو قد تخلى عن تنفيذ مجموعة الحظر التي اقترحها هو نفسه منذ فترة طويلة. رد Cao بأنه يخطط لأخذ تصحيحات Lutomirsky ويعارض بشدة إضافة واجهة حظر مرة أخرى إلى النواة.
"لا تستطيع النواة تقديم أي ضمانات فيما يتعلق بما إذا كان مصدر الضوضاء قد تم تمييزه بشكل صحيح أم لا. الشيء الوحيد الذي يمكن أن يحصل عليه مطور GPG أو OpenSSL هو شعور غامض بأن TRUERANDOM "أفضل"، وبما أنهم يريدون المزيد من الأمان، فسيحاولون استخدامه بلا شك. في مرحلة ما سيتم حظره، وعندما يقوم مستخدم ذكي آخر (ربما متخصص توزيع) بإدراجه في البرنامج النصي init وتتوقف الأنظمة عن العمل، لن يكون على المستخدمين سوى تقديم شكوى إلى Linus Torvalds نفسه.
يدعو Cao أيضًا إلى منح مصممي التشفير وأولئك الذين يحتاجون بالفعل إلى TRNG طريقة لحصد الإنتروبيا الخاصة بهم في مساحة المستخدم لاستخدامها على النحو الذي يرونه مناسبًا. ويقول إن جمع الإنتروبيا ليس عملية يمكن إجراؤها بواسطة النواة على جميع الأجهزة المختلفة التي تدعمها، ولا تستطيع النواة نفسها تقدير مقدار الإنتروبيا التي توفرها المصادر المختلفة.
"لا ينبغي للنواة أن تخلط مصادر الضوضاء المختلفة معًا، وبالتأكيد لا ينبغي أن تحاول الادعاء بمعرفة عدد أجزاء الإنتروبيا التي تحصل عليها عندما تحاول لعب نوع من "لعبة الإنتروبيا المضطربة" على وحدة معالجة مركزية بسيطة للغاية "الهندسة المعمارية للمستخدمين المستهلكين. IOT / الحالات المضمنة حيث يكون كل شيء غير متزامن مع مذبذب رئيسي واحد، حيث لا توجد تعليمات وحدة المعالجة المركزية لإعادة ترتيب أو إعادة تسمية السجل، وما إلى ذلك. "
"يمكنك التحدث عن توفير الأدوات التي تحاول إجراء هذه الحسابات، ولكن مثل هذه الأشياء يجب القيام بها على أجهزة كل مستخدم، وهو أمر غير عملي بالنسبة لمعظم مستخدمي التوزيع. إذا كان هذا مخصصًا لمتخصصي التشفير فقط، فليكن ذلك في مساحة المستخدم الخاصة بهم. ودعونا لا نقوم بتبسيط GPG وOpenSSL وما إلى ذلك بحيث يقول الجميع "نريد "العشوائية الحقيقية" ولن نقبل بأقل من ذلك." يمكننا التحدث عن كيفية توفير واجهات لمتخصصي التشفير حتى يتمكنوا من الحصول على المعلومات التي يحتاجون إليها عن طريق الوصول إلى مصادر الضوضاء الأولية، المنفصلة والمسماة، وربما بطريقة ما يمكن لمصدر الضوضاء أن يصادق على نفسه إلى مكتبة أو تطبيق مساحة المستخدم."
وكانت هناك بعض المناقشات حول الشكل الذي قد تبدو عليه هذه الواجهة، لأنه على سبيل المثال قد تكون هناك آثار أمنية لبعض الأحداث. وأشار كاو إلى أن رموز فحص لوحة المفاتيح (أي ضغطات المفاتيح) يتم خلطها في مجموعة كجزء من مجموعة الإنتروبيا: "إن جلب هذا إلى مساحة المستخدم، حتى من خلال استدعاء نظام مميز، سيكون من غير الحكمة على أقل تقدير." من المحتمل جدًا أن تؤدي توقيتات الأحداث الأخرى إلى حدوث نوع من تسرب المعلومات عبر القنوات الجانبية.
Таким образом, возникает ощущение, что давняя проблема подсистемы случайных чисел Linux находится на пути к решению. Изменения, которые подсистема случайных чисел претерпела в последнее время, фактически приводили только к проблемам DoS в процессе ее использования. Теперь же появились эффективные способы получить наилучшие случайные числа, какие только может предоставить ядро. Если же TRNG все еще желателен для Linux, то этот недостаток нужно будет устранить в будущем, но, скорее всего, это не будет делаться внутри самого ядра.
بعض الاعلانات 🙂
أشكركم على البقاء معنا. هل تحب مقالاتنا؟ تريد أن ترى المزيد من المحتوى المثير للاهتمام؟ ادعمنا عن طريق تقديم طلب أو التوصية للأصدقاء ، , تناظرية فريدة من خوادم المستوى المبتدئ ، اخترعناها من أجلك: (متوفر مع RAID1 و RAID10 ، حتى 24 مركزًا وحتى 40 جيجا بايت DDR4).
Dell R730xd أرخص مرتين في مركز بيانات Equinix Tier IV في أمستردام؟ هنا فقط في هولندا! Dell R420 - 2x E5-2430 2.2 جيجا هرتز 6C 128 جيجا بايت DDR3 2x960 جيجا بايت SSD 1 جيجا بايت في الثانية 100 تيرا بايت - من 99 دولارًا! أقرأ عن
المصدر: www.habr.com
