483 / 736PRNG

Deterministic RNG

مولّد حتمي للأعداد شبه العشوائية

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

⁦Deterministic RNG⁩ مولّد أعداد شبه عشوائية: يحسب القيم بطريقة محددة، بدلاً من قياس ظاهرة فيزيائية عشوائية جديدة لكل قيمة. يبدأ بمدخل يسمى ⁦seed⁩، ويحتفظ بحالة داخلية، أي المعلومات اللازمة للحساب التالي. تكرار العملية كاملة بالمدخلات نفسها يعيد النتائج نفسها، وهذا مفيد للاختبارات. لكن المولّد الآمن تشفيرياً يحتاج أيضاً إلى تصميم مناسب وإنتروبيا كافية، أي قدر من عدم اليقين بشأن المدخلات من منظور المهاجم.

تخيّل إيقاف حساب مؤقتاً وحفظ ذاكرته. إذا استُؤنف من النقطة نفسها مع المدخلات اللاحقة نفسها، فقد يتابع بالطريقة نفسها. تصف ⁦NIST SP 800-90A⁩ هذه المولّدات باسم ⁦DRBG⁩. وتهم الخوارزمية والإعدادات وترتيب الطلبات جميعاً. إضافة إنتروبيا جديدة، وتسمى ⁦reseeding⁩، تغيّر الحالة. لذلك لا يكفي تطابق ⁦seed⁩ وحده لضمان تطابق مخرجات برامج مختلفة. [1]

حتى برنامج محاكاة بسيط يستطيع إنتاج أعداد تبدو عشوائية، لكن هذا لا يكفي لحماية محفظة. تحذر ⁦RFC 4086⁩ من إمكان توقع بعض هذه التسلسلات رغم نجاحها في الاختبارات الإحصائية. ينبغي أن يبقى المولّد القوي تشفيرياً غير قابل للتوقع عملياً بعد انكشاف جزء من مخرجاته. المهم هو التصميم وجودة البيانات الأولية وسريتها، لا كلمة «حتمي» وحدها. [2]

عند البحث عن خطأ، يفيد تكرار الحالة نفسها بدقة. لذلك تعيد الدالة ⁦randombytes_buf_deterministic()⁩ في ⁦libsodium⁩ التسلسل نفسه عند استخدام ⁦seed⁩ نفسها. يستطيع المطوّر نشر النتيجة المتوقعة ليتحقق منها الآخرون. ولهذا السبب تحديداً لا تصلح ⁦seed⁩ اختبار منشورة لمحفظة حقيقية: يمكن لأي شخص أن يحسب منها «السر» نفسه. [3]

تستخدم ⁦BIP32⁩ قابلية تكرار مشابهة لاشتقاق المفاتيح، لكنها ليست العملية نفسها المستخدمة لتوليد بيانات عشوائية عامة. فهي تنشئ شجرة مفاتيح من ⁦seed⁩ واحدة، ويحدد مسار الاشتقاق الفرع المستخدم. لذلك تتيح ⁦seed⁩ والمسار نفسيهما استرجاع المفاتيح نفسها. لكن اشتقاق عنوان إضافي لا يضيف بذاته إنتروبيا جديدة ومستقلة إلى السر الأصلي. [4]

في ⁦BIP39⁩، كلمات الاستعادة، المسماة ⁦mnemonic⁩، ليست سوى جزء من المدخلات. تجمع ⁦PBKDF2⁩ بينها وبين ⁦passphrase⁩، وهي سر إضافي اختياري، لحساب ⁦seed⁩ المستخدمة في الاشتقاق اللاحق. تؤدي ⁦passphrase⁩ مختلفة إلى نتيجة مختلفة حتى لو بقيت الكلمات كما هي. لذا تتطلب استعادة المفاتيح نفسها جميع المدخلات الأصلية وطريقة الاشتقاق المناسبة؛ تطابق الكلمات وحده لا يكفي. [5]

يثبت التوقيع الرقمي أن صاحب المفتاح السري المعني أجاز المعاملة. تصف ⁦RFC 6979⁩ حساب القيمة المساعدة ⁦k⁩ اللازمة للتوقيع من ذلك المفتاح والرسالة الموقّعة. فلا تحتاج هذه الخطوة إلى قيمة عشوائية جديدة في كل مرة. لكن ذلك لا يلغي ضرورة العشوائية الجيدة عند إنشاء المفتاح أول مرة. إجراء توقيع صحيح لا يصلح مفتاحاً كان تخمينه ممكناً منذ البداية. [6]

استعادة المفاتيح نفسها عبر ⁦BIP32⁩ أمر مطلوب، أما تكرار قيم كان يفترض أن تكون جديدة عن غير قصد فليس كذلك. تحفظ لقطة الآلة الافتراضية حالة الحاسوب، بما فيها الذاكرة. وكما تحذر ⁦libsodium⁩، قد تعيد استعادتها حالة المولّد ومخرجاته أيضاً. لذلك لا يصح افتراض أن كل نسخة عاملة من بيئة منسوخة ستبدأ تلقائياً بإنشاء أسرار مستقلة. [3] [4]

يقارن المطوّر النتيجة بمتجه اختبار، أي مدخل معروف مع مخرج متوقع. يبين التطابق أن البرنامج يحسب ذلك المثال بصورة صحيحة، لكنه لا يثبت جودة الإنتروبيا التي يحصل عليها الجهاز الفعلي. تتناول ⁦NIST SP 800-90A⁩ الآليات ومتطلبات مدخلاتها بصورة منفصلة. وتهم أيضاً نسخة البرنامج وإعداداته وتجديد الإنتروبيا؛ فلا يكفي وصف ⁦Deterministic RNG⁩ وحده للحكم على أمان المحفظة. [1]

للحصول على صورة أوضح، اقرأ هذا المدخل مع CSPRNG, Random Number Generator, HD Wallet, Seed Generation. تشير إلى هذا المدخل أيضًا CSPRNG, COLDCARD RNG Incident (2026).

DOC · 001NIST SP 800-90A Rev. 1 — State, inputs and reseedingمواصفة DOC · 002RFC 4086 — Pseudorandom sequences and unpredictabilityمواصفة DOC · 003libsodium — Deterministic output and VM snapshotsتوثيق DOC · 004BIP32 — Hierarchical deterministic key derivationمواصفة DOC · 005BIP39 — Mnemonic and passphrase to seedمواصفة DOC · 006RFC 6979 — Deterministic signing and initial key generationمواصفة
تمت المراجعة: المصادر أولًا · ليست نصيحة استثمارية