هل يمكن إنشاء رقم عشوائي حقًا باستخدام أوامر ping لعناوين IP محددة بشكل عشوائي زائف؟

StackOverflow https://stackoverflow.com/questions/137340

  •  02-07-2019
  •  | 
  •  

سؤال

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

كان هذا هو الاقتراح الوحيد الذي لم يعتمد على الأجهزة غير السلعية.

وبالتالي، لن يضع أحد سمعته على المحك ليجادل بشكل قاطع لصالحها أو ضدها.

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

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

المحلول

لا.

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

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

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

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

بالنسبة للأمان العملي، يمكنك أن تفترض أنه لا أحد يريد مفتاح PGP الخاص بك بهذه الدرجة من السوء، ويوافق على مقايضة الأمان مقابل التكلفة.ولكن عند اختراع الخوارزميات والتقنيات، يتعين عليك منحهم أقوى الضمانات الأمنية التي قد يواجهونها على الإطلاق.نظرًا لأنني أستطيع أن أصدق أن شخصًا ما، في مكان ما، قد يريد المفتاح الخاص لشخص آخر بشدة بما يكفي لإنشاء هذه المجموعة من الأدوات للتغلب على اقتراحك، فلا يمكنني قبول ذلك باعتباره تقدمًا مقارنة بأفضل الممارسات الحالية.يتبع AFAIK /dev/random ما يقرب من أفضل الممارسات لإنشاء بيانات عشوائية حقًا على جهاز كمبيوتر منزلي رخيص]

[تعديل آخر:لقد اقترح في التعليقات أن (1) صحيح بالنسبة لأي TRNG أن العملية المادية يمكن أن تتأثر، و(2) أن المخاوف الأمنية لا تنطبق هنا على أي حال.

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

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

أخيرًا، لمعالجة تفاصيل تنفيذ الاقتراح كما هو مطلوب:بافتراض أنك تقبل أوقات ping بشكل عشوائي، فلا يزال يتعذر عليك استخدام أوقات ping غير المعالجة كإخراج RNG.أنت لا تعرف توزيعها الاحتمالي، ومن المؤكد أنها ليست موزعة بشكل موحد (وهو ما يريده الناس عادةً من RNG).

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

إذا كنت تستخدم البيانات لزرع PRNG، ويمكن لـ PRNG استخدام مدخلات أولية كبيرة بشكل عشوائي، فلن تضطر إلى التجزئة لأنها ستفعل ذلك نيابةً عنك.لا يزال يتعين عليك تقدير الإنتروبيا إذا كنت تريد معرفة مدى "عشوائية" قيمة بذورك - يمكنك استخدام أفضل PRNG في العالم، لكن إنتروبياها لا تزال محدودة بإنتروبيا البذرة.]

نصائح أخرى

الأرقام العشوائية مهمة جدًا بحيث لا يمكن تركها للصدفة.

أو التأثير/التلاعب الخارجي.

اجابة قصيرة

إن استخدام بيانات توقيت ping في حد ذاته لن يكون عشوائيًا حقًا، ولكن يمكن استخدامه كمصدر لـ إنتروبيا والتي يمكن استخدامها بعد ذلك لإنشاء بيانات عشوائية حقًا.

نسخة أطول

ما مدى عشوائية أوقات ping؟

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

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

بالنسبة لبيانات توقيت الشبكة التي تبلغ حوالي 50 مللي ثانية، ويتم قياسها إلى أقرب 0.1 مللي ثانية، مع انتشار قيم يبلغ 2 مللي ثانية، لديك حوالي 20 قيمة.بالتقريب إلى أقرب قوة 2 (16 = 2^4) يكون لديك 4 بتات من الإنتروبيا لكل قيمة توقيت.إذا كان الأمر يتعلق بأي نوع من التطبيقات الآمنة (مثل إنشاء مفاتيح التشفير)، فسأكون متحفظًا وأقول أنه كان فقط 2 أو 3 بتات من الإنتروبيا لكل قراءة. (لاحظ أنني أجريت تقديرًا تقريبيًا للغاية هنا، وتجاهلت احتمالية الهجوم).

كيفية توليد بيانات عشوائية حقا

للحصول على أرقام عشوائية حقيقية، تحتاج إلى إرسال البيانات إلى شيء مصمم على غرار /dev/random من شأنها جمع الإنتروبيا وتوزيعها داخل مخزن البيانات (باستخدام نوع ما دالة تجزئة, ، عادة أ واحد آمن).وفي الوقت نفسه، يتم زيادة تقدير الإنتروبيا.لذلك، بالنسبة لمفتاح AES 128 بت، ستكون هناك حاجة إلى 64 توقيتًا ping قبل أن يحصل مجمع الإنتروبيا على إنتروبيا كافية.

