in

ما حاصل قسمة 1 على 998,001؟ وما هي الأرقام العشوائية التي يولدها الحاسوب وبما تفيدنا؟

صورة: Luther College Computer Science

كشف عشاق الرياضيات عن شيء غريب يجري برقم 998,001. إذا قمت بتقسيم 1 على 998,001 فإن الرقم العشري الناتج سيعطيك رقمًا مكون من ثلاثة مراتب تقريباً. على سبيل المثال، يبدأ الرقم العشري كالتالي: 0.00000100200300400500 و هكذا. على أيّة حال، يتم تخطي عدد واحد مكون من ثلاثة أرقام في هذه السلسلة الغريبة.

فاتتك نقطة

العدد المكون من ثلاثة مراتب والمفقود من المعادلة هو 998. الغريب أن الرقم يقفز من 997 إلى 999. العدد 998,001 هو في الواقع جزء من عائلة الأرقام ذات المراوغات الرياضية المثيرة للاهتمام (الأرقام التي هي مربعات تكرار العدد 9 ).

فالعدد 998,001 هو مربع العدد 999، وإذا قسمت 1 على 9,801 (الذي هو مربع العدد 99)، سوف تحصل على إجابة مشابهة (كل الأعداد المكونة من رقمين في سلسلة ما عدا 98). إذا قسمت 1 على 99,980,001 (مربع العدد 9,999) ستحصل على كل الأعداد المكونة من 4 أرقام ماعدا (9,998). إذا قسمت 1 على 81 (مربع العدد 9)، النتيجة ستكون 0.0123456790123 كل الأعداد المكونة من رقم واحد ماعدا 8، مع الاستمرار في هذا النمط إلى ما لا نهاية.

اصنع الكسور العشرية المتكررة الخاصة بك

من المحتمل أن يستغرق حساب أي من هذه المعادلات بنفسك وقتاً طويلاً. لحسن الحظ، يمكنك استخدام معرفتك المكتشفة حديثاً عن كيفية عمل هذه الأرقام لإنشاء أي نمط عشري متكرر تريده. الحيلة هي تحديد عدد الأرقام التي تريدها في كل رقم، ثم ابحث عن مربع الرقم الذي يحتوي على العديد من الأرقام المتكررة وعددها 9، ثم قسّم 1 على هذا الرقم.

هذا يعني أنك إذا أردت الحصول على 0.012345679 كإجابة لك (أي رقم أُحادي يزداد بالتدريج) عليك إيجاد مربع العدد 9 وتقسيم 1 عليه ستحصل على الكسر 1/81 الذي يُمثّل على أنه كسر عشري، وهو سلسلة التكرار الموضحة أعلاه تماماً.

إذا قمت بإنشاء سلسلة غير متناهية التي تتبع النمط [1+2x+3x^2+4x^3] وx كانت أقل من 1، سيتم تبسيط السلسة بأكملها إلى 1 مقسومة على مربع [1- x]. يمكنك استخدام هذه السلسلة لإنشاء كسور عشرية متكررة أيضاً.

على سبيل المثال، إذا قمت بتحديد x كـ (1/10)، ستعطي السلسة بأكملها نتيجة العملية 100/81، مما يؤدي إلى إنشاء سلسلة متكررة مماثلة لتلك الموصوفة أعلاه.

هل هذا مفيد؟

لغة البرمجة R هي بيئة برمجية إحصائية للتنهيج والرسم، اخترعها (روس ايهاكا) و(روبيرت جنتلمان) وسميت بلغة R تيمناً بإسميهما لغة آر هي بيئة عمل برمجية للإحصاء الحاسوبي تسمح بإجراء التطبيقات الإحصائية من جهة وبناء البرامج الإحصائية من جهة أخرى. هي مفتوحة المصدر، وهناك نسخة مجانية لها من لغة البرمجة الإحصائية. صورة: Thinkstock

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

ربما لن يفاجئك معرفة أن معظم المولدات ذات الأرقام العشوائية ليست كلها ”عشوائية“. لا يمكن لأجهزة الحاسوب اختيار الأرقام من العدم، لذلك يكون أمامها خياران:

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

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

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

كيف يقوم الحاسوب بتوليد الأرقام العشوائية؟

تقوم أجهزة الكومبيوتر بإنشاء أرقام عشوائية لكل شيء: بدءاً من التشفير وحتى ألعاب الفيديو والمُقامرة. يوجد قسمين للأرقام العشوائية: الأرقام العشوائية ”الحقيقية“ والأرقام العشوائية ”المزيفة“ والفرق مهمّ لأمان أنظمة التشفير.

أصبح هذا الموضوع أكثر إثارة للجدل مؤخراً، حيث تساءل العديد من الأشخاص عما إذا كانت شريحة مولد الأرقام العشوائية المدمجة من شركة «انتل Intel» جديرة بالثقة.

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

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

في أوقات أخرى، تقوم بإنشاء أرقام ”عشوائية مزيفة“ باستخدام خوارزمية بحيث تظهر النتائج بعشوائية، مع أنها في الحقيقة ليست عشوائية على الإطلاق

لماذا نستخدم الأرقام العشوائية؟

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

مولدات الأرقام العشوائية مفيدة للكثير من الأهداف المختلفة، بالإضافة الى التطبيقات مثل إنشاء أرقام عشوائية لأغراض المُقامرة أو إيجاد نتائج غير متوقعة في ألعاب الكومبيوتر.

والعشوائية مهمة للتشفير أيضاً، حيث يتطلب التشفير أرقاماً لا يستطيع المهاجمون تخمينها. لا يمكننا استخدام الأرقام ذاتها مراراً وتكراراً، فنحن بحاجة لإنشاء هذه الأرقام بطريقة غير متوقعة وبالتالي لن يستطيع المهاجمون معرفتها. هذه الأرقام العشوائية ضرورية للتشفير الآمن، سواء كُنت تُشفر الملفات الخاصة بك أو أنك فقط تستخدم مواقع HTTPS ”بروتوكول نقل النص التَشعُّبي الآمن Hypertext Transfer Protocol Secure“ على شبكة الإنترنت.

أرقام عشوائية حقيقية

قد تتساءل كيف يمكن لجهاز الحاسوب في الواقع إنشاء رقم عشوائي؟ من أين تأتي هذه العشوائية؟ إذا كانت مجرد جزء من شيفرة الحاسوب، أليس من الممكن أن تكون الأرقام التي ينشئها الحاسوب قابلة للتنبؤ بها؟

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

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

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

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

أرقام عشوائية مزيفة

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

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

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

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

جهاز توليد الأرقام العشوائية HRNG لوكالة الأمن القومي الأميركية وشركة Intel:

جهاز توليد الأرقام العشوائية من شركة إنتل والمدمج مع العتاد الصلب للحواسيب. صورة: Phoronix

لتسهيل الأمور على المطورين والمساعدة في إيجاد أرقام عشوائية آمنة، تتضمن رقائق Intel مولد الأرقام العشوائية لمكون مُعتَمِد على جهاز مولد الأرقام العشوائي المعروف بـ (RdRand). تستخدم هذه الشريحة مصدر مقياس عشوائية (انتروبيا) على المعالج وتوفر أرقاماً عشوائية للبرامج عندما تطلبها البرامج.

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

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

يعمل Linux وفقاً لهذه الطريقة ما أدى إلى زيادة عشوائية البيانات العشوائية الواردة من (RdRand) بحيث لا يمكن التنبؤ بها حتى لو كان هناك باب خلفي.