سؤال

حسنًا، أعتقد أن هذا أمر شخصي تمامًا وما إلى ذلك، لكنني كنت أفكر في مصادر الإنتروبيا لمولدات الأرقام العشوائية.يذهب أن معظم المولدات مصنفة مع الوقت الحالي، أليس كذلك؟حسنًا، كنت أشعر بالفضول لمعرفة المصادر الأخرى التي يمكن استخدامها لإنشاء أرقام عشوائية صحيحة تمامًا (التعريف الفضفاض).

هل يؤدي استخدام مصادر متعددة (مثل الوقت + محرك الأقراص الصلبة الحالي للبحث عن الوقت [نحن خياليون هنا]) معًا إلى إنشاء رقم "عشوائي أكثر" من مصدر واحد؟ما هي الحدود المنطقية لكمية المصادر؟كم هو حقا ما يكفي؟هل تم اختيار الوقت لمجرد أنه مناسب؟

معذرة إذا كان هذا النوع من الأشياء غير مسموح به، ولكن لدي فضول لمعرفة النظرية وراء المصادر.

هل كانت مفيدة؟

المحلول

مقالة ويكيبيديا عن أجهزة مولد الأرقام العشوائية يسرد بضعة مصادر مثيرة للاهتمام للأرقام العشوائية باستخدام الخصائص الفيزيائية.

مفضلتي:

  • تم اكتشاف مصدر إشعاع الاضمحلال النووي بواسطة عداد جيجر متصل بجهاز كمبيوتر.
  • تنتقل الفوتونات عبر مرآة شبه شفافة.يتم الكشف عن الأحداث الحصرية المتبادلة (الانعكاس - الإرسال) وربطها بقيم البت "0" أو "1" على التوالي.
  • الضوضاء الحرارية الصادرة عن المقاوم، يتم تضخيمها لتوفير مصدر جهد عشوائي.
  • ضوضاء الانهيار الجليدي الناتجة عن الصمام الثنائي الانهيار. (كم ذلك رائع؟)
  • يتم اكتشاف الضوضاء الجوية بواسطة جهاز استقبال لاسلكي متصل بجهاز كمبيوتر

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

نصائح أخرى

وSGI الصور تستخدم مرة واحدة من مصباح الحمم على مختلف "مراحل غلوب" كمصدر الكون، والتي تطورت في نهاية المطاف إلى المصدر المفتوح رقم عشوائي مولد يسمى <لأ href = "http://www.lavarnd.org/index هتمل "يختلط =" noreferrer "> LavaRnd .

Random.ORG ، لأنها توفر بيانات عشوائية خالية من الضجيج الجوي، التي تستخدم ل إعادة البذور دوري Mersene-الإعصار RNG. إزاء عشوائي كما يمكنك الحصول عليها مع عدم الاعتماد على الأجهزة.

لا تقلق بشأن البذور "جيدة" لمولد رقم عشوائي. الخصائص الإحصائية للتسلسل لا تعتمد على كيفية المصنف المولد. هناك أشياء أخرى، ولكن. ما يدعو للقلق. انظر مطبات في العدد العشوائي الجيل .

وأما عن الأجهزة المولدات رقم عشوائي، لديهم هذه المصادر المادية للقياس، وعملية قياس ديه أخطاء منهجية. قد تجد "زائف" أرقام عشوائية لدينا نوعية أعلى من أرقام عشوائية "الحقيقية".

ونواة لينكس تستخدم المقاطعة توقيت جهاز (الماوس ولوحة المفاتيح، والأقراص الصلبة) لتوليد الكون. هناك المقالة على ويكيبيديا على الكون.

كلاهما فحص

وRNGs الحديثة ضد الارتباطات في بذور القريبة وتشغيل عدة مئات من التكرار بعد البذر. لذا، فإن الجواب مملة للأسف ولكن الحقيقية هي أنه حقا لا يهم كثيرا.

وبصفة عامة، وذلك باستخدام العمليات الفيزيائية عشوائية يجب أن يتم التحقق من مطابقتها لتوزيع موحد وdetrended خلاف ذلك.

في رأيي، فإنه غالبا ما يكون أفضل استخدام للغاية مفهومة جيدا شبه عشوائي عدد المولدات.

ولقد استعملت برنامج التشفير التي تستخدم حركة المستخدمين الماوس لتوليد أرقام عشوائية. وكانت المشكلة الوحيدة أن برنامج زيارتها إلى وقفة ويطلب من المستخدم لتحريك الماوس بشكل عشوائي لبضع ثوان للعمل بشكل صحيح والتي قد لا تكون دائما عملية.