لكي تكون أكثر قوة، يمكنك بعد ذلك إضافة بيانات التوقيت من استخدام لوحة المفاتيح والماوس، وأوقات استجابة القرص الصلب، وبيانات مستشعر اللوحة الأم (مثل درجة الحرارة)، وما إلى ذلك.إنه يزيد من معدل جمع الإنتروبيا ويجعل من الصعب على المهاجم مراقبة جميع مصادر الإنتروبيا.وبالفعل هذا ما يتم مع الأنظمة الحديثة.القائمة الكاملة لمصادر الإنتروبيا لـ MS Windows مدرجة في التعليق الثاني لهذا المنصب.

المزيد من القراءة

لمناقشة هجمات (أمن الكمبيوتر) على مولدات الأرقام العشوائية، وتصميم مولد أرقام عشوائية آمن تشفيريًا، يمكنك أن تفعل ما هو أسوأ من قراءة ورق اليارو بواسطة بروس شناير وجون كيلسي.(يتم استخدام Yarrow بواسطة أنظمة BSD وMac OS X).

لا.

افصل كابل الشبكة (أو /etc/init.d/networking stop) وتنخفض الإنتروبيا بشكل أساسي إلى الصفر.

قم بتنفيذ هجوم رفض الخدمة على الجهاز الذي يقوم بإجراء اختبار الاتصال به وستحصل أيضًا على نتائج يمكن التنبؤ بها (قيمة مهلة اختبار الاتصال)

أعتقد أنك تستطيع ذلك.بعض الأشياء التي يجب الانتباه إليها:

  • حتى في حالة اختبار اتصال عناوين IP العشوائية، ستكون القفزات القليلة الأولى (منك إلى أول جهاز توجيه L3 حقيقي في شبكة مزود خدمة الإنترنت) هي نفسها لكل حزمة.يؤدي هذا إلى وضع حد أدنى لوقت الرحلة ذهابًا وإيابًا، حتى إذا قمت بإجراء اختبار الاتصال بشيء ما في مركز بيانات في نقطة التواجد الأولى تلك.لذا عليك أن تكون حذرًا بشأن تطبيع التوقيت، فهناك حد أدنى لرحلة الذهاب والإياب.
  • يجب عليك أيضًا توخي الحذر بشأن تشكيل حركة المرور في الشبكة.يؤدي تنفيذ الجرافة المتسربة النموذجية في جهاز التوجيه إلى إطلاق N بايت كل M ميكروثانية، مما يؤدي إلى اضطراب توقيتك بشكل فعال في فترات زمنية محددة بدلاً من نطاق مستمر من الأوقات.لذلك قد تحتاج إلى تجاهل البتات ذات الترتيب المنخفض للطابع الزمني الخاص بك.

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

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

جزء من مولد الأرقام العشوائية الجيد هو احتمالات متساوية لجميع الأرقام مثل n -> اللانهاية.

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

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

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

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

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

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

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

يرى Random.org للمزيد عن العشوائية.

إليك محاولة للتنفيذ:

@ips  : list = getIpAddresses();
@rnd         = PseudorandomNumberGenerator(0 to (ips.count - 1));

@getTrueRandomNumber() { ping(ips[rnd.nextNumber()]).averageTime }

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

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

ذهبت 9 جولات لمحاولة التوصل إلى PRNG قوي (وسريع) لآلية RPC للعميل/الخادم التي كنت أكتبها.كان لدى كلا الجانبين مفتاح متطابق، يتكون من 1024 سطرًا من 32 حرفًا.سيرسل العميل AUTH xx، وسيقوم الخادم بإرجاع AUTH yy ..وكان كلا الجانبين يعرفان أي سطرين من المفتاح يجب استخدامهما لإنتاج سر السمكة المنتفخة (+ ملح).سيرسل الخادم بعد ذلك ملخص SHA-256 للمفتاح بأكمله (المشفر)، ويعلم العميل أنه يتحدث إلى شيء لديه المفتاح الصحيح..استمرت الجلسة.نعم، حماية ضعيفة جدًا للرجل الموجود في المنتصف، لكن المفتاح العام كان غير وارد بالنسبة لكيفية استخدام الجهاز.

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

لذلك يجب أن أسأل عن فكرتك..إلى أي مدى سيكون الأمر عمليًا؟

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

واحدة من أسهل الأفكار التي رأيتها في التنفيذ والتي تعمل عالميًا على جميع الأنظمة هي استخدام ثابت من خط بطاقة الصوت في الكمبيوتر/منفذ الميكروفون.

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

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

نعم ممكن، ولكن...الشيطان في التفاصيل.

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

ما مقدار الإنتروبيا التي تحتوي عليها أوقات ping؟

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

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

يعرض YouTube جهازًا أثناء العمل: http://www.youtube.com/watch?v=7n8LNxGbZbs

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

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

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

أيضًا، حتى لو قمت بإنشاء رسم بياني مرئي لـ 100.000 نتيجة وحسبت أنه لا يوجد ارتباطات قليلة أو قليلة بين الأرقام، فهذا لا يعني أنها عشوائية حقًا.كما أوضح ديلبرت :)

لا يبدو لي كمصدر جيد للعشوائية.

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

قد يمنحك LSB دفقًا عشوائيًا من البتات، ولكن سيتعين عليك مراعاة مشكلات دقة الساعة - ربما بسبب كيفية عمل المقاطعات، ستحصل دائمًا على مضاعفات 2 مللي ثانية في بعض الأنظمة.

من المحتمل أن تكون هناك طرق "مثيرة للاهتمام" أفضل بكثير للحصول على البتات العشوائية - ربما ابحث في Google عن كلمة عشوائية، واحصل على الصفحة الأولى واختر البت N من الصفحة.

إيه، أجد أن هذا النوع من الأسئلة يؤدي إلى مناقشات حول معنى "عشوائي حقًا" بسرعة كبيرة.

أعتقد أن قياس الأصوات من شأنه أن يؤدي إلى بتات عشوائية ذات جودة جيدة، ولكن بمعدل غير كافٍ لتكون ذات فائدة كبيرة (إلا إذا كنت على استعداد للقيام ببعض عمليات DDOS الخطيرة).

ولا أرى أنه سيكون أكثر عشوائية من قياس الخصائص التناظرية/الميكانيكية للكمبيوتر، أو سلوك كيس اللحم الذي يشغله.

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

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

    I MADE U A RANDOM NUMBER
           BUT I EATED IT

العشوائية ليست خاصية ثنائية - إنها قيمة بين 0 و1 تصف مدى صعوبة التنبؤ بالقيمة التالية في الدفق.

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

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

على الجانب العملي، أنصح بعدم القيام بذلك، نظرًا لأنه يمكن التنبؤ بالأصوات والتلاعب بها، مما يقلل من عشوائيتها.

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

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

يمكنك استخدام طريقة XKCD:

Random Number Generator

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

فيما يلي قائمة بـ 8 أرقام حصلت عليها عندما قمت بتشغيلها.

455298558263758292242406192

506117668905625112192115962

805206848215780261837105742

095116658289968138760389050

465024754117025737211084163

995116659108459780006127281

814216734206691405380713492

124216749135482109975241865

#include <iostream>
#include <string>
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <vector>
#include <fstream>

using namespace std;

int main()
{
system("traceroute -w 5 www.google.com >> trace.txt");

string fname = "trace.txt";
ifstream in;
string temp;

vector<string> tracer;
vector<string> numbers;

in.open(fname.c_str());
while(in>>temp)
tracer.push_back(temp);

system("rm trace.txt");

unsigned index = 0;

string a = "ms";
while(index<tracer.size())
{
if(tracer[index]== a)
numbers.push_back(tracer[index-1]);
++index;
}


std::string rand;

for(unsigned i = 0 ; i < numbers.size() ; ++i)
{
std::string temp = numbers[i];
int index = temp.size();
rand += temp[index - 1];
}

cout<<rand<<endl;

return 0;

}

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

تبدو فكرة كاميرا الويب معقولة (قليلاً).غالبًا ما يوصي مستخدمو Linux باستخدام الضوضاء العشوائية الصادرة عن بطاقة الصوت التي لا تحتوي على ميكروفون متصل.

هنا هو اقتراحي:

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

2- خلال أوقات ارتفاع حركة المرور على الإنترنت في بلدك (في بلدي من الساعة 7 إلى 11 مساءً)، قم بإجراء اختبار اتصال تلك المواقع عدة مرات، وخذ كل نتيجة اختبار (استخدم فقط القيمة الصحيحة) واحسب المعامل 2 منها (أي من كل عملية ping تحصل على بت واحد:إما 0 أو 1).

3- تكرر العملية لعدة أيام مع تسجيل النتائج.

4- اجمع كل البتات التي حصلت عليها من جميع الأصوات (ربما ستحصل على مئات الآلاف من البتات) واختر منها البتات الخاصة بك.(ربما تريد اختيار البتات الخاصة بك باستخدام بعض البيانات من نفس الطريقة المذكورة أعلاه :))

احرص :في الكود الخاص بك يجب عليك التحقق من المهلة .. إلخ

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