481 / 691RNG

Random Number Generator

مولّد الأعداد العشوائية

يمثل ⁦RNG⁩ جزءاً من المسار من عدم اليقين إلى قيم قابلة للاستخدام. تتطلب المفاتيح السرية عدم قابلية التنبؤ والتهيئة والتعامل مع الأعطال، لا مجرد مخرجات تبدو عشوائية.

يوفر ⁦Random Number Generator⁩ قيماً لغرض محدد. يتطلب الاستخدام التشفيري ألا يستطيع الخصم التنبؤ بها عملياً ضمن الافتراضات المعلنة. مصدر الإنتروبيا الفيزيائي والمولّد الحتمي وواجهة نظام التشغيل طبقات مختلفة؛ ولا يحدد اسم ⁦RNG⁩ وحده خصائصها.

يوفر مصدر الإنتروبيا عدم اليقين، وتُعدّ المعالجة التكييفية المدخلات، وينتج المولّد الحتمي المخرجات من حالته الداخلية. يجمع ⁦NIST SP 800-90C⁩ آليات ⁦90A⁩ مع مصادر وفق ⁦90B⁩. لذلك لا يقابل كل بت مُعاد بالضرورة قياساً فيزيائياً جديداً. [NIST SP 800-90C — RBG constructions]

قد تجتاز سلسلة اختبارات إحصائية رغم أن المهاجم يعرفها. يحذر ⁦RFC 4086⁩ من الساعات والأرقام التسلسلية والقيم الابتدائية القابلة للتنبؤ. لذلك لا يكفي اسم مولّد المحاكاة أو توزيع نتائجه لاعتباره مناسباً للتشفير. [RFC 4086 — Unpredictability and weak inputs]

يقيّم ⁦NIST SP 800-90B⁩ مصدر الضوضاء والمعالجة التكييفية واختبارات السلامة عند البدء وأثناء التشغيل. تكشف هذه الاختبارات أعطال المصدر، ولا تثبت أمان المحفظة بكاملها. معالجة الأعطال جزء من التصميم؛ فلا يجوز عرض مخرجات مسار معطّل بصمت على أنها عشوائية تم التحقق منها. [NIST SP 800-90B — Source health and failure handling]

ينتظر ⁦Linux getrandom()⁩ عادة تهيئة مصدر ⁦urandom⁩. مع ⁦GRND_NONBLOCK⁩ قد يعيد ⁦EAGAIN⁩ بدلاً من الانتظار. بعد التهيئة، تضمن طلبات ⁦urandom⁩ التي لا تتجاوز ⁦256⁩ بايت قراءة كاملة دون مقاطعة بإشارة؛ ولا يشمل الضمان الطلبات الأكبر. على التطبيق مراعاة حالة الإرجاع. [Linux getrandom(2) — Initialization and return behavior]

يملأ ⁦Web Crypto getRandomValues()⁩ مصفوفات الأعداد الصحيحة المدعومة بقيم قوية تشفيرياً؛ وإذا تجاوز الحجم ⁦65536⁩ بايت يُطلق ⁦QuotaExceededError⁩. توصي المواصفة باستخدام ⁦generateKey()⁩ لإنشاء المفاتيح. وجود الواجهة لا يثبت موثوقية الصفحة ولا يحمي الأسرار من الشيفرة التي تستطيع الوصول إليها. [W3C Web Crypto — getRandomValues and key generation]

يرمّز ⁦BIP39⁩ أولاً من ⁦128⁩ إلى ⁦256⁩ بت من الإنتروبيا الابتدائية مع مجموع تحقق مشتق. ثم يشتق عبر ⁦PBKDF2⁩ بذرة بطول ⁦512⁩ بت من الكلمات وعبارة ⁦passphrase⁩ اختيارية. لا يصلح مجموع التحقق ولا المخرج الأطول مدخلاً قابلاً للتنبؤ؛ واختيار الكلمات يدوياً لا يحل محل التوليد العشوائي. [BIP39 — Initial entropy and mnemonic-to-seed derivation]

يحتاج المولّد الحتمي إلى حماية حالته وتهيئته الصحيحة. يميز ⁦NIST SP 800-90A⁩ بين إنشاء المثيل والتوليد وإعادة البذر وإنهاء المثيل. تتطلب استعادة الأمان بعد كشف الحالة آلية مناسبة وإنتروبيا جديدة لا يعرفها المهاجم؛ ومجرد استدعاء المولّد مجدداً ليس ضماناً عاماً للتعافي. [NIST SP 800-90A Rev. 1 — DRBG lifecycle and reseeding]

ينبغي أن تحدد المراجعة المصدر والخوارزمية والتهيئة والواجهة والسلوك عند الخطأ في النسخة المُقيّمة. وصف عتادي أو غير متصل لا يثبت هذه السلسلة بذاته. تشرح المعايير المذكورة متطلبات التوليد؛ ولا تصدّق على محفظة بعينها أو تمنع تسرب نسختها الاحتياطية لاحقاً. [NIST SP 800-90C — RBG constructions] [RFC 4086 — Unpredictability and weak inputs]

للحصول على صورة أوضح، اقرأ هذا المدخل مع Cryptographic Entropy, CSPRNG, Seed Generation, Brute Force Search Space. تشير إلى هذا المدخل أيضًا CSPRNG, Deterministic RNG, True Random Number Generator, Seed Generation.

DOC · 001NIST SP 800-90C — RBG constructionsمواصفة ↗DOC · 002RFC 4086 — Unpredictability and weak inputsمواصفة ↗DOC · 003NIST SP 800-90B — Source health and failure handlingمواصفة ↗DOC · 004Linux getrandom(2) — Initialization and return behaviorتوثيق ↗DOC · 005W3C Web Crypto — getRandomValues and key generationمواصفة ↗DOC · 006BIP39 — Initial entropy and mnemonic-to-seed derivationمواصفة ↗DOC · 007NIST SP 800-90A Rev. 1 — DRBG lifecycle and reseedingمواصفة ↗
المصادر أولًا · ليست نصيحة استثمارية