ولقد وجدت HotBits قبل عدة سنوات - يتم إنشاء أرقام من التحلل الإشعاعي، حقا <م > عشوائي أرقام.

وهناك حدود على عدد الأرقام يمكنك تحميل يوميا، لكنه مستمتع لي دائما لاستخدام هذه كما في الواقع، والبذور عشوائية حقا لRNG.

وبعض TPM (حدة النظام الأساسي الموثوقة) "رقائق" لديهم RNG الأجهزة. وللأسف، فإن (من Broadcom) TPM في بلدي ديل كمبيوتر محمول يفتقر إلى هذه الميزة، ولكن العديد من أجهزة الكمبيوتر التي تباع اليوم تأتي مع RNG الأجهزة التي تستخدم عمليات ميكانيكية الكم لا يمكن التنبؤ بها حقا. إنتل نفذت متنوعة الضوضاء الحرارية.

وأيضا، لا تستخدم في الوقت الحالي وحده البذور وRNG لأغراض التشفير، أو أي تطبيق حيث عدم القدرة على التنبؤ هو المهم. باستخدام عدد قليل من انخفاض بت أمر من الوقت بالتزامن مع مصادر أخرى عديدة وربما بخير.

سؤال مماثل قد يكون مفيدا لك.

آسف لأنني تأخرت في هذه المناقشة (ما هو عمر 3 سنوات ونصف الآن؟)، ولكن لدي اهتمام متجدد بتوليد PRN والمصادر البديلة للإنتروبيا.أجرى مطور Linux kernel Rusty Russell مؤخرًا مناقشة حول موقعه مدونة على مصادر بديلة للإنتروبيا (بخلاف /dev/urandom).

لكنني لست معجبًا بخياراته.لا يتغير عنوان MAC الخاص ببطاقة NIC أبدًا (على الرغم من أنه فريد من نوعه عن جميع العناوين الأخرى)، ويبدو أن PID صغير جدًا كحجم عينة محتمل.

لقد انخرطت مع أ ميرسين الاعصار (في صندوق Linux الخاص بي) والمصنف بالخوارزمية التالية.أطلب أي تعليقات/تعليقات إذا كان أي شخص مستعدًا ومهتمًا:

  1. إنشاء مخزن مؤقت للصفيف مكون من 64 بت + 256 بت * عدد /proc الملفات أدناه.
  2. ضع قيمة عداد الطابع الزمني (TSC) في أول 64 بت من هذا المخزن المؤقت.
  3. لكل مما يلي /proc الملفات، وحساب مجموع SHA256:

    • /proc/meminfo
    • /proc/self/maps
    • /proc/self/smaps
    • /proc/interrupts
    • /proc/diskstats
    • /proc/self/stat

      ضع كل قيمة تجزئة 256 بت في منطقتها الخاصة من المصفوفة التي تم إنشاؤها في (1).

  4. قم بإنشاء تجزئة SHA256 لهذا المخزن المؤقت بأكمله. ملحوظة: يمكنني (وربما ينبغي لي) استخدام وظيفة تجزئة مختلفة بشكل مستقل تمامًا عن وظائف SHA - وقد تم اقتراح هذه التقنية باعتبارها "حماية" ضد وظائف التجزئة الضعيفة.

الآن لدي 256 بت من أملاً بيانات إنتروبيا عشوائية (كافية) لزرع Mersenne Twister.أستخدم ما ورد أعلاه لملء بداية مصفوفة MT (624 عددًا صحيحًا 32 بت)، ثم قم بتهيئة ما تبقى من تلك المصفوفة باستخدام كود مؤلف MT.وأنا أيضا استطاع استخدم وظيفة تجزئة مختلفة (على سبيل المثال.SHA384، SHA512)، لكنني سأحتاج إلى مخزن مؤقت لصفيف مختلف الحجم (من الواضح).

كان كود Mersenne Twister الأصلي يتطلب بذرة واحدة ذات 32 بت، لكنني أشعر أن هذا غير كافٍ على الإطلاق.تشغيل "مجرد" 2^32-1 من أنظمة MT المختلفة بحثًا عن كسر التشفير لا يعد خارج نطاق الإمكانية العملية في هذا اليوم وهذا العصر.

