سؤال كيف تختلف الأرقام العشوائية العشوائية الحقيقية ولماذا يهم؟


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

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

لقد حاولت ذلك الثعبان: هنا نتيجة 60 مليون لفة. أعلى الاختلاف هو مثل 0.15. أليس هذا عشوائي كما سيحصل؟

1 - 9997653 2347.0
2 - 9997789 2211.0
3 - 9996853 3147.0
4 - 10006533 -6533.0
5 - 10002774 -2774.0
6 - 9998398 1602.0

653


الأصل


ألق نظرة على مقالة ويكيبيديا الأجهزة التي تم إنشاؤها أرقام عشوائية انظر أيضا هذا - stats.stackexchange.com/questions/32794/... - steadyfish
ماذا تقصد ب "لفات بعض النرد"؟ هل لديها ذراع آلية وكاميرا مرفقة؟ - starblue
بينما أتفق مع النظرية العامة لهجتك ، أننا كثيرا ما نشعر بالقلق من هذا ، ولكن تم استغلالها في الحياة الحقيقية: en.wikipedia.org/wiki/Ronald_Dale_Harris - Grady Player
نرى هذه مقالة حول لعبة البوكر على الانترنت تفتقد العشوائية الحقيقية لماذا يهم. - Varaquilex
إذا كنت فقط تحتفظ بطاولة من 0-5 ولعبة الزهر ، 666 غورليون مرة ، ستحصل على توزيع متساوي كذلك. - jcora


الأجوبة:


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

أحصل على خمسة أوراق في يدي - يبدو أننا لا نلعب لعبة Texas Hold 'Em. لنفترض أن البطاقات يتم توزيعها عليّ ، واحدة لك ، واحدة لي ، واحدة لك ، وهكذا. لذلك لدي بطاقات الأول والثالث والخامس والسابع والتاسع في سطح السفينة.

في وقت سابق قمت بتشغيل مولد الأرقام الزائفة العشوائية أربعة مليارات مرة ، مرة واحدة مع كل بذرة ، وكتبت أول بطاقة تم إنشاؤها لكل منها في قاعدة بيانات. لنفترض أن أول بطاقتي هي ملكة البستوني. وهذا يظهر فقط كواحد من البطاقات الأولى في واحد من كل 52 من هذه الأسطح المحتملة ، لذا قمنا بخفض الأسطح المحتملة من أربعة مليارات إلى حوالي 80 مليون أو نحو ذلك.

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

افترض أن البطاقة الثالثة في يدي هي 7 من الأندية. لدي قاعدة بيانات تحتوي على 2 مليون بذرة تتعامل مع بطاقتي ؛ أجري RNG مرة أخرى 2 مليون مرة للعثور على 2 ٪ من تلك الطوابق التي تنتج 7 من النوادي كالورقة الثالثة ، ونحن نصل إلى 40 ألف طوابق فقط.

ترى كيف يذهب هذا. أدير RNG 40000 مرات أكثر للعثور على جميع البذور التي تنتج بطاقتي الرابعة ، والتي تصل بنا إلى 800 طابق ، ثم تشغيلها 800 مرة أخرى للحصول على البذور 20 ~ التي تنتج بطاقتي الخامسة ، والآن أنا فقط قم بتوليد تلك العشرين ورقة من البطاقات وأعرف أن لديك واحدة من عشرين يد ممكنة. علاوة على ذلك ، لدي فكرة جيدة عما سأستعرضه بعد ذلك.

الآن هل ترى لماذا العشوائية الحقيقية مهمة؟ الطريقة التي تصفها ، تعتقد ذلك توزيع مهم ، لكن التوزيع ليس هو الذي يجعل العملية عشوائية. عدم القدرة على التنبؤ هو ما يجعل عملية عشوائية.

تحديث

استنادًا إلى التعليقات (التي تم حذفها الآن بسبب طبيعتها غير البنائية) ، فإن 0.3٪ على الأقل من الأشخاص الذين قرأوا هذا قد اختلطوا على وجهة نظري. عندما يجادل الناس ضد النقاط التي لم أجربها ، أو ما هو أسوأ ، يجادلون إلى عن على يشير ذلك أنا فعل جعل على افتراض أنني لم أقم بها ، ثم أعلم أنني بحاجة إلى شرح أكثر وضوحا وبعناية.

يبدو أن هناك ارتباكًا خاصًا حول الكلمة توزيع لذلك أريد أن أذكر الأعراف بعناية.

الأسئلة المطروحة هي:

  • كيف تختلف أرقام pseudorandom والأرقام العشوائية حقا؟
  • لماذا الفرق مهم؟
  • هل الاختلافات لها علاقة بتوزيع ناتج PRNG؟

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

لنبدأ بفرض أننا نمتلك صندوقًا سحريًا TRNG. ونظرًا لإدخاله ، فإننا نعطيه عددًا صحيحًا أكبر من أو يساوي واحدًا ، وباعتباره ناتجًا ، فإنه يعطينا رقمًا عشوائيًا حقًا بين واحد و n ، شاملاً. خرج المربع لا يمكن التنبؤ بها تماما (عند إعطاء رقم غير واحد) وأي رقم بين واحد و n هو احتمال آخر. وهذا يعني أن توزيع هو زى موحد. (هناك فحوصات إحصائية متقدمة أخرى للعشوائية التي يمكن أن نقوم بها ؛ أنا أتجاهل هذه النقطة لأنها ليست وثيقة إلى حجتي. إن TRNG عشوائية تمامًا من الناحية الإحصائية بالافتراض).

