482 / 691CSPRNG

CSPRNG

مولّد أعداد شبه عشوائية آمن تشفيرياً

ينتج ⁦CSPRNG⁩ قيماً من حالة سرية كي لا تتيح القيم المعروفة التنبؤ عملياً بغيرها. يعتمد الأمان أيضاً على الإنتروبيا الأولية واستعادة الحالة والاستخدام الصحيح للواجهة.

⁦CSPRNG⁩ مولّد حتمي للاستخدام التشفيري. شبه العشوائية لا تعني الضعف؛ المهم مقاومة الخصم ضمن الافتراضات المعلنة. يجب تقييم الخوارزمية ومصدر الإنتروبيا والشيفرة المستهلكة للمخرجات كلٌّ على حدة.

يميز ⁦RFC 4086⁩ التسلسلات القوية تشفيرياً عن مولّدات المحاكاة المعتادة. يجب ألا تسمح معرفة جزء من المخرجات بتخمين الباقي. الاختبارات الإحصائية وحدها لا تثبت ذلك؛ وقد تُضعف بذرة متوقعة حتى المخرجات المعقدة ظاهرياً. [RFC 4086 — Cryptographically strong sequences]

تحدد ⁦NIST SP 800-90A Rev. 1⁩ آليات ⁦Hash_DRBG⁩ و⁦HMAC_DRBG⁩ و⁦CTR_DRBG⁩. لا يصادق وصف ⁦CSPRNG⁩ على كل تنفيذ. يجب تحديد الآلية ومعاملاتها وطريقة الحصول على الإنتروبيا، لا اسم دالة التجزئة وحده. [NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistance]

تحمي ⁦Backtracking resistance⁩ المخرجات السابقة بعد كشف الحالة الحالية. تخص ⁦Prediction resistance⁩ المخرجات المستقبلية؛ وتربطها ⁦NIST SP 800-90A⁩ بإدخال إنتروبيا جديدة بفعالية. لا تقتضي إحداهما الأخرى تلقائياً، ولا التعافي بمجرد استدعاء آخر. [NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistance]

توثق ⁦OpenSSL 3.5⁩ أن ⁦RAND_bytes()⁩ و⁦RAND_priv_bytes()⁩ تعيدان ⁦1⁩ للنجاح و⁦0⁩ للفشل الآخر و⁦-1⁩ للطريقة غير المدعومة. قد يُرفض التوليد عند فشل مصدر الإنتروبيا. يجب على التطبيق فحص النتيجة لا استخدام مخزن مؤقت غير متحقق منه. [OpenSSL 3.5 — RAND_bytes return values and errors]

تنتج ⁦libsodium randombytes_buf_deterministic()⁩ التسلسل نفسه للبذرة نفسها، وهو مفيد للاختبارات. قد تكرر استعادة لقطة آلة افتراضية الحالة والمخرجات. قابلية تكرار الاختبارات لا تضمن أسراراً مستقلة بين النسخ. [libsodium — Random data and deterministic testing]

تختار ⁦libsodium randombytes_uniform()⁩ بتوزيع منتظم تحت حد أعلى، دون انحياز باقي القسمة البسيط. لا تضمن جودة بايتات الإدخال وحدها التحويل الصحيح إلى المجال المستهدف. ويجب أن تراعي المفاتيح قواعد خوارزميتها أيضاً. [libsodium — Random data and deterministic testing]

تتطلب ⁦RFC 8439⁩ عدم تكرار ⁦nonce⁩ مع المفتاح نفسه؛ ولا يثبت المظهر العشوائي وحده التفرد. أما ⁦RFC 6979⁩ فتصف إنشاء قيمة التوقيع k حتمياً. لذا لا يشكل ⁦CSPRNG⁩ بديلاً عاماً لقواعد البروتوكول. [RFC 8439 — Nonce uniqueness] [RFC 6979 — Deterministic signing]

سجل نسخة المكتبة والآلية والتهيئة والأخطاء والسلوك بعد استعادة الحالة أو استنساخها. تصف وثائق ⁦OpenSSL⁩ و⁦libsodium⁩ دوالهما المحددة، لا أمان أي محفظة. كما لا يمنع التوليد الجيد تسرب النسخة الاحتياطية لاحقاً. [OpenSSL 3.5 — RAND_bytes return values and errors] [libsodium — Random data and deterministic testing]

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

DOC · 001RFC 4086 — Cryptographically strong sequencesمواصفة ↗DOC · 002NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistanceمواصفة ↗DOC · 003OpenSSL 3.5 — RAND_bytes return values and errorsتوثيق ↗DOC · 004libsodium — Random data and deterministic testingتوثيق ↗DOC · 005RFC 8439 — Nonce uniquenessمواصفة ↗DOC · 006RFC 6979 — Deterministic signingمواصفة ↗
المصادر أولًا · ليست نصيحة استثمارية