أحب أن أقرأ تعليقات أي شخص حول هذا الموضوع.النقد هو أكثر من موضع ترحيب.سأدافع عن استخدامي لـ /proc الملفات على النحو الوارد أعلاه لأنها تتغير باستمرار (خاصة /proc/self/* الملفات، وينتج TSC دائمًا قيمة مختلفة (دقة نانو ثانية [أو أفضل]، IIRC).لقد ركضت اختبارات قاسية على هذا (لتصل قيمتها إلى عدة مئات مليار بت)، ويبدو أنها تمر بألوان متطايرة.ولكن ربما يكون هذا دليلاً على سلامة Mersenne Twister باعتباره PRNG أكثر من كونه دليلاً على كيفية زرعه.

بالطبع، هذه ليست كذلك تماما منيع ضد أي شخص يقوم باختراقها، لكنني لا أرى أن كل هذه الأشياء (وSHA*) يتم اختراقها و مكسورة في حياتي

واستخدام بعض مدخلات لوحة المفاتيح (مهلة بين ضربات المفاتيح)، وسمعت من اعتقد في رواية أن الإذاعة استقبال ثابت يمكن استخدام - ولكن بالطبع هذا يتطلب الأجهزة والبرامج الأخرى ...

والضوضاء على رأس الطيف الخلفية الكونية الميكروويف. بالطبع يجب عليك أولا إزالة بعض تباين الكائنات الأمامية، المترابطة ضجيج كاشف، المجرة والسرعات مجموعة محلية، الاستقطابات الخ كثير من <لأ href = "http://arxiv.org/abs/astro-ph/0703806" يختلط = " نوفولو noreferrer "> المزالق تبقى .

مصدر البذور ليس بهذه الأهمية.الأهم من ذلك هو خوارزمية مولد الأرقام الزائفة.ومع ذلك فقد سمعت منذ بعض الوقت عن توليد البذور لبعض العمليات المصرفية.لقد أخذوا العديد من العوامل معًا:

  • وقت
  • درجة حرارة المعالج
  • سرعة المروحة
  • جهد وحدة المعالجة المركزية
  • لا أتذكر المزيد :)

حتى لو لم تتغير بعض هذه المعلمات كثيرًا مع مرور الوقت، يمكنك وضعها في وظيفة تجزئة جيدة.

كيفية توليد رقم عشوائي جيد؟

ربما يمكننا أن نأخذ في الاعتبار عدد لا حصر له من الأكوان؟إذا كان هذا صحيحًا، فإنه يتم إنشاء أكوان موازية جديدة طوال الوقت، فيمكننا أن نفعل شيئًا كهذا:

int Random() {
    return Universe.object_id % MAX_INT;
}

في كل لحظة يجب أن نكون في فرع آخر من الأكوان المتوازية، لذلك يجب أن يكون لدينا هوية مختلفة.المشكلة الوحيدة هي كيفية الحصول على كائن الكون :)

وماذا عن الغزل قبالة موضوع من شأنها أن تعالج بعض متغير في حلقة ضيقة لفترة محددة من الزمن قبل أن يتم قتله. ما ينتهي بك الأمر مع سيعتمد على سرعة المعالج، وتحميل النظام، الخ ... باقة جدا، ولكن أفضل من مجرد srand (الوقت (NULL)) ...

<اقتباس فقرة>   

لا تقلق بشأن البذور "جيدة" لمولد رقم عشوائي. الخصائص الإحصائية للتسلسل لا تعتمد على كيفية المصنف المولد.

وأنا لا أتفق مع جون D. كوك المشورة . إذا كنت البذور في ميرسين الإعصار مع كل بت تعيين إلى صفر ما عدا واحدة، فإنه سيتم إنشاء في البداية الأرقام التي هي أي شيء ولكن بشكل عشوائي. فإنه يأخذ وقتا طويلا للمولد على إنتاج هذه الدولة في كل ما من شأنه تمرير الاختبارات الإحصائية. ببساطة وضع أول 32 بت من المولد إلى بذرة سوف يكون له تأثير مماثل. أيضا، إذا تم تعيين الدولة بأكملها إلى الصفر المولد سينتج الاصفار التي لا نهاية لها.

وكود RNG مكتوبة بشكل صحيح سوف يكون لها خوارزمية البذر مكتوبة بشكل صحيح أن يقبل القول قيمة 64 بت والبذور المولد لذلك سوف تنتج أرقام عشوائية لائقة لكل إدخال ممكن. حتى إذا كنت تستخدم مكتبة موثوقة ثم فإن أي البذور القيام به. ولكن إذا كنت الإختراق معا تنفيذ الخاص بك ثم عليك أن تكون حذرا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top