CryptGenRandom
CryptGenRandom هي دالة لتوليد أرقام شبه عشوائية آمنة تشفيرياً، وهي مُضمنة في Microsoft CryptoAPI . في برامج Win32 ، أوصت مايكروسوفت باستخدامها في أي مكان يتطلب توليد أرقام عشوائية (وقد تم استبدالها لاحقاً بـ BCryptGenRandom ، انظر أدناه). أما المكافئ لها في kernel32 فهو RtlGenRandom .
أشارت ورقة بحثية صادرة عن الجامعة العبرية عام ٢٠٠٧ إلى وجود ثغرات أمنية في تطبيق CryptGenRandom لنظام التشغيل Windows 2000 (بافتراض سيطرة المهاجم على الجهاز). أقرت مايكروسوفت لاحقًا بوجود نفس الثغرات في نظام التشغيل Windows XP ، ولكن ليس في نظام التشغيل Vista . وأصدرت مايكروسوفت تحديثًا لإصلاح هذه الثغرة مع حزمة الخدمة الثالثة لنظام التشغيل Windows XP في منتصف عام ٢٠٠٨. [ ١ ]
تم إيقاف استخدام CryptGenRandom لأنه ينتمي إلى واجهة برمجة تطبيقات التشفير القديمة لنظام التشغيل Windows CryptoAPI. البديل الحديث لواجهة برمجة تطبيقات التشفير: الجيل التالي (CNG) هو BCryptGenRandom (والوظائف الأساسية ProcessPrng وSystemPrng). [ 2 ]
خلفية
تتضمن واجهة برمجة تطبيقات Win32 دعمًا شاملاً للتشفير من خلال Microsoft CryptoAPI ، وهي مجموعة من الأدوات التشفيرية الأساسية التي توفرها مايكروسوفت لاستخدامها في تطبيقات ويندوز. تعتمد تقنيات ويندوز، مثل دعم TLS (عبر واجهة برمجة تطبيقات Schannel ) وتوقيع التعليمات البرمجية ، على هذه الأدوات، والتي بدورها تعتمد على مولد أرقام عشوائية زائفة آمن تشفيريًا (CSPRNG). يُعد مولد الأرقام العشوائية الزائفة القياسي المرفق مع Microsoft CryptoAPI.CryptGenRandom
طريقة التشغيل
قبل نظام التشغيل ويندوز فيستا
تتشارك موفري التشفير الذين توفرهم مايكروسوفت نفس التنفيذ CryptGenRandom، والذي يعتمد حاليًا على دالة داخلية تسمى RtlGenRandom. [ 3 ] لم يُنشر حتى عام 2007 سوى مخطط عام للخوارزمية .:
[ RtlGenRandom ] يُولّد الأرقام العشوائية وفقًا لما هو مُحدد في الملحق 3.1 من معيار FIPS 186-2، باستخدام خوارزمية SHA-1 كدالة توليد. ويتم حساب الإنتروبيا من:
- معرف العملية الحالي (GetCurrentProcessID).
- معرف مؤشر الترابط الحالي (GetCurrentThreadID).
- عدد الدورات منذ وقت بدء التشغيل (GetTickCount).
- الوقت الحالي (GetLocalTime).
- عدادات أداء متنوعة عالية الدقة (QueryPerformanceCounter).
- تجزئة MD4 لكتلة بيئة المستخدم، والتي تتضمن اسم المستخدم واسم الكمبيوتر ومسار البحث. [...]
- عدادات وحدة المعالجة المركزية الداخلية عالية الدقة، مثل RDTSC وRDMSR وRDPMC
[ تم حذف: قوائم طويلة من حقول معلومات النظام منخفضة المستوى وعدادات الأداء ] [ 4 ]
ويندوز فيستا والإصدارات الأحدث
وثّقت مايكروسوفت عملية تنفيذ مولد الأرقام العشوائية في نظام التشغيل ويندوز 10 بتفصيلٍ ما، في ورقة بيضاء نُشرت عام 2019. [ 5 ] في نظام التشغيل ويندوز 10:
- توجد سلسلة هرمية من مولدات الأرقام العشوائية. تحتوي النواة على مولد أرقام عشوائية زائف "جذري"، تُستمد منه جميع الأرقام العشوائية في نهاية المطاف. ثم تستخدم النواة مولد الأرقام العشوائية الزائف الجذري لتهيئة مولد أرقام عشوائية زائف واحد لكل معالج منطقي (بحيث تكون حالة مولد الأرقام العشوائية الزائف محلية للخيط ولا تتطلب أي تأمين). عند بدء تشغيل عملية ما، تطلب بايتات عشوائية من مولد الأرقام العشوائية الزائف الخاص بالنواة لكل معالج لتهيئة مولد الأرقام العشوائية الزائف الخاص بالعملية. ثم تستخدم مولد الأرقام العشوائية الزائف الخاص بالعملية لتهيئة مولد أرقام عشوائية زائف مُخزن مؤقتًا لكل معالج منطقي. [ 5 ]
- جميع استدعاءات مساحة المستخدم لجلب العشوائية، سواء كانت من النوع `AES-CTR-DRBG`
CryptGenRandomأو `AES-CTR-DRBG`،RtlGenRandomتُستدعى في النهاية إلى الدالة `get`، التي تُعيد بايتات من مولد الأرقام العشوائية الزائفة (PRNG) الخاص بكل معالج. يستخدم مولد الأرقام العشوائية الزائفة دائمًا خوارزمية AES-CTR-DRBG كما هو محدد في معيار FIPS SP800-90. على الرغم من أن الدالة ` get` تقبل طلبات الخوارزميات القديمة للتوافق مع الإصدارات السابقة ، إلا أنها لا تُعيد إلا أرقامًا عشوائية من مولد الأرقام العشوائية الزائفة الخاص بكل معالج. [ 5 ] : 8ProcessPrngBCryptGenRandom- أصبح معيار AES-CTR-DRBG، بدلاً من FIPS 186، هو المعيار الافتراضي منذ نظامي التشغيل Windows Vista و Windows Server 2008. [ 6 ]
- تمت إزالة الخوارزميات الأخرى في نظام التشغيل ويندوز 10. [ 6 ]
- يُعاد توليد الأرقام العشوائية الأساسية دوريًا من مخازن العشوائية. [ 5 ] : 9 عند بدء التشغيل، عندما تكون العشوائية المتاحة ضئيلة جدًا، يوفر إجراء "التوليد الأولي" الخاص البذرة من ملفات البذرة، والعشوائية الخارجية، وعشوائية وحدة TPM ، وتعليمات RDRAND /RDSEED، وجدول ACPI-OEM0، وعشوائية UEFI ، والوقت الحالي. [ 5 ] : 11
- تحتفظ نواة النظام بمجموعات متعددة من العشوائية. تُضاف مصادر عشوائية متعددة إلى هذه المجموعات، وأهمها توقيت المقاطعات. [ 5 ] : 12 عند استخدام مجموعة عشوائية، تُؤخذ قيمة تجزئة SHA-512 لمحتوياتها كناتج. [ 5 ] : 10 لا يقوم نظام ويندوز بتقدير العشوائية. [ 5 ] : 16
حماية
يُعدّ أمان مولد الأرقام العشوائية المشفرة (CSPRNG) في نظام التشفير أمرًا بالغ الأهمية، لأنه مصدر مواد المفاتيح الديناميكية. فالمفاتيح المطلوبة "فورًا"، مثل مفاتيح جلسات TLS التي تحمي اتصالات HTTPS ، تُستمد من مولدات الأرقام العشوائية المشفرة. وإذا كانت هذه الأرقام العشوائية قابلة للتنبؤ، فإن مفاتيح الجلسات تكون قابلة للتنبؤ أيضًا. ولأنها CryptGenRandomتُعتبر المعيار الفعلي لمولدات الأرقام العشوائية المشفرة في بيئات Win32، فإن أمانها بالغ الأهمية لمستخدمي نظام التشغيل Windows.
تحليل الشفرات
كشف تحليل تشفيري لبرنامج CryptGenRandom، نُشر في نوفمبر 2007 بواسطة ليو دورندورف وآخرين من الجامعة العبرية في القدس وجامعة حيفا ، عن وجود نقاط ضعف كبيرة في تطبيق الخوارزمية في نظام التشغيل Windows 2000. [ 7 ]
لاستغلال هذه الثغرة الأمنية، يحتاج المهاجم أولاً إلى اختراق البرنامج الذي يُشغّل مُولّد الأرقام العشوائية. وتعتمد جميع نقاط الضعف المذكورة في الورقة البحثية على قيام المهاجم بسرقة بتات الحالة من المُولّد. عادةً ما يكون المهاجم القادر على تنفيذ هذا الهجوم قادرًا على تعطيل أي مُولّد أرقام عشوائية (على سبيل المثال، يُمكنه ببساطة التجسس على مُخرجات المُولّد، أو تثبيتها في الذاكرة على قيم معروفة). مع ذلك، يُشير فريق الجامعة العبرية إلى أن المهاجم يحتاج فقط إلى سرقة بتات الحالة مرة واحدة لانتهاك أمان نسخة CryptGenRandom بشكل مُستمر. كما يُمكنه استخدام المعلومات التي يحصل عليها لتحديد الأرقام العشوائية السابقة التي تم توليدها، مما قد يُعرّض معلومات حساسة للخطر، مثل أرقام بطاقات الائتمان، التي تم إرسالها مُسبقًا.
تعتمد هجمات هذه الورقة البحثية على استخدام برنامج CryptGenRandom لخوارزمية التشفير المتدفقة RC4 ، والتي يمكن عكسها بمجرد معرفة حالتها. كما تستغل هذه الهجمات حقيقة أن CryptGenRandom يعمل في وضع المستخدم ، مما يسمح لأي شخص يحصل على صلاحيات الوصول إلى نظام التشغيل على مستوى المستخدم، على سبيل المثال من خلال استغلال ثغرة تجاوز سعة المخزن المؤقت ، بالحصول على معلومات حالة CryptGenRandom لتلك العملية. وأخيرًا، يقوم CryptGenRandom بتحديث بذرته من الإنتروبيا بشكل غير متكرر. وتتفاقم هذه المشكلة نظرًا لأن كل عملية Win32 تمتلك نسخة خاصة بها من حالة CryptGenRandom؛ فبينما يعني هذا أن اختراق عملية واحدة لا يؤدي بالضرورة إلى اختراق جميع العمليات الأخرى، إلا أنه قد يزيد من مدة أي اختراق ناجح.
نظراً لعدم توفر تفاصيل خوارزمية CryptGenRandom للعموم آنذاك، استخدم فريق دورندورف أدوات الهندسة العكسية لفهم آلية عمل الخوارزمية. وتُعدّ ورقتهم البحثية أول توثيق منشور لكيفية عمل مولد الأرقام العشوائية المشفرة في نظام ويندوز .
المعايير المشتركة
اجتازت أنظمة التشغيل Windows 2000 وXP و2003 بنجاح تقييمات EAL4+، بما في ذلك تطبيقي CryptGenRandom() وFIPSGenRandom(). تتوفر وثائق الهدف الأمني على بوابة المعايير المشتركة ، وتشير إلى الامتثال لمتطلبات EAL4. ونتيجةً لذلك، لا يمكن استخلاص الكثير من الاستنتاجات حول أمان الخوارزمية؛ إذ يقيس EAL4 المنتجات وفقًا لأفضل الممارسات والأهداف الأمنية المعلنة، ولكنه نادرًا ما يتضمن تحليلًا معمقًا للتشفير.
التحقق من صحة معيار FIPS
حصلت مايكروسوفت على مصادقة لتطبيقات مولد الأرقام العشوائية الخاصة بها في البيئات التالية:
- تنفيذ مولد الأرقام العشوائية لنظامي التشغيل Windows Vista و Server 2008 (الشهادة 435) [ 8 ]
- تطبيقات مولد الأرقام العشوائية لنظام التشغيل Windows Vista (الشهادة 321) [ 8 ]
- موفر التشفير المحسن لنظام التشغيل Windows 2003 (rsaenh.dll) (الشهادة 316) [ 8 ]
- موفر التشفير المحسن لنظام التشغيل Windows 2003 DSS و Diffie-Hellman (dssenh.dll) (الشهادة 314) [ 8 ]
- وحدة التشفير في وضع النواة لنظام التشغيل Windows 2003 (fips.sys) (الشهادة 313) [ 8 ]
- موفر التشفير المحسن لنظام التشغيل Windows CE و Windows Mobile (rsaenh.dll) (الشهادة 292) [ 8 ]
- موفر التشفير المحسن لنظام التشغيل Windows CE و Windows Mobile (rsaenh.dll) (الشهادة 286) [ 8 ]
- موفر التشفير المحسن لنظام التشغيل Windows CE (rsaenh.dll) (الشهادة 66) [ 8 ]
صُممت هذه الاختبارات لاختبار مدى توافق المنتج مع مختلف مواصفات مولد الأرقام العشوائية المعتمدة، وليس لقياس مستوى أمانه. [...] لذا، لا ينبغي تفسير عملية التحقق على أنها تقييم أو اعتماد لأمان المنتج بشكل عام. ونتيجةً لذلك، لا يمكن استخلاص استنتاجات كثيرة حول أمان الخوارزمية؛ إذ لا تفحص تقييمات معيار معالجة المعلومات الفيدرالي (FIPS) بالضرورة شفرة المصدر أو تقيّم طريقة توليد بذور مولد الأرقام العشوائية. [ 9 ]
تتضمن قائمة التحقق من صحة مولدات الأرقام العشوائية الإشعار التالي: "اعتبارًا من 1 يناير 2016، ووفقًا للإصدار SP800-131A المراجعة 1 بعنوان "الانتقالات: توصية بشأن الانتقال في استخدام خوارزميات التشفير وأطوال المفاتيح"، لم يعد استخدام مولدات الأرقام العشوائية المحددة في معيار FIPS 186-2، [X9.31]، وإصدار 1998 من [X9.62] معتمدًا. هذه القائمة مُقدمة لأغراض تاريخية فقط." [ 10 ]
البدائل
مستوى واجهة برمجة التطبيقات
يمتلك مطورو نظام التشغيل Windows عدة وسائل بديلة للوصول إلى وظيفة CryptGenRandom؛ تستخدم هذه البدائل نفس الخوارزمية وتشترك في نفس خصائص الأمان، ولكن قد يكون لها مزايا أخرى.
استخدام RtlGenRandom
إذا كان برنامجك يتطلب توافقًا مع الإصدارات السابقة حتى نظام التشغيل Windows XP، فيمكن استدعاء دالة واجهة برمجة تطبيقات Windows RtlGenRandom(الموجودة في advapi32.dll[ 3 ]BCryptGenRandom ) لإنشاء بيانات عشوائية آمنة، كما هو موضح أدناه. أما إذا لم يكن ذلك مشكلة، فينبغي للبرنامج استخدام الاستدعاء الأحدث.
لطالما نصحنا المطورين تاريخيًا بعدم استخدام دوال مثل rand لإنشاء المفاتيح والأرقام العشوائية وكلمات المرور، بل استخدام دوال مثل CryptGenRandom التي تُنشئ أرقامًا عشوائية آمنة تشفيرًا. تكمن مشكلة CryptGenRandom في الحاجة إلى استدعاء CryptoAPI (مثل CryptAcquireContext)، وهو أمر مقبول عند استخدام دوال تشفير أخرى.
في نظام التشغيل Windows XP والإصدارات الأحدث، تستدعي الدالة CryptGenRandom دالةً تُسمى ADVAPI32!RtlGenRandom، والتي لا تتطلب تحميل جميع مكونات CryptAPI. في الواقع، تستدعي دالة Whidbey CRT الجديدة، rand_s، الدالة RtlGenRandom. [ 11 ]
استخدام موفر خدمة التشفير RNGCryptoServiceProvider
ينبغي على المبرمجين الذين يستخدمون .NET استخدام فئة RNGCryptoServiceProvider. [ 12 ]
استخدام واجهة برمجة تطبيقات التشفير: الجيل التالي (CNG)
يُعدّ CNG [ 13 ] بديلاً طويل الأمد لواجهة برمجة تطبيقات التشفير القديمة. وهو يوفر وظيفة مكافئة BCryptGenRandom [ 14 ] بالإضافة إلى وظائف مخصصة لتوليد المفاتيح.
لغات البرمجة
rand_sتستخدم دالة مكتبة Microsoft CRtlGenRandomلتوليد أرقام عشوائية آمنة تشفيرياً. [ 11 ]- تستدعي دالة urandom في بايثون الموجودة في وحدة os ، والتي تستخدم /dev/urandom على أنظمة شبيهة بنظام Unix ، الدالة CryptGenRandom على أنظمة Windows. [ 15 ]
- يُوفر مُزوّد JCA المُتاح مع توزيعات OpenJDK وOracle لبيئة تشغيل جافا (JRE) على نظام ويندوز، تطبيقًا لخوارزمية SecureRandom باسم Windows-PRNG. تُعيد هذه الفئة توجيه جميع الاستعلامات الخاصة بالبايتات العشوائية أو بايتات البذور، بالإضافة إلى تعيين بايتات بذور إضافية، إلى CryptGenRandom
SunMSCAPI. [ 16 ]
انظر أيضاً
- استدعاءات النظام التي توفر الإنتروبيا - ما يعادل تقريبًا CryptGenRandom في OpenBSD ونواة Linux
- /dev/random – مصدر عشوائية في معظم نواة أنظمة التشغيل الشبيهة بنظام يونكس
- هجوم مولد الأرقام العشوائية
مراجع
- ↑ «تؤكد مايكروسوفت أن نظام التشغيل XP يحتوي على خلل في مولد الأرقام العشوائية» . مؤرشف من الأصل بتاريخ 22-06-2008.
- ↑ دالة CryptGenRandom (ويندوز) "هام: تم إيقاف استخدام واجهة برمجة التطبيقات هذه. يجب على البرامج الجديدة والحالية البدء في استخدام واجهات برمجة تطبيقات الجيل التالي للتشفير. قد تقوم مايكروسوفت بإزالة واجهة برمجة التطبيقات هذه في الإصدارات المستقبلية." (ينطبق هذا الإشعار على جميع واجهات برمجة تطبيقات التشفير.)
- 1 2 "دالة RtlGenRandom (ntsecapi.h)" . مايكروسوفت ليرن . مايكروسوفت. 22 فبراير 2024. تم الاسترجاع في 7 نوفمبر 2024 .
- ↑ هوارد، مايكل؛ لوبلان، ديفيد (2003). كتابة التعليمات البرمجية الآمنة، الطبعة الثانية . بيرسون للتعليم. ISBN 0-7356-1722-8.
- 1 2 3 4 5 6 7 8 فيرغسون، نيلز (أكتوبر 2019). "بنية توليد الأرقام العشوائية في ويندوز 10" (ملف PDF) . download.microsoft.com .
- 1 2 "معرفات خوارزمية CNG (Bcrypt.h) - تطبيقات Win32" . learn.microsoft.com . 13 أبريل 2023.
ملاحظة: بدءًا من Windows Vista مع SP1 وWindows Server 2008، يعتمد مولد الأرقام العشوائية على وضع عداد AES المحدد في معيار NIST SP 800-90. [...] Windows 10: بدءًا من Windows 10، تمت إزالة خوارزمية مولد الأرقام العشوائية ذات المنحنى الإهليلجي المزدوج. ستستمر الاستخدامات الحالية لهذه الخوارزمية في العمل؛ ومع ذلك، يعتمد مولد الأرقام العشوائية على وضع عداد AES المحدد في معيار NIST SP 800-90.
- ↑ دورندورف، ليو؛ تسفي غوترمان؛ بيني بينكاس. "تحليل تشفير مولد الأرقام العشوائية لنظام تشغيل ويندوز" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 18 مايو 2012. تم الاطلاع عليه بتاريخ 12 نوفمبر 2007 .
- 1 2 3 4 5 6 7 8 "قائمة التحقق من صحة مولد الأرقام العشوائية" . قسم أمن الحاسوب، المعهد الوطني للمعايير والتكنولوجيا . تم الاطلاع عليه بتاريخ 20 مارس 2024 .
- ↑ "نظام التحقق من صحة مولد الأرقام العشوائية (RNGVS)" (ملف PDF) . المعهد الوطني للمعايير والتكنولوجيا، قسم أمن الحاسوب. 31 يناير 2005. مؤرشف من الأصل (ملف PDF) في 24 فبراير 2013. تم الاطلاع عليه في 18 يونيو 2013 .
- ↑ "برنامج التحقق من صحة الخوارزمية التشفيرية: قائمة التحقق من صحة مولد الأرقام العشوائية" .
- 1 2 "rand_s" . مايكروسوفت ليرن . مايكروسوفت. 2 ديسمبر 2022. تم الاسترجاع في 7 نوفمبر 2024 .
- ↑ "نسخة مؤرشفة" . مؤرشفة من الأصل بتاريخ 2006-09-08 . تم الاطلاع عليها بتاريخ 2007-08-27 .
{{cite web}}: CS1 maint: archived copy as title ( link ) - ↑ الجيل التالي من واجهة برمجة تطبيقات العملات المشفرة (ويندوز)
- ↑ BCryptGenRandom (Windows)
- ↑ https://docs.python.org/2/library/os.html#os.urandom مرجع مكتبة بايثون، وحدة نظام التشغيل
- ↑ http://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html#SunMSCAPI الوثائق التقنية لـ Oracle Java SE 8، موفرو خدمات Sun
روابط خارجية
- الخوارزميات التشفيرية
- مولدات الأرقام شبه العشوائية
- مولدات أرقام شبه عشوائية آمنة تشفيرياً
- واجهات برمجة تطبيقات مايكروسوفت
- تقنية أمان مايكروسوفت ويندوز