نبدأ مع سطح غير مغطى من البطاقات. نسأل الصندوق عن رقم بين واحد و 52 - وهذا يعني ، TRNG(52). أيا كان الرقم الذي يعطيه ، فإننا نحسب أن العديد من البطاقات من سطح السفينة لدينا فرز وإزالة تلك البطاقة. يصبح البطاقة الأولى في سطح السفينة تعديلا. ثم نطلب TRNG(51) وتفعل الشيء نفسه لتحديد البطاقة الثانية ، وهكذا.

طريقة أخرى للنظر في الأمر: هناك 52! = 52 × 51 × 50 ... × 2 × 1 طواقم محتملة ، وهو ما يقرب من 2226. لقد اخترنا واحدًا منهم بشكل عشوائي.

الآن نتعامل مع البطاقات. عندما ألقي نظرة على بطاقاتي لا فكرة على الإطلاق ما البطاقات لديك. (وبصرف النظر عن حقيقة واضحة أنه ليس لديك أي من البطاقات لدي). يمكن أن تكون أي بطاقات ، مع احتمال متساو.

لذا اسمحوا لي أن أتأكد من شرح ذلك بوضوح. نحن لدينا توزيع منتظم لكل خرج فردي من TRNG(n). كل واحد يختار عددا بين 1 و n مع احتمال 1 / ن. أيضا ، نتيجة هذه العملية هو أننا اخترنا واحدة من 52! الطوابق المحتملة مع احتمال 1/52! ، وبالتالي فإن التوزيع على مجموعة من الطوابق المحتملة هو أيضا زى موحد.

حسنا.

لنفترض الآن أن لدينا صندوقًا أقل سحرًا ، مصنّفًا PRNG. قبل أن تتمكن من استخدامه ، يجب أن يكون المصنف برقم 32 بت غير موقعة.

وبصرف النظر: لماذا 32؟ لا يمكن أن يكون المصنف برقم 64 أو 256 أو 10000 بت؟ بالتأكيد. ولكن (1) من الناحية العملية يتم تصنيف معظم PRNG الجاهزة مع عدد 32 بت ، و (2) إذا كان لديك 10000 بت من العشوائية لجعل البذور فلماذا تستخدم PRNG على الإطلاق؟ لديك بالفعل مصدر 10000 بت من العشوائية!

على أي حال ، عد إلى كيفية عمل PRNG: بعد أن يتم وضع البذور ، يمكنك استخدامه بالطريقة نفسها التي تستخدمها TRNG. بمعنى ، يمكنك تمريره رقم n ويعطيك رقمًا بين 1 و n شاملًا. علاوة على ذلك، توزيع هذا الناتج هو أكثر أو أقل توحيدًا. هذا هو ، عندما نسأل PRNG بالنسبة إلى رقم يتراوح بين 1 و 6 ، نحصل على 1 أو 2 أو 3 أو 4 أو 5 أو 6 كل ستة ستمائة مرة تقريبًا ، بغض النظر عن البذور.

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

ويقال أن هذه العملية شبه عشوائي لأن سلوك الصندوق محدد تمامًا ؛ انها تختار من واحد من 232 السلوكيات المحتملة على أساس البذور. أي ، بمجرد أن يتم المصنف ، PRNG(6), PRNG(6), PRNG(6), ...  ينتج تسلسل من الأرقام مع توزيع موحد ، ولكن هذا التسلسل هو تماما يحددها البذور. لتسلسل معين من المكالمات ، على سبيل المثال ، PRNG (52) ، PRNG (51) ... وهكذا ، هناك فقط 232 تسلسل ممكن. البذور يختار أساسا أي واحد نحصل عليه.

لإنشاء سطح ، ينشئ الخادم الآن بذرة. (كيف؟ سنعود إلى هذه النقطة.) ثم يتصلون PRNG(52)، PRNG(51) وهلم جرا لتوليد سطح السفينة ، على غرار من قبل.

هذا النظام عرضة للهجوم الذي وصفته. للهجوم على الخادم ، سنسبق أولاً بزوغ نسخة من المربع مع 0 ونطلب PRNG(52) واكتب ذلك. ثم نعيد البذور مع 1 ، أطلب PRNG(52)، واكتب ذلك ، على طول الطريق حتى 232-1.

الآن ، يجب على خادم البوكر الذي يستخدم PRNG لتوليد طوابق إنشاء بذرة بطريقة ما. لا يهم كيف يفعلون ذلك. يمكنهم الاتصال TRNG(2^32) للحصول على بذور عشوائية حقا. أو يمكن أن يأخذوا الوقت الحالي كبذرة ، وهي ليست عشوائية على الإطلاق ؛ أنا أعرف ما هو الوقت بقدر ما تفعل. الهدف من هجومي هو أنه لا يهم ، لأن لدي قاعدة البيانات الخاصة بي. عندما أرى بطاقتي الأولى يمكنني إزالة 98٪ من البذور الممكنة. عندما أرى بطاقتي الثانية يمكنني التخلص من 98٪ أكثر ، وهكذا ، حتى أتمكن في النهاية من الوصول إلى حفنة من البذور الممكنة ، وأعرف بشكل كبير ما هو في يدك.

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

طريقة أخرى للنظر إلى المشكلة هي أنه على الرغم من توزيع مليون مكالمة إلى PRNG(6) قد يكون بخير بسبب اختيار PRNG من 2 فقط32 السلوكيات الممكنة ، لا يمكن أن تولد كل سطح ممكن.  يمكن أن تولد فقط 232 من 2226 الطوابق المحتملة. جزء صغير. لذلك التوزيع على مجموعة جميع الطوابق سيء للغاية ولكن مرة أخرى ، يستند الهجوم الأساسي هنا على قدرتنا على النجاح تنبؤ سلوك الماضي والمستقبل PRNG من عينة صغيرة من انتاجها.

اسمحوا لي أن أقول هذا للمرة الثالثة أو الرابعة للتأكد من هذا بالوعات. هناك ثلاث توزيعات هنا. أولا ، توزيع العملية التي تنتج البذور 32 بت عشوائية. التي يمكن أن تكون عشوائية تماما ، لا يمكن التنبؤ بها وموحدة و سوف الهجوم لا يزال يعمل. ثانيا ، توزيع مليون مكالمة إلى PRNG(6). يمكن أن يكون ذلك متجانسًا تمامًا وسيظل الهجوم يعمل. ثالثا ، توزيع الطوابق التي اختارتها العملية العشوائية الزائفة التي وصفتها. هذا التوزيع ضعيف للغاية. يمكن اختيار جزء صغير فقط من أسطح IRL المحتملة. الهجوم يعتمد على القدرة على التنبؤ من سلوك PRNG على أساس المعرفة الجزئية من انتاجها.

ASIDE: يتطلب هذا الهجوم أن المهاجم يعرف أو يكون قادراً على تخمين ما هي الخوارزمية الدقيقة المستخدمة من قبل PRNG. سواء كان ذلك واقعيا أم لا هو سؤال مفتوح. ومع ذلك، عند تصميم نظام أمني ، يجب تصميمه ليكون آمنًا ضد الهجمات حتى إذا كان المهاجم يعرف جميع الخوارزميات في البرنامج. بعبارة أخرى: الجزء من نظام الأمان الذي يجب أن يبقى سرًا حتى يكون النظام آمنًا يسمى "المفتاح". إذا كان نظامك يعتمد على أمانه على الخوارزميات التي تستخدمها كونها سرًا المفتاح الخاص بك يحتوي على تلك الخوارزميات. هذا هو جدا موقف ضعيف ليكون في!

المضي قدما.

لنفترض الآن أن لدينا صندوقًا سحريًا ثالثًا CPRNG. إنها نسخة قوية من التشفير PRNG. يستغرق بذر 256 بت بدلاً من بذور 32 بت. انها تشارك مع PRNG الخاصية التي تختارها البذور من واحد من 2256 السلوكيات الممكنة. ومثل الآلات الأخرى الخاصة بنا ، فقد الخاصية أن عدداً كبيراً من المكالمات إلى CPRNG(n) إنتاج توزيع موحد للنتائج بين 1 و n: يحدث كل 1 / n من الوقت. يمكننا تشغيل هجومنا ضدها؟

هجومنا الأصلي يتطلب منا تخزين 232 تعيينات من البذور ل PRNG(52). لكن 2256 هو رقم أكبر بكثير من غير المجدي تماما للتشغيل CPRNG(52)هذا الكثير من الوقت وتخزين النتائج.

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

لا. التفاصيل معقدة للغاية لشرحها ، ولكن تم تصميمها بذكاء CPRNs بحيث يكون من غير المجدي لاستخلاص أي حقيقة مفيدة حول البذور من الناتج الأول من CPRNG(52) او من أي مجموعة فرعية من الإخراج ، مهما كانت كبيرة.

حسنًا ، لنفترض الآن أن الخادم يستخدم CPRNG لتوليد الطوابق. يحتاج إلى بذور 256 بت. كيف تختار تلك البذور؟ إذا اختار أي قيمة يمكن للمهاجم التنبؤ بها ثم فجأة يصبح الهجوم قابلا للحياة مرة أخرى. إذا استطعنا تحديد ذلك من 2256 ممكن البذور ، من المرجح أن يتم اختيار أربعة مليارات منهم فقط من قبل الخادم ، ثم لقد عدنا للعمل. يمكننا تحميل هذا الهجوم مرة أخرى ، مع إيلاء الاهتمام فقط لعدد قليل من البذور التي يمكن أن تتولد.

لذا يجب على الخادم أن يعمل للتأكد من أن رقم 256 بت هو موزعة بشكل متجانس - وهذا هو ، يتم اختيار كل البذور الممكنة مع احتمال 1/2256. في الأساس يجب أن يتصل الخادم TRNG(2^256)-1 لتوليد البذور ل CPRNG.

ماذا لو تمكنت من اختراق الخادم والنظر فيه لمعرفة ما هي البذور التي تم اختيارها؟ في هذه الحالة ، يعرف المهاجم الماضي الكامل والمستقبل CPRNG. يحتاج مؤلف الخادم إلى الحماية من هذا الهجوم! (بالطبع إذا تمكنت من شن هذا الهجوم بنجاح ، ربما يمكنني أيضاً تحويل الأموال إلى حسابي البنكي مباشرة ، لذا ربما لا يكون ذلك مثيراً للاهتمام. النقطة هي: يجب أن تكون البذرة سرية يصعب تخمينها ، حقا رقم عشوائي 256 بت هو رتق جميلة من الصعب تخمين.)

العودة إلى نقطتي السابقة حول الدفاع في العمق: بذور 256 بت هي مفتاح لهذا النظام الأمني. فكرة CPRNG هي أن النظام آمن طالما أن المفتاح آمن. حتى إذا كانت كل الحقائق الأخرى عن الخوارزمية معروفة ، طالما يمكنك الحفاظ على سر المفتاح ، لا يمكن التنبؤ ببطاقات الخصم.

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

قد تقول: هناك 2256 ممكن تسلسل الإخراج من قبل CPRNG ، ولكن لا يوجد سوى 2226 الطوابق المحتملة. لذلك هناك المزيد من التسلسلات الممكنة من الطوابق ، لذلك نحن بخير ؛ كل سطح ممكن IRL هو الآن (مع احتمال كبير) ممكن في هذا النظام. وهذه حجة جيدة باستثناء ...

2226 هو فقط تقريبمن 52! اقسمه. 2256/ 52! لا يمكن أن يكون عددًا صحيحًا لأن هناك شيء واحد ، 52! غير القسمة على 3 ولكن لا يوجد قوة من اثنين! نظرًا لأن هذا ليس رقمًا صحيحًا الآن ، فلدينا الحالة التي تكون فيها جميع الطوابق ممكن، لكن بعض الطوابق هي أكثر احتمالا من غيرها.

إذا لم يكن ذلك واضحًا ، ففكر في الوضع بأرقام أصغر. لنفترض أن لدينا ثلاث بطاقات ، A ، B و C. افترض أننا نستخدم PRNG ببذرة 8 بت ، لذلك هناك 256 نوعًا ممكنًا من البذور. هناك 256 مخرجات محتملة من PRNG(3) اعتمادا على البذور. لا توجد طريقة لكون ثلثهم يكون A ، وثلثهم B وثلثهم C لأن 256 غير قابل للقسمة بالتساوي 3. يجب أن يكون هناك تحيز صغير تجاه واحد منهم.

بالمثل ، 52 لا تنقسم بالتساوي إلى 2256لذلك يجب أن يكون هناك بعض التحيز تجاه بعض البطاقات كالبطاقة الأولى المختارة والتحيز بعيداً عن الآخرين.

في نظامنا الأصلي ببذرة 32 بت ، كان هناك تحيز كبير ولم يتم إنتاج الغالبية العظمى من الطوابق المحتملة. في هذا النظام يمكن إنتاج جميع الأسطح ، ولكن توزيع الطوابق لا يزال معيبا. بعض الطوابق قليل جدا أكثر احتمالا من غيرها.

السؤال الآن هو: هل لدينا هجوم على أساس هذا الخلل؟ والجواب هو في الممارسة ، وربما لا. تم تصميم CPRNGs بحيث إذا كانت البذور عشوائية حقا ثم فمن غير الممكن حسابيا لمعرفة الفرق بين CPRNG و TRNG.

حسنًا ، دعونا نلخص.

كيف تختلف أرقام pseudorandom والأرقام العشوائية حقا؟

وهي تختلف في مستوى القدرة على التنبؤ التي تظهرها.

  • أرقام عشوائية حقا لا يمكن التنبؤ بها.
  • جميع الأرقام شبه العشوائية يمكن التنبؤ بها إذا كان من الممكن تحديد البذور أو تخمينها.

لماذا الفرق مهم؟

لأن هناك تطبيقات يعتمد عليها أمان النظام عدم القدرة على التنبؤ.

  • إذا تم استخدام TRNG لاختيار كل بطاقة ، فهذا يعني أن النظام لا يمكن الوصول إليه.
  • إذا تم استخدام CPRNG لاختيار كل بطاقة ، يكون النظام آمنًا إذا كانت البذرة غير متوقعة وغير معروفة.
  • إذا تم استخدام PRNG عادي مع مساحة صغيرة للبذور فإن النظام غير آمن بغض النظر عما إذا كانت البذور غير متوقعة أو غير معروفة. مساحة صغيرة بما يكفي من البذور عرضة لهجمات القوة الغاشمة من النوع الذي وصفته.

هل الفرق له علاقة بتوزيع ناتج PRNG؟

توحيد التوزيع أو عدمه مكالمات فردية إلى RNG(n) لا علاقة له بالهجمات التي وصفتها.

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

سؤال اخر:

إذا كانت TRNG أفضل بكثير من CPRNG ، التي هي بدورها أفضل بكثير من PRNG ، فلماذا يستخدم أي شخص CPRNG أو PRNG؟

سببان.

أولا: حساب. TRNG هو مكلفة. توليد أرقام عشوائية حقا أمر صعب. تعطي CPRNG نتائج جيدة لإجراء مكالمات كثيرة بشكل تعسفي فقط واحد اتصل بـ TRNG للبذور. الجانب السلبي هو بالطبع ذلك عليك أن تبقي تلك البذرة سراً.

الثاني: احيانا نحن تريد القدرة على التنبؤ وكل ما نهتم به هو التوزيع الجيد. إذا كنت تقوم بإنشاء بيانات "عشوائية" كمدخلات برنامج لمجموعة اختبار ، ويظهر خطأ ، سيكون من الجيد أن تشغيل مجموعة الاختبار مرة أخرى ينتج عن الخطأ مرة أخرى!

آمل أن يكون الآن أكثر وضوحا بكثير.

أخيراً ، إذا كنت قد استمتعت بهذا ، فقد تستمتع بقراءة إضافية حول موضوع العشوائية والتباديل:


1374



حسنا ، الأولاد والبنات. هذا يكفي التعليق في الوقت الحالي. إذا كنت تريد مناقشة هذا الأمر أكثر من ذلك ، فانتزع نفسك من غرف الدردشة ، kthnxbye! - Ivo Flipse♦
Eric ولكن لم يتم إعادة تعيين البذور قبل كل سحب سطح السفينة الجديد ، هل هو؟ لذلك بينما أنت على صواب أن هناك عدد قليل نسبيا مسارات نحن أخذ العينات من ، لا تعرف بالضبط أين أنت في المسار تتقاطع في الوقت الحالي والمسارات. - A.S.
شخص ما فعل شيئا من هذا القبيل في الواقع - EJoshuaS
هناك علاج جيد (لكن كثيف) للقضايا ذات الصلة في المجلد 2 من TAOCP الخاص بـ Knuth ، القسم 3.5 "ما هو التسلسل العشوائي؟" (صفحة 149) ، بدءاً بتعريفات مضيئة للتتابعات المتساوية ، الموزعة k ، والتوزيع الموزع ∞. تناقش سلاسل pseudorandom في 3.5.F (ص 170). انظر أيضا معايير pseudorandomness من نظرية التعقيد و BSI الألمانية. - ShreevatsaR


كما يقول إريك ليبرت ، ليس التوزيع فقط. هناك طرق أخرى لقياس العشوائية.

يحتوي أحد مولدات الأرقام العشوائية المبكرة على تسلسل في البتة الأقل دلالة - يتناوب بين 0 و 1. لذلك كان LSB 100 ٪ متوقعة. لكن عليك أن تقلق أكثر من ذلك. كل جزء يجب أن يكون غير متوقعة.

هذه طريقة جيدة للتفكير في المشكلة. لنفترض أنك تقوم بتوليد 64 بت من العشوائية. لكل نتيجة ، خذ أول 32 بت (A) ، وآخر 32 بت (B) ، وقم بعمل فهرس في صفيف x [A، B]. الآن قم بإجراء الاختبار مليون مرة ، ولكل نتيجة ، قم بزيادة الصفيف في هذا الرقم ، أي X [A ، B] ++؛

الآن ارسم مخططًا ثنائي الأبعاد ، حيث كلما كبر العدد ، كلما زاد عدد البيكسلات في ذلك الموقع.

إذا كان عشوائيًا ، يجب أن يكون اللون رماديًا موحدًا. ولكن قد تحصل على أنماط. خذ على سبيل المثال هذا الرسم البياني "randomness" في رقم تسلسل TCP لنظام Windows NT:

Windows NT 

أو حتى هذا من نظام التشغيل Windows 98:

Windows 98 

وهنا هو العشوائية لتطبيق جهاز التوجيه سيسكو (IOS). Cisco ISO

هذه الرسوم هي مجاملة من ورقة Michał Zalewski. في هذه الحالة بالذات ، إذا كان بوسع المرء أن يتنبأ بما سيكون عليه رقم تسلسل بروتوكول TCP للنظام ، فيمكن للمرء أن ينتحل هوية هذا النظام عند توصيله بنظام آخر - مما يسمح باختطاف الوصلات ، اعتراض الاتصالات ، إلخ. وحتى إذا لم نتمكن من التنبؤ بالرقم التالي بنسبة 100٪ من الوقت ، إذا تمكنا من إنشاء اتصال جديد تحت سيطرتنايمكننا زيادة فرصة النجاح. وعندما تستطيع أجهزة الكمبيوتر توليد 100000 من الاتصالات في بضع ثوان ، فإن احتمالات هجوم ناجح تنتقل من الفلكية إلى احتمال أو حتى من المحتمل.


156



هذا رائع جدا يجلب الدموع لعيني. يجب أن يكون هناك تطبيق يقوم بإنشاء هذه التطبيقات لكل نظام تشغيل (جوّال / سطح مكتب / خادم) ومنصة (JVM / Javascript / etc). - HDave
وظيفة راند () ويندوز هي جيدة جدا! ينتج سحابة ليس لديها أي أنماط واضحة. انظر تنفيذي لتجربته (وخوارزميات أخرى): github.com/Zalastax/visualize_random - Zalastax


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

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

يمكن العثور على مزيد من المعلومات حول هجمات RNG هذه المادة ويكيبيديا.


92



توجد تشفير PRNGs ، وتستخدم على نطاق واسع. يمكنهم من بذرة بحجم متواضع توليد دفق غير محدود عمليا من الأرقام العشوائية. من غير الممكن حسابياً التمييز بين مثل هذا التيار من الأرقام العشوائية الحقيقية ، وبالتالي لا يمكن الحصول على معلومات إضافية من أي جزء من مثل هذا التيار ، ولأي غرض عملي ، تكون الأرقام جيدة مثل الأرقام العشوائية الحقيقية. - aaaaaaaaaaaa
أعتقد أن أسهل طريقة لشرح هذا هو أن خوارزميات مولد الرقم العشوائي يجب أن تكون مبرمجة. وهذا يعني أن هناك مجموعة من الإرشادات التي يتم اتباعها. إذا كان هناك مجموعة من التعليمات ، فلا يمكن أن تكون عشوائية. - Keltari
Keltari أنت تفتقد عنصر الإنتروبيا ... معظم RNGs (على الأقل تلك التشفير) تجمع مدخلات من مصادر خارجية (على سبيل المثال حركة الفأر) وتستخدم ذلك كجزء من حالة البداية - وبالتالي ، فإن التحول من A إلى B مبرمج ولكن الحالة الأولية لل A (يجب) يكون غير قابل للتفاوض. لينكس /dev/random سيبقى تقريبًا مدى توفر الإنتروبيا والتوقف عن توزيع الأرقام إذا انخفضت منخفضة جدًا. - Basic
بدافع الفضول - لماذا تعتبر مصابيح الحمم البركانية "عشوائية حقا"؟ أتفهم أنه يظهر سلوكًا لا يمكن التنبؤ به إلى حدٍ ما ، لكن شخصًا لديه فهم قوي بما فيه الكفاية حول ديناميكيات السوائل وكيفية تفاعل هذه السوائل في بيئة جاذبية الأرض يمكن أن يؤدي بالتأكيد إلى نتائج "يمكن التنبؤ بها" ، أليس كذلك؟ بالتأكيد ، لا يمكن التنبؤ بمصابيح الحمم البركانية ، ولكن بالنسبة لي ، فهي ليست عشوائية على الإطلاق ، ولكن يمكن التنبؤ بها بدرجة كبيرة. - theGreenCabbage
theGreenCabbage: أظن أن مصابيح الحمم فوضوية. بالنظر إلى نموذج كمبيوتر جيد بما فيه الكفاية ، وأعداد كافية من الدقة ، يمكنك (من حيث المبدأ) التنبؤ بالسلوك لبعض الوقت. ولكن نظرًا لأن النظام يتسم بالفوضى ، فإن مصباحين من الحمم البركانية لهما التغيير الأصغر في الشروط الأولية سيتباعدان بسرعة في السلوك. (ويتجاهل هذا التعليق جاذبيتها الفوضوية.) - dmm


لقد جربتها في بايثون: ها هي نتيجة 60 مليون لفة. أعلى الاختلاف هو مثل 0.15. أليس هذا عشوائي كما سيحصل؟

في الواقع ، إنه لذلك "جيد" انها سيئة... جميع الإجابات الموجودة تركز على القدرة على التنبؤ نظرا لسلسلة صغيرة من القيم الأولية. أريد إثارة موضوع آخر:

ك توزيع لديه انحراف معياري أصغر من اللفة العشوائية

العشوائية الحقيقية لا تأتي تماما أن بالقرب من المتوسط ​​"تقريبا بالضبط 1 حول عدد الأرقام التي يمكن أن تختار من بينها" التي تستخدمها كمؤشر للجودة.

إذا نظرت هذا السؤال Stack Exchange حول التوزيعات الاحتمالية لفات النرد متعددة، سترى صيغة للانحراف المعياري لفافات النرد N (بافتراض نتائج عشوائية حقيقية):

 sqrt(N * 35.0 / 12.0).

باستخدام هذه الصيغة ، و الانحراف المعياري إلى عن على:

  • 1 مليون لفات 1708
  • 60 مليون لفات 13229

إذا نظرنا إلى نتائجك:

  • 1 مليون لفة: stddev (1000066 ، 999666 ، 1001523 ، 999452 ، 999294 ، 999999) هو 804
  • 60 مليون لفة: stddev (9997653 ، 9997789 ، 9996853 ، 10006533 ، 10002774 ، 9998398) هو 3827

لا يمكنك توقع الانحراف المعياري لعينة منتهية لتتناسب تمامًا مع الصيغة ، ولكن يجب أن تكون قريبة جدًا. ومع ذلك ، في 1 مليون لفة لديك أقل من نصف stddev الصحيح ، وبنسبة 60 مليون كنت تحت الثلث - تزداد سوءا ، وهذا ليس من قبيل المصادفة ....

تميل Pseudo-RNGs إلى الانتقال من خلال سلسلة من الأرقام المميزة ، بدءًا من البذور وعدم إعادة زيارة الرقم الأصلي لفترة محددة. على سبيل المثال ، تطبيقات مكتبة C القديمة rand() عادة ما تكون وظيفة فترة 2 ^ 32 ، وأنها سوف يزور كل رقم بين 0 و 2 ^ 32-1 مرة واحدة بالضبط قبل تكرار البذور. لذا ، إذا قمت بمحاكاة 2 ^ 32 لفات النرد في المعامل (%) تتضمن النتائج كل رقم من 0 إلى 2 ^ 32 ، ستكون النتيجة لكل نتيجة 1-6 هي 715827883 أو 715827882 (2 ^ 32 ليست مضاعفات 6) ، وبالتالي فإن الانحراف المعياري لا يزيد إلا عن الصفر. الصيغة أعلاه ، الانحراف المعياري الصحيح ل 2 ^ 32 لفات هو 111924. على أي حال ، كلما زاد عدد القوائم الزائفة العشوائية تتقارب نحو الانحراف المعياري 0. يمكن توقع أن تكون المشكلة مهمة عندما يكون عدد اللفات جزءًا هامًا من الفترة ، ولكن بعض RNGs الزائفة قد تظهر مشاكل أسوأ - أو مشاكل حتى مع عدد أقل من العينات - من غيرها.

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


ولإعطاء مثال ملموس: قل رياضيات يروي الجهاز مبرمج لعبة البوكر أنه بعد 60 مليون لفات محاكاة - تستخدم لتومض مئات من "أضواء" قليلا حول الشاشة، إذا كنت هناك 10013229 أو أكثر الستات، التي تتوقع أن تكون الرياضيات 1 stddev بعيدا عن يعني ، يجب أن يكون هناك دفع تعويضات صغيرة. لكل 68-95-99.7 حكم (ويكيبيديا) هذا يجب أن يحدث 16٪ من الوقت (~ 68 ٪ تقع ضمن الانحراف المعياري / نصف الخارج فقط فوق). مع مولد الأرقام العشوائية ، هذا من حوالي 3.5 انحرافات معيارية فوق المتوسط: Under 0.025٪ فرصة - ما يقرب من أي عملاء الحصول على هذه الميزة. انظر الجدول العالي الانحرافات على الصفحة المذكورة للتو ، على وجه التحديد:

| Range    | In range   | Outside range | Approx. freq. for daily event  |
| µ ± 1σ   | 0.68268... | 1 in 3        | Twice a week                   |
| µ ± 3.5σ | 0.99953... | 1 in 2149     | Every six years                |

76



أنت تقارن بين التفاح والبرتقال هنا. لا يمتلك الانحرافان المعياريان أي شيء على الإطلاق. - Jbeuh


كتبت للتو هذا المولد رقم عشوائي لتوليد النردات

def get_generator():
  next = 1
  def generator():
    next += 1
    if next > 6:
      next = 1
    return next
  return generator

أنت تستخدمها هكذا

>> generator = get_generator()
>> generator()
1
>> generator()
2
>> generator()
3
>> generator()
4
>> generator()
5
>> generator()
6
>> generator()
1

إلخ. هل ستكون سعيدًا باستخدام هذا المولد لبرنامج يدير لعبة النرد؟ تذكر ، توزيعها هو بالضبط ما تتوقعه من مولد "عشوائي حقا"!

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


50



"مولدات الأرقام شبه العشوائية ... تولد أرقام يمكن التنبؤ بها بالتوزيع الصحيح" - فقط لأن PRNG لا يضمن أن لها توزيعًا مثاليًا (في الواقع ، لا تجاري بشكل عام ، على وجه التحديد الأسباب المبينة في هذه الإجابات). في حين يمكن أن تكون قابلة للتنبؤ بالنظر إلى المعلومات الكافية (الألف المستخدمة ، والبذور الأولية ، وقيم المخرجات ، و / ه) ، فإنها لا تزال لديها تباينات. - Brian S
الى جانب النقطة ، وأنا أعلم ، ولكن get_generator = lambda: itertools.cycle(range(1,7))، generator = get_generator()، next(generator) # and so on هو أنيق جدا لا أن يذكر :) - Janus Troelsen
BrianS في الواقع ، فإن PRNG التي فشلت اختبارات التوزيع مع مرور الوقت يمكن التنبؤ بها من خلال التعريف. لذلك على بعض N الكبيرة ، إذا حصلت على القليل من N / 2 من رؤوس N تقلب في العملة ، يمكنك أن تراهن على الرؤوس ، ويمكنك الفوز أكثر مما تخسره. وبالمثل ، إذا حصلت على توزيع مثالي من الرؤوس ضد ذيول الرؤوس ، لكن الرؤوس تأتي دائماً في شكل أزواج ، فعندئذ سيكون لديك مرة أخرى وصفة للفوز. اختبارات التوزيع هي كيف تعرف أن PRNG هي أي شيء جيد. - Jon Kiparsky
أنت نسيت nonlocal next :-). - Kos
حتى أفضل مثال: يعتقد أن بي عاديمما يعني أن أي تسلسل للأرقام في أي طول في أي قاعدة لا يظهر أكثر من أي تسلسل آخر لهذا الطول في تلك القاعدة. خوارزمية عند طلبها ن بت عشوائية ، يأخذ المقبل ن أجزاء من باي وإرجاعها ("البذرة" هي الشيء الذي تبدأ عليه) ، يجب على المدى الطويل إنتاج توزيع متساوي تماما. ولكنك ما زلت لا تريد ذلك بالنسبة لمولدك - شخص ما يعرف آخر حفنة من البتات التي قمت بتوليدها يمكن أن يجد أول مرة يحدث فيها هذا التسلسل ، وافترض أن بذورك موجودة ، ومن المحتمل أن تكون صحيحة. - cpast


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

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

إذا كنت مهتما في تطبيقات الأرقام العشوائية تحقق من مقالة ويكيبيديا.


26



المشكلة الكبرى هي عندما تحتاج إلى أرقام عشوائية لا يستطيع المهاجم التنبؤ بها لأسباب أمنية. - David Schwartz
أنت متأكد من أن الجحيم من المحتمل أن يأتي عبر وقت تحتاج فيه إلى رقم عشوائي حقاً. يكفي فتح صفحة ويب تبدأ بها https://... - Jan Hudec
JanHudec: حسنًا ، في الاستخدام اليومي ، ستحتاج إلى أرقام عشوائية آمنة في اللحظة التي تفتح فيها أي برنامج ، وذلك قبل أن تكتب في شريط العناوين: تخطيط عنوان الفضاء العشوائية. لهذا الاشياء من هذا القبيل يحدث. - Reid
JanHudec كنت على وجه التحديد تحدث بمعنى أنك ستحتاج إلى استخدام مولد أرقام عشوائية عبر الإنترنت. يتم استخدام الأرقام العشوائية بشكل متكرر ، ولكن هناك عدد قليل جدًا من الأشخاص الذين يحتاجون إلى توليدها بأنفسهم. - Alex McKenzie
تستخدم ماكينات القمار أيضًا PRNG ، وليس TRNG. تشغيل المولد في كل وقت ويتم اختيار عدد في الوقت المحدد الذي يتم الضغط على زر الدوران. إن مجموع قيم PRNG والوقت العشوائي للضغط على الزر يصل إلى TRNG. - Roger Dahl


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

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

glibc random():
    r[i] ← ( r[i-3] + r[i-31] )  % (2^32)
    output  r[i] >> 1

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

واحدة من الهجمات الشهيرة على مفتاح عشوائي الزائفة هو الهجوم على 802.11b WEP. يحتوي مفتاح WEP على مفتاح طويل المدى من 104 بت ، متصلاً مع وحدة 24 بت (عداد) لجعل مفتاح 128 بت ، والذي يتم تطبيقه بدوره خوارزمية RC4 لتوليد مفتاح عشوائي زائف.

( RC4( IV + Key ) ) XOR (message)

كانت المفاتيح وثيقة الصلة ببعضها البعض. هنا ، فقط IV زاد بمقدار 1 في كل خطوة ، وظلت جميع الآخرين نفسها. وبما أن هذا لم يكن عشوائيًا بحتًا ، فقد كان كارثيًا وانكسر بسهولة. يمكن استرداد المفتاح عن طريق تحليل 40000 إطار ، وهي مسألة دقائق. إذا كان WEP يستخدم عشوائياً 24 بت IV بشكل عشوائي ، فيمكن أن يكون آمنًا حتى يبلغ حوالي 2 ^ 24 (حوالي 16.8 مليون) إطار.

لذلك ينبغي للمرء أن يذهب مع مولد رقم عشوائي نقية في القضايا الحساسة الأمنية عندما يكون ذلك ممكنا.


26



كنت ألوم الاشياء WEP على بروتوكول مصمم بشكل سيء باستخدام تشفير ضعيفة. مع الأوتار تيار الحديثة يمكنك استخدام عداد كما IV. - CodesInChaos
كانت المشكلة الرئيسية في WEP هي تكرار المفتاح في إطارات 2 ^ 24 (حوالي 16 مليون). كان أسوأ حتى مع المفاتيح ذات الصلة التي جعلت من الممكن للقضاء على رمز في حوالي 40000 الإطارات. النقطة الرئيسية هنا هي أن المفتاح ليس عشوائيًا. ترتبط ارتباطا وثيقا ، لذلك من السهل كسرها. - Prabhu
العشوائية الزائفة سيئة في التشفير فقط عند توليد مفاتيح التشفير. انها على ما يرام تماما وراء ذلك. في الواقع ، RC4 هو أكثر قليلا من مولد رقم عشوائي شبه مزروع بتوسيع 128 بت من المفتاح XORed على النص العادي للرسالة. - Matt


الفرق هو أن الأرقام المولدة العشوائية يمكن التنبؤ بها (تكرار) بعد بعض الوقت حيث الأرقام العشوائية الحقيقية ليست كذلك. يعتمد طول المدة التي يستغرقها التكرار على طول البذرة المستخدمة في توليدها.

إليك مقطع فيديو رائع حول هذا الموضوع: http://www.youtube.com/watch؟v=itaMNuWLzJo 


12



القدرة على التنبؤ! ميرسين تويستر هو مثال جيد على ذلك. في معظم عمليات التنفيذ بعد 624 Int32 يمكنك التنبؤ بكل الرقم التالي ، لكن تسلسل Mersenne Twister أطول بكثير من ذلك (2 ^ 19937 - 1). - HoLyVieR
لا أفهم لماذا لا يتم دفع هذه الإجابة إلى المكدس ، حيث يبدو لي أن هذه هي الإجابة الدقيقة والموجزة على السؤال ، جزئيًا على الأقل. يمكن التنبؤ بأرقام عشوائية زائفة بسهولة بعد بعض التعادلات ، حيث يتفاوت عدد السحوبات مع "خوارزمية" عشوائية زائفة. اختيار خوارزمية "جيدة" يبحث في الجوانب: 1. يتم رسم كل قيمة في تردد متساو (توزيع) ، 2. يستغرق "وقتًا طويلاً" لإعادة تشغيل التسلسل في البداية والبدء في الرسم مرة أخرى نفس الأرقام في نفس الترتيب. - mins
"الأرقام العشوائية الحقيقية ليست [يمكن التنبؤ بها]". لهذا اليوم هذا صحيح. الآن إذا كنا نؤمن بنظرية الانفجار الكبير ، ولدينا الكثير من القوة لحساب حالة الكون في أي وقت بعد BB ، على أساس الفيزياء بعد ذلك ... نحن قادرون على التنبؤ بالمستقبل ، بما في ذلك حقيقة أن أكتب هذا التعليق الدقيق للغاية. حق؟ - mins
وهذا صحيح افتراضيا ، ومع ذلك ، بالنظر إلى درجة الانتروبيا الواسعة في الأعمال الفعلية للهيئات الحقيقية ، فإن القدرة الحاسوبية المطلوبة ستكون ضخمة للغاية. فكر القارات المغطاة في أجهزة الكمبيوتر. بالإضافة إلى ذلك ، بسبب الاعتماد على الحالة السابقة ، فإن حالة كل جسم في الكون في كل نقطة زمنية تحتاج إلى تخزين ، والذي يتطلب بحكم التعريف مساحة أكبر من المساحة المتوفرة في الكون ، مملوءة بالكامل بجهاز الذاكرة - TheEnvironmentalist
TheEnvironmentalist - آه! "القارات المغطاة بأجهزة الكمبيوتر" ... أليس كذلك ما يدور حوله "The Hitchhiker's Guide to the Galaxy"؟ ؛-) - ysap


افترض أنه يمكن تخمين رقم عشوائي زائف من قبل أي شخص قبل أن يتم إنشاؤه.

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

ومع ذلك ، عندما يتعلق الأمر بأشياء مثل أمن الكمبيوتر ؛ العشوائية الحقيقية مطلوبة.

على سبيل المثال ، تبدأ خوارزمية RSA مع الكمبيوتر باختيار رقمين عشوائيين (P و Q) ثم القيام بعدد من الخطوات لهذه الأرقام لتوليد الأرقام الخاصة المعروفة باسم المفاتيح العامة والخاصة. (الجزء المهم من المفتاح الخاص هو أنه خاص ، ولا أحد يعرفه!)

إذا كان أحد المهاجمين يستطيع معرفة الرقمين "العشوائيين" اللذين سيقوم الكمبيوتر لديك باختيارهما ، فيمكنهما القيام بنفس الخطوات لحساب مفتاحك الخاص (الذي لا يجب أن يعرفه أي شخص آخر!)

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

هذا هو المكان الصحيح العشوائي (أي عدم القدرة على التخمين / حساب) مطلوب.


10