0Pricing
Cryptology Academy · درس

مولّدات PRNG الآمنة تشفيريًا

استكشف /dev/urandom وChaCha20-CSPRNG وFortuna

مولّدات PRNG الآمنة تشفيريًا درس مجاني في Cryptology Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cryptology Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cryptology Academy 4 دروس في المجموع.

مراجعة متطلبات CSPRNG

يجب أن يحقق CSPRNG ما يلي: (1) عدم إمكانية التنبؤ بالبت التالي؛ فعند معرفة جميع البتات السابقة، لا يمكن التنبؤ بالبت التالي باحتمال أكبر من 1/2 + مقدار ضئيل. (2) مقاومة تمديد اختراق الحالة؛ إذ لا يكشف الاطلاع على الحالة الحالية شيئاً عن المخرجات السابقة.

/dev/urandom و getrandom()

يستخدم Linux ‏/dev/urandom مولد أرقام شبه عشوائية آمنًا تشفيريًا (CSPRNG) مهيأً من مجمّع الإنتروبيا. بعد التهيئة الأولية ببذرة تحتوي على 128 بت من الإنتروبيا، يصبح استخدامه آمنًا حتى عندما يكون المجمّع "فارغًا"، إذ يحافظ مولد CSPRNG على حالته الداخلية الخاصة. ويُعد getrandom() النظير الحديث لاستدعاء النظام.

مولد CSPRNG القائم على ChaCha20

استبدل Linux kernel 5.17+ مولد CSPRNG بتصميم قائم على ChaCha20. يتميز ChaCha20 بالسرعة (ولا يحتاج إلى تسريع عتادي)، ويوفر أمانًا بمستوى 256 بت، وله برهان أمان مفهوم جيدًا. تكون قيمة nonce هي العداد، ويأتي المفتاح من مجمّع الإنتروبيا.

Fortuna

Fortuna (Ferguson & Schneier، 2003) هو تصميم لمولد CSPRNG يحافظ على 32 مجمّعًا للإنتروبيا ويجمع الإنتروبيا باستمرار. يعيد المولد تهيئة نفسه باستخدام المجمّعات عند امتلائها. وهو مقاوم لهجمات إعادة ضبط RNG وهجمات اختراق الحالة جزئيًا.

الباب الخلفي في DUAL_EC_DRBG

تضمّن NIST SP 800-90A في الأصل DUAL_EC_DRBG، المعتمد على المنحنيات الإهليلجية. وكشفت وثائق Snowden أن NSA أدخلت بابًا خلفيًا: فقد اختيرت نقاط EC بحيث تتمكن NSA من التنبؤ بالمخرجات انطلاقًا من أي seed. لا تستخدموا DUAL_EC_DRBG مطلقًا. أزالته NIST في عام 2014.

CTR_DRBG

يستخدم CTR_DRBG ‏(NIST SP 800-90A) خوارزمية AES في نمط العداد بوصفها مولد CSPRNG. تتكون البذرة من مفتاح بطول 256 بت وnonce بطول 128 بت. يؤدي كل استدعاء إلى تقديم العداد. وهو مطبق على نطاق واسع في OpenSSL وBoringSSL وWindows BCrypt. ويستفيد من التسريع العتادي على معالجات AES-NI.

HASH_DRBG و HMAC_DRBG

يستخدم HASH_DRBG دالة تجزئة (SHA-256) تكراريًا مع قيمة seed. أما HMAC_DRBG فيستخدم HMAC للمزج. ويُعد HMAC_DRBG أبسط من حيث التنفيذ الصحيح، ويُستخدم في العديد من الأنظمة المضمنة، مثل mbedTLS وWolfSSL.

إعادة التهيئة بالبذرة وحقن الإنتروبيا

حتى مولدات CSPRNG يجب أن تعيد التهيئة بالبذرة دوريًا. تبلغ فترة إعادة التهيئة في CTR_DRBG مقدار 2^48 طلبًا. ويعيد Fortuna التهيئة باستخدام مجمّعات الإنتروبيا الخاصة به. لإعادة التهيئة يدويًا، أضيفوا إنتروبيا جديدة (بايتات getrandom) إلى حالة مولد CSPRNG عند بدء التشغيل وبعد fork().

مشكلة fork

عند إجراء fork لعملية، ترث العملية الأب والعملية الابنة حالة CSPRNG نفسها، ولذلك ستنتجان مخرجات متطابقة. الحل هو استدعاء getrandom() لإعادة التهيئة بالبذرة مباشرة بعد fork(). ويتولى OpenSSL ذلك تلقائيًا عبر pthread_atfork() في الإصدارات الحديثة.

تطبيق CSPRNG عمليًا: Python

import secrets key = secrets.token_bytes(32) # مفتاح بطول 256 بت nonce = secrets.token_bytes(12) # nonce بطول 96 بت لـ AES-GCM pin = secrets.randbelow(10**6) # رمز PIN من 6 أرقام # لا تستخدموا الوحدة random مطلقًا في التشفير

تشفير المتصفح

‏window.crypto.getRandomValues(typedArray) هو مولد CSPRNG في المتصفح. ويستدعي مصدر الإنتروبيا في نظام التشغيل. ويستخدمه WebCrypto API لتوليد المفاتيح. لا تستخدموا Math.random() لأغراض الأمان مطلقًا، فهو مولد PRNG غير تشفيري مهيأ من وقت النظام.

اختبار سريع

ما وحدة Python التي ينبغي استخدامها لتوليد بايتات عشوائية تشفيرية؟

مراجعة

تولد مولدات CSPRNG، مثل ChaCha20 وCTR_DRBG وFortuna، مخرجات غير قابلة للتنبؤ انطلاقًا من بذور الإنتروبيا. تجنبوا DUAL_EC_DRBG وrandom.random() وMath.random(). استخدموا secrets في Python أو window.crypto في المتصفح. التالي: حالات فشل الإنتروبيا في العالم الحقيقي.

الأسئلة الشائعة

هل درس «مولّدات PRNG الآمنة تشفيريًا» مجاني؟

نعم — نص درس «مولّدات PRNG الآمنة تشفيريًا» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cryptology Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Cryptology Academy 4 دروس في المجموع.

ماذا ستتعلم في «مولّدات PRNG الآمنة تشفيريًا»؟

استكشف /dev/urandom وChaCha20-CSPRNG وFortuna تتمرن على Cryptology Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Cryptology Academy؟

لا تُشترط خبرة سابقة. Cryptology Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «مولّدات PRNG الآمنة تشفيريًا»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Cryptology Academy هذا؟

نعم. كل درس في Cryptology Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. العشوائية الحقيقية مقابل شبه العشوائية
  2. مولّدات PRNG الآمنة تشفيريًا
  3. استنزاف الإنتروبيا وأخطاء المفاتيح الضعيفة
  4. إنشاء المفاتيح وNonces وIVs بأمان
← العودة إلى Cryptology Academy