استمرارا للموضوع الذي بدأ في
هذه السلسلة من المقالات ، اليوم سنتحدث عن جيل الأعداد الأولية. الجيل احتمالي ومضمون. لذا ، فإن حالتنا هي مع ضمان يتيح لك استخدام الأرقام التي تم الحصول عليها في التطبيقات المتعلقة بالتشفير ، والتي تضمن ، على سبيل المثال ، أمان إدارة أموالك من خلال التطبيقات المصرفية. علاوة على ذلك ، سترى كيف يضمن الحصول على أعداد أولية ذات حجم كافٍ للتشفير ، وكذلك المشكلات التي يمكن أن تحدث إذا أهملت الضمانات.
يعتمد نظام الأمان العام لتبادل البيانات على تعقيد تحديد عدد مركب كبير. علاوة على ذلك ، إذا كانت هناك العديد من العوامل ، فستكون صغيرة ، وهذا يبسط بشكل كبير اختراق نظام الأمن. لذلك ، يتم الحصول على رقم مركب كبير بضرب رقمين أوليين بحجم معين. ولكن هنا مشكلة واحدة واضحة - كيفية اختيار عدد أولي كبير بما فيه الكفاية؟
أولا ، تحديد الحجم. في التشفير الحديث ، يتم تحديد ترتيب الرقم المركب بواسطة الصيغة
22048 ، وهذا هو ، الترتيب الفعلي هو 2048 في تدوين ثنائي. وقسائم هذا الرقم المركب من 1024 ، أي في مكان ما حول القيم
21024 . لماذا 1024؟ لأنه قبل عشر سنوات ، تم تحديد عامل ترتيب 768 ، واليوم من المحتمل جدًا أن تتحلل الأرقام المركبة من 1024 ، لذا فقد تقرر أن الموثوقية لمضاعفة الطلب مرة واحدة ، أي 2048. حسنًا ، من السهل تحديد هذا الترتيب ترتيب العوامل المطلوبة.
ولكن ماذا يحدث إذا كان ترتيب العوامل أقل بكثير من 1024؟ بعد ذلك ، في وقت مقبول ، يمكنك تحليل رقم مركب ، حتى لو كان في حدود 2048. وهذا يعني أنه من الضروري التأكد من أن العوامل التي اختارناها لها أمر قريب من 1024 وفي الوقت نفسه بسيطة ، لا يمكن معالجتها. ولكن هنا يتم تنفيذ الاختيار نفسه وفقًا لمخطط احتمالي ، وهذا يؤدي فقط إلى مشاكل محتملة.
يتم التحقق من احتمال بساطة الرقم على أساس افتراض أن الرقم "على الأرجح" أولي إذا كانت فترته (الموصوفة
هنا ) مقسومًا على الرقم نفسه ، ناقص واحد (
N−1 ). في شكل صيغة ، يبدو كما يلي:
ap pmodN=1
N−1 pmodp=0
هنا
N - عدد التحقيق ،
دولا - قيمة من

إلى
N−2 (يحدد أساس نظام الأرقام الذي تحسب فيه الفترة) ،
ع - فترة العدد المحقق. عملية
وزارةالدفا هنا يعني أخذ باقي تقسيم المعامل الأول على الثاني.
تعتمد الفحوصات الحالية على مثل هذا النهج ، لأن الأعداد الكبيرة من التحديد غير المشروط للبساطة من خلال الاختبارات المعروفة تستغرق وقتًا طويلاً للغاية. لكن ناقص مثل هذا الفحص واضح - في بعض الأحيان يمكنك الحصول على رقم مركب ، بدلاً من رقم بسيط. علاوة على ذلك ، لا أحد يعرف المقسومات التي ستكون جزءًا من هذا العدد. بتعبير أدق ، سيتمكن المهاجم من اكتشاف ذلك من خلال تطبيق أساليب التثبيط المعروفة ، والتي تبدأ في العمل في وقت مقبول إذا كانت العوامل في حدود أقل من بضع مئات من البتات.
كم مرة يكون خطأ البساطة الاحتمالي؟ نادرا ما يكفي. هناك خطأ واحد لعشرات الآلاف من الأخطاء البسيطة ، وأحيانًا اثنان ، لكن لا شيء يضمن لنا من ثلاثة. بالإضافة إلى ذلك ، يعتمد الكثير على الاختبار المستخدم. لذلك ، على سبيل المثال ، في مكتبة لغة Java القياسية في فئة BigInteger ، يتم تنفيذ فحص يتيح تفويت 2-3 مرات لكل ألف منها بسيطة. بمعنى أنه لا يجب أن تعتقد أنه إذا كانت هناك نظريات قليلة للغاية ، فمن الناحية العملية ، سيكون كل شيء في الشوكولاتة.
كيف هذا خطير؟ يبدو أن الأمر ليس مخيفًا كما قد يقول البعض ، لأنه إذا كان الموقع الذي يغلق تصفح صفحاته باستخدام بروتوكول https يتلقى مفتاحًا محسوبًا بسهولة ، فما المشكلة؟ حسنًا ، سوف يكتشف المتسللون ما هي الأخبار التي تقرأها على هذا الموقع ، وما هي الفائدة؟ ولكن في الواقع ، لا يتم التشفير فقط عند تصفح الويب. سيحدث موقف أكثر سوءًا إذا اكتشف المتسللون مفتاح خدمتك المصرفية المفضلة لإدارة أموالك عن بُعد. رغم أنه ، مرة أخرى ، يبدو أنه من أجل فتح بورصة مع البنك (وإذا كان البنك يستخدم شيكًا ضعيفًا للبساطة) ، سيتعين على المتسلل الانتظار حوالي 500 عام حتى يتحقق أخيرًا احتمال إصدار مفتاح محسوب بسهولة ، لأن المفاتيح عادةً ما تكون لها فترة صلاحية مدتها عام واحد. لذلك ، لضمان القرصنة ، تحتاج إلى الانتظار حتى يتم تنفيذ 500 إصدار من مفتاح جديد. يبدو أن كل شيء منطقي ، لكن هناك "لكن" آخر - يوجد أكثر من 500 بنك في العالم. لذلك ، في الوقت الحالي ، ربما في بنكك المفضل ، يمكن للمتسللين الوصول إلى أموالك الخاصة.
هل انت خائف بالتأكيد لا ، لأننا جميعًا شجعانًا للغاية ، حتى يبتسم الديك المحمص. ولكن لا يزال هناك شيء للخوف منه. على الرغم من أن احتمال حدوث هجوم ناجح من قبل المتسللين بالتحديد على البنك الذي تتعامل معه ليس بالأمر المرتفع ، ولكن مع ذلك ، إذا تحقق ذلك ، فمن المحتمل ألا يتم العثور على أموالك. لماذا؟ الأمر بسيط للغاية - الافتراض الأول القياسي لخدمة الأمن بالبنك هو أن الشخص الذي لديه حقوق الوصول المناسبة هو المسؤول. ليس أحد المتسللين ، هو احتمال التدخل الذي يعتبرونه أيضًا الحد الأدنى ، أي شخص خاص بهم. لذلك ، قد يذهب المتسلل دون عقاب.
كيفية حل هذه المشكلة؟ تحتاج إلى معرفة كيفية الحصول على أرقام أولية مضمونة. ولكن كيف نضمن بساطتهم؟ هناك أربع طرق لهذا الغرض.
الطريقة الأولى هي خرق الحد الأدنى من القيود. عادة ما يكون هذا البديل من غربال إراتوستين المحسن. هذه الطريقة موثوقة ومضمونة ، ولكنها تقتصر على الطلبات المتواضعة جدًا (أقل من مائة). لذلك ، هذه الطريقة غير قابلة للتطبيق في التشفير.
الطريقة الثانية هي التعداد مع قيود أقوى. لذلك ، إذا كانت فترة الرقم مساوية للرقم نفسه ، ناقص واحد ، فسيكون الرقم مضمونًا. الصيغة هنا هي -
N−1=p . ولكن لتحديد مدى تكافؤ فترة الاختلاف بين العدد والوحدة ، يتم استخدام طرق ثقيلة جدًا لا تعمل مع جميع فئات الأرقام. لذلك ، فإن استخدامها في التشفير يعتمد إما على العدد المحدود من أعداد فئات معينة ، أو أثناء التحقق ، إذا قمنا بزيادة حجم العدد. إضافة إلى ذلك ، لا تضمن أرقام فئة معينة بحد ذاتها أي شيء ، مما يعني الحاجة إلى فرز العديد من أرقام المرشحين. هنا ، على سبيل المثال ، تم بالفعل فرز أرقام مرسين ، والتي يوجد اختبار غير مشروط للبساطة ، واكتشفت أنها غير موجودة عملياً في النطاق المستخدم في التشفير. هذه قائمة كاملة بأوامر قريبة - 1279 ، 2203 ، 2281 ، 3217. كما ترون ، من 1024 إلى 2048 هناك رقم واحد مناسب فقط. لكن حتى لو أخذنا الباقي ، فإن عددهم يلمح إلينا بوضوح - لا يستحق ذلك! لذلك مرة أخرى كنا محظوظين مع طريقة التحقق.
الطريقة الثالثة احتمالية. هذا هو الذي يستخدم اليوم ، بما في ذلك البنك الذي تفضله. كيف يعمل؟ بسيط جدا - يتم التحقق من ما تبقى من تقسيم عدد التعسفي في السلطة
N−1 في
N إذا كان الباقي واحدًا ، فمن المحتمل أن يكون الرقم أولي. وهنا كلمة "ربما" هي أكثر الأشياء غير السارة هنا. على الرغم من أن الطرق الاحتمالية لفحص البساطة تحتوي أيضًا على تحسينات إضافية ، ومع ذلك ، كما هو موضح أعلاه ، فإن مكتبة Java القياسية غالبًا ما تكون مخطئة.
وأخيرا ، الطريقة الرابعة. إنه لا يعمل بنفس سرعة الاختبارات الاحتمالية (على الرغم من إمكانية تحسين شيء ما هنا أيضًا) ، ولكنه يعطي أعدادًا أولية مضمونة ، وحتى مع فترة يمكن تحديدها بسهولة. ما هي الفترة الأولى ، تسأل؟ على سبيل المثال ، لإنشاء تسلسل عشوائي زائف أو تشفير. بتعبير أدق ، عند معرفة الفترة ، نحن نعرف بالضبط عدد الأعداد التي ستكون في التسلسل ، مما يجعل من السهل التخطيط إلى متى يمكننا استخدام مولد التسلسل على أساس هذا الرقم. صحيح أن هذا ينطبق بالفعل على التشفير المتماثل ، ولكن يمكن أن يكون مفيدًا أيضًا في عدد من الحالات. بعد ذلك ، سننظر في نظرية تضمن بساطة التحقق من أرقام المرشحين.
الخلفية النظرية
لفهم كيفية إنشاء أرقام أولية مضمونة ، تحتاج إلى الغوص في القليل من الرياضيات. لكن لا تشعر بالقلق ، فالرياضيات موجودة هنا في مستوى الصف الخامس.
للتأكد من اكتمالها ، يوصى بالبحث
هنا للحصول على تفاصيل حول ماهية الفترة وسلسلة المخلفات. حسنًا ، قل لفترة وجيزة أن عددًا من المخلفات يتم تشكيله عن طريق قسمة "الزاوية" (طريقة معروفة لأي طالب) في الوحدة على العدد الذي تم اختياره للدراسة. في الوقت نفسه ، في كل خطوة ، يظهر اختلاف بين الرقم الأعلى ، مع إضافة صفر إليه ، ومنتج الرقم قيد التحقيق بقيمة من 0 إلى 9 (لنظام الأرقام العشرية) - هذا هو الباقي. ولكن هناك العديد من الخطوات في القسمة على "الزاوية" ، وبالتالي هناك أيضًا العديد من الوحدات البنائية ، وهي معًا تشكل سلسلة من الوحدات البنائية التي تتكرر فيها نفس مجموعة الأرقام عددًا غير محدود من المرات. علامة بداية دورة جديدة هي المتبقية تساوي واحد. مقدار المتبقي بين الوحدات هو طول الفترة (أو الدورة). هذا ، في الواقع ، كل شيء ، لكن من المفيد أيضًا فهم أن هذه الطريقة لبناء سلسلة من الأرصدة يمكن تطبيقها باستخدام أي نظام أرقام ، وعلى وجه الخصوص ، سيتم استخدام النظام ذي القاعدة 2 (بدلاً من 10 ، كما هو معتاد في المدرسة). عند استخدام أنظمة الأرقام الأخرى ، يتم الحفاظ على جميع القواعد ، لكن عدد أشكال المنتج في كل خطوة سيكون مختلفًا ، ويساوي b (من الأساس) ، أي قاعدة نظام الأرقام.
لذلك ، نعلم من الأرقام الموضحة سابقًا أن الأرقام المركبة تعطي دائمًا فترات قصيرة نسبيًا ولا تتضمن عددًا من القيم "المحظورة". عند معرفة عامل رقم مركب ، من السهل حساب عدد القيم التي يجب أن تكون غائبة في عدد من البقايا التي تشكل فترة رقم معين. لن تحتوي سلسلة من العناصر المتبقية على عوامل وجميع الأرقام التي تمثل مضاعفات هذه العوامل إذا كانت السلسلة نفسها مبنية على أساس نظام الأرقام الذي لا يتعدى أي من المقسومات (أي ، لا يتم تقسيم الأساس على مقسومات العدد). على سبيل المثال ، إذا كان هناك عاملان فقط ، فسيتم تحديد عدد البقايا المتعددة بواسطة الصيغة
م=أ+ب−2دولا حيث
مدولا - عدد المخلفات المتعددة ،
دولا و
ب هي العوامل التي تشكل عدد مركب لدينا. معرفة عدد المخلفات "المحظورة" ، من السهل حساب أن سلسلة من المخلفات أطول من نصف القيمة
N−1 سيكون لها طول يساوي
L=N−1−(a+b−2)=N−a−b+1 . وهذا هو ، مثل هذه السلسلة سوف تكون على
a+b−2 أقصر من السلسلة التي ستتحول إذا كان الرقم المحدد أوليًا. هذا ما يفسر لماذا جميع الأرقام مع فترة مساوية لكامل الفترة (أي
N−1 ) ، اتضح أنه بسيط - إذا تم استبعاد عنصر واحد على الأقل (وهو "محظور") من تسلسل المخلفات ، فإن المدة تصبح أقل
N−1 . نتيجة لوجود مثل هذا الانتظام ، نلاحظ إمكانية تشغيل جميع اختبارات الاحتمالات هذه ، والتي تتحقق اليوم من بساطة الرقم. هذه الاختبارات حساب القيم في سلسلة من الأرصدة لكل موقف.
N−1 أو
(N−1)/2 ، وإذا كانت القيم متساوية
1 أو
N−1 ، فمن المحتمل جدًا أن يكون الرقم أوليًا. لماذا فقط مع احتمال كبير ، وغير مضمونة؟ لأنه لا يتم احتساب فترة الاختبارات الاحتمالية ، ولكن بين المواقف
N−1 و
(N−1)/2 قد يكون هناك المزيد من الوحدات ، مما يعني عدم المساواة في الفترة إلى القيمة
N−1 ولكن إذا كانت الفترة ليست متساوية
N−1 ، ثم قد يكون الرقم مركب. علاوة على ذلك ، فإن عدم المساواة في حد ذاته ليس حرجًا ، وهناك شيء آخر مهم - الأرقام البسيطة الزائفة يمكن أن تعطي مثل هذا الترتيب من الوحدات. من بين الأرقام التي تم التحقق منها من خلال مثل هذا الاختبار ، يمكنك العثور على الأرقام البسيطة الزائفة المركبة والتي تساعد المتسللين الذين يسرقون أموالك. بعد كل شيء ، ما هي المقسومات على هذه الأرقام المركبة؟ قد تكون صغيرة بما يكفي للمهاجم لفتح تبادل بيانات مشفر بسهولة.
تذكر الآن لماذا قد تظهر الأرقام الزائفة الأولية على الإطلاق. هذه الأرقام لها فترات قصيرة تتكرر عدة مرات خلال الفترة الكاملة.
N−1 لذلك ، يمكن أن "يصلح" في بعض الأحيان ويصلح في عدد كامل من المرات في فترة كاملة. لذلك ، على سبيل المثال ، يحتوي الرقم 25 على فترة 4 لنظام الأرقام مع القاعدة 7.
N−1 عن 25 من 24 ، حاول القسمة: 24/4 = 6. وهذا هو ، وضعت هذه الفترة عدد صحيح عدد المرات في فترة كاملة. يمكن التحقق من هذه الحقيقة من خلال الصيغة المذكورة أعلاه لتقصير الفترة ، ولكن مع الأخذ في الاعتبار حقيقة أن أ و ب هي نفسها في هذه الحالة. ستكون المدة القصوى الممكنة 24-4 = 20 ، هنا 24 هو العدد الإجمالي للمخلفات ، 4 هو عدد الوحدات المتبقية التي هي مضاعفات 5. لكن المدة ليست دائمًا الحد الأقصى ، ويمكن الحصول على جميع الخيارات الأخرى بقسمة الفترة القصوى تمامًا. 20 مقسوم على 2،4،5،10 ، وفقط بتقسيم 20 على رقم من القائمة أعلاه ، نحصل على فترة 4 في الطول ، والتي تعطينا في نهاية الفترة كاملة
N−1 الوحدة. وعند التحقق من البساطة ، يتم التحقق فقط من القيم في الموضع
N−1 وهذا هو ، القيمة الأخيرة في الفترة الكاملة. ولعدد 25 يساوي 1 ، مما يدل على بساطة الرقم. على الرغم من أنه في الحقيقة علامة واضحة على البساطة ، إلا أن هذا هو الحال بالنسبة لجميع قواعد أنظمة الأرقام
N ، القيمة الأخيرة في الفترة الكاملة تساوي واحد. ولكن لا توجد وسيلة للتحقق من جميع أنظمة الأرقام بحثًا عن أعداد كبيرة ، لذلك تظهر الأرقام البسيطة الزائفة التي يتم استخدامها في بعض الأحيان حتى في التشفير ، مما يزيد من ضعف مواردنا المالية.
كيف يمكن القضاء على تأثير الأعداد الزائفة؟ من حيث المبدأ ، الأمر بسيط - يمكنك التحقق من الفترات الزمنية لجميع أنظمة الأرقام ، ولكن بعد هذه العملية للحصول على أعداد كبيرة لن يكون هناك وقت كافٍ. لذلك ، سوف نذهب في الاتجاه الآخر. والمسار بسيط أيضًا (بالمعنى الحرفي - يستخدم الأعداد الأولية الأخرى). لقد رأينا أن الفترات القصيرة يمكن أن تناسب الفترة الكاملة عددًا صحيحًا من المرات ، وهذا يعطينا أرقامًا بسيطة الزائفة. ولكن ما الذي يمنعنا من أخذ وإلغاء هذه الاثنين؟ نعم ، بشكل عام ، لا شيء يمنع.
لفترات قصيرة ، فترة كاملة (
N−1 ) يجب تقسيمها إلى العديد من المقسومات. لذلك بالنسبة للرقم 25 ، يتم تقسيم الفترة الكاملة 24 إلى 2 ، 3 ، 4 ، 6 ، 8 ، 12. هناك العديد من الاحتمالات لاختراق الأراضي المحمية بأرقام بسيطة زائفة. لذلك نحن بحاجة فقط إلى أخذ البرايم كفترة كاملة ، لأنها لا تنقسم إلى أي شيء على الإطلاق ، وبالتالي تنقذنا تلقائيًا من عنصر العدو. صحيح ، هناك واحد "لكن" - نحتاج إلى أعداد أولية ، ومن المعروف أنها غريبة (باستثناء استثناء واحد - 2) ، وهذا يعني إذا
N−1 بسيطة ثم نفسها
N لا يمكن أن تكون بسيطة بعد الآن. لذلك ، سيتعين علينا الاعتراف بإمكانية ظهور فترات غير كاملة. لماذا هذا سيء؟ كما رأينا أعلاه ، فإن الفترة الكاملة تضمن بساطة الرقم ، لكننا لم نثبت بعد فترة غير كاملة. لذلك نحن بحاجة لإثبات هذه اللحظة.
والدليل بسيط جدا - للمجمع
N فترة في الطول
N−1 مرتين ، تم الحصول عليها في نظام الأرقام الذي ليس من مضاعفات المقسوم على N ، له صفين فقط من المخلفات ، ويجب ألا يحتوي أي منهما على أرقام مضاعفة للمقسومات
N ("ممنوع" الأرقام). إذا تم استبعاد عنصر واحد على الأقل من صف واحد من الوحدات البنائية ، فإن العنصر الثاني ينخفض تلقائيًا بنفس المقدار (بعد كل شيء ، صف واحد يساوي عنصر آخر مضروبًا في أي رقم غير موجود في الأول). لذلك إذا كان هناك المقسومات في العدد
N ، نحصل على إجمالي طول أقصر من فترتين مع جميع الأرصدة "المسموح بها" من قيمة الفترة الكاملة وبالتالي نقل الوحدة من مكانها في نهاية الفترة الكاملة ، وبالتالي ضمان عدم وجود بساطة زائفة. ولكن هل يمكن أن يكون عدد الباقي المقسوم المتعدد مثل إعطاء نصف أو ثلث الفترة بالكامل؟ في الواقع ، سوف نتلقى ، على سبيل المثال ، ثلثي الأرصدة "المسموح بها" (صفين) وثلث الأرصدة "المحظورة" ، وإجمالا - الفترة الكاملة. ولكن للحصول على الثلث نحتاج إلى ضمان قسمة الفترة الكاملة (
N−1 ) بحلول 3 ، والتي يمكننا استبعادها بسهولة - نأخذ رقمًا أوليًا ، واضربه برقمين ونضيف واحدًا إلى النتيجة - فويلا ، لدينا رقم مضمون باستثناء البساطة الزائفة. لا يمكن أن يساوي عدد المقسومات المقسومة على المقسومين عليه ثلث الفترة الكاملة ، لأنه لا يمكن تقسيمه على ثلاث فترات كاملة. لا يزال هناك خيار مع نصف الباقي الذي يمثل مضاعفات المقسومات
N . يتم التخلص من هذا الخيار أكثر صعوبة بعض الشيء ، لذلك سيكون هناك انحدار طفيف أدناه.
حساب الفترة ، أو جميع الأرقام - أطفال مرسين
يمكن حساب فترة أي رقم. في أبسط الحالات ، يتم الحساب عن طريق تقسيم الزاوية ببساطة
1/N حتى نلتقي مع باقي يساوي واحد (في نظام الأرقام ، وليس مضاعفات المقسومات
N ). لكن بالنسبة للأعداد الكبيرة ، هذا طويل بشكل غير واقعي. لذلك ، هناك حاجة لاشتقاق صيغة لحساب الفترة. وتوجد مثل هذه الصيغة ، ولكن ليس في شكلها المثالي ، عندما يكون لدينا رقم في المدخلات وفترة في الإخراج. الصيغة هي:
N= fracbm+n+1−1bn+k
هنا
N - عدد التحقيق ،
ب - أساس نظام الأرقام المستخدم (القاعدة) ،
مدولا - أقصى درجة
ب حيث تكون نتيجة التسوية أقل
N (بمعنى آخر ، مؤشر المستوى الأعلى في
N في نظام الأرقام
ب )
ن - المسافة من اليسار إلى اليمين في سلسلة من المخلفات من الفهرس
م+1دولا (يساوي عدد البتات في
N ) إلى واحد ،
ك هو بعض معامل عدد صحيح.
إخراج الصيغة
من خلال تعريف الصيغة ، فمن الواضح أن
(1) bm+1−N=x وهذا هو ، الدرجة الأولى
ب وهو أكبر
N يسمح لك بطرح
N والحصول على بعض الاختلاف في النموذج
x . كما أنه يتبع التعريف الذي
(2) x∗bn−k∗N=1 هنا
ك — .
(1) bn x∗bn (2) ,
kN+1 ,
bm+n+1=N∗bn+kN+1=N∗(bn+k)+1=>N=bm+n+1−1bn+k .
, . —
ك , . — , . , , - . — . , ,
2n−1 . ( 2, ). , , 2, .
, , (
). —
1/N . ,
1/N ,
ن , —
bn+1−1b−1 ,
2n+11 .
.
, . , . , ,
N ,
N , . , , N
N .
N , ,
N ,
N , .
, , , . . , , . — . —
2 (N−1)/2 .
2 و
(N−1)/2 .
2 2 , .
2 (N−1)/2 ,
(N−1)/2 — , . —
(N−1)/2 . , —
(N−1)/2+1 . , —
(N−1)2/4+(N−1)+1=(N2−2N+1+4N)/4=(N2+2N+1)/4 ,
N ,
N .
(N2+2N+1)/4≤N=>N2−2N+1≤0 .
N=1 وبالتالي ، بالنسبة لجميع الأرقام التي تم إنشاؤها بهذه الطريقة ، يتم استبعاد البساطة الزائفة إذا كان الرقم الناتج أكبر من
1 . حسنًا ، بالنسبة للأعداد الصغيرة ، يمكننا اختبار البساطة حتى في العقل.
يوجد الآن خياران - الرقم الجديد هو رقم أولي ، وهو ما نحتاجه ، أو هذا رقم مركب ومن ثم لا تناسب فترته عددًا صحيحًا من المرات في فترة كاملة ، وبالتالي يمكن التحقق من هذا الرقم بسهولة عن طريق حساب القيمة الأخيرة في سلسلة كاملة من البقايا. بمعنى أنه يمكن التحقق بسهولة من العدد المبني من خلال اختبارات البساطة الاحتمالية القياسية ، والأمر المهم هو أن نتيجة الاختبار لن تكون إحتمالية ولكنها مضمونة. لذا ، في النهاية ، تخلصنا من لعنة البساطة الزائفة ، التي تمارس ضغوطًا على جميع الاختبارات الاحتمالية.
ولكن بالطبع ، ستكون الحياة عسلًا إذا تم حل جميع المشكلات بهذه البساطة. القضاء على البساطة الزائفة ، ونحن لم تستبعد الأرقام التي لم تكن مخفية عن أي شخص والتي ليست ملثمين تحت أي شيء. ومعهم هناك مشكلة أخرى - في الوقت الحالي ، لا يمكننا التحقق من مصطلح تعسفي في تسلسل المخلفات إلا من خلال رفع إلى السلطة ومن ثم أخذ الباقي. لكن هذه الطريقة بطيئة جدا. بتعبير أدق ، إنه سريع بما فيه الكفاية للأرقام المستخدمة في التشفير ، لكنه غير مناسب للعثور على أعداد كبيرة في المنزل ، لأنه يتطلب سنوات عديدة من حساب الكمبيوتر المنزلي العادي ، والذي لا يسمح لنا بالحصول على 400 ألف دولار (كما هو موضح
هنا ).
ومع ذلك ، فكل شيء تقريبًا جاهز لحساب أعداد التشفير الأولية. على الرغم من أن صديقنا القديم يبقى - التطرف. يسأل - إذا كنت تستطيع استخدام فترة
(N−1)/2 ما الذي يمنع استخدام الفترات
(N−1)/4،(N−1)/6،(N−1)/8 وهلم جرا؟ واتضح أنه مع العناية الواجبة - لا شيء يمنع!
بنفس الطريقة كما هو الحال مع هذه الفترة
(N−1)/2 لهذه الفترة
(N−1)/4 نحن قادرون على وضع حد أدنى عن طريق ضرب رأس ب 4 وإضافة 1. ثم نحن نضمن أنفسنا من البساطة الزائفة مع فترات أقل من
(N−1)/4 . لذلك ، يبقى النظر في إمكانية حدوث حوادث بسيطة الزائفة مع مضاعف فترة 4 ، 3 ، 2 (1 مستبعد للمكونات ، كما هو موضح أعلاه). من صيغة حساب الرقم حسب الفترة ، نرى أن فترة توزيع الأرباح يجب أن تكون مساوية لأقل مضاعف مشترك في مقسوماتها ، مما يعني أن الفترة المحتملة للرقم
N يجب ألا يناسب عددًا صحيحًا عدد المرات في
N−1 (وإلا لن يكون هناك بساطة زائفة) ، ولكن تحتوي أيضًا على عدد صحيح لفترات الفواصل. وبالتالي ، فإن عدد المقسومات المحتملة لعدد أولي زائف محدود بشدة. منذ فترة أي عدد لا يمكن أن يكون أطول
N−1 ، ثم لالمقسوم ممكن
N إعطاء نتيجة للقسمة 3 ، لا يمكن أن تكون الفترة أطول

بالإضافة إلى ذلك ، نأخذ في الاعتبار أن فترة 3 هي 2.
N/3دولا يجب أن يكون غريباً لأنه غريب
N . يتضح مما سبق أن الفترة الزوجية N / 3-1 هي أصغر المضاعف المشترك مع فترة 2 من الرقم 3 ، مما يعني أن الفترة المحتملة لنطاق N البسيط المزيف يجب أن تكون مساوية لفترة الرقم
N/3دولا . في المجموع هناك قيمة واحدة من هذه الفترة
N الذي البساطة الزائفة ممكن ، هذا
(N−1)/4 . لقيم أخرى ، إما
N/3دولا القليل جدا أو فترة لها (ومعها الفترة
N ) سوف تذهب إلى المنطقة المحرمة أدناه
(N−1)/4 . نفس القصة مع أرقام غريبة ، أقل
N/3دولا لكن فتراتهم لا يمكن أن تكون أطول
(N−1)/4 ، وبالتالي يتم استبعاد كل منهم ببساطة من النظر. الآن تبين ذلك
N/3دولا لا يمكن أن يكون لها فترة
(N−1)/4 ، مما يعني أنه لا يمكن تقسيم الفترة بأكملها بالكامل. أولا ، تذكر الصيغة
م=أ+ب−2دولا ، والذي يعطينا عدد من المقسومات المقسومة متعددة لعدد قابل للقسمة فقط من قبل
دولا و
ب . في حالتنا
N من المفترض أن تكون مقسمة إلى
N/3دولا وبحلول 3 ، يتم استبعاد جميع المقسومات الأخرى ، لذلك نحصل على -
m=N/3+3−2=N/3+1 . الآن من الفترة الكاملة تحتاج إلى طرح القيم "المحظورة" ، والتي ستكون
N/3+1 ، ثم قسّم على 4. نحصل على الفترة الممكنة للعمل
3∗N/3دولا :
p=(N−1−N/3−1)/4=N/6−1/2 هذا أقل
(N−1)/4 ، وهذا هو ، فترة الطول
(N−1)/4 مستحيل بسبب الحاجة إلى مراعاة المخلفات "المحظورة" ، والتي تأخذ جميع الفترات الزائفة البسيطة إلى المنطقة المحرمة (أقل
(N−1)/4 ). هذا يعني أن هذا الموقف يضمن لنا أن الرقم الذي تم إنشاؤه ليس بسيطًا ، وبالتالي يمكننا أن نتأكد مرة أخرى من نتائج اختبار البساطة الاحتمالي اللاحق.
وبالمثل ، ومع مراعاة قسمة الفترة الكاملة ، يمكن للمرء الحصول على نفس النتائج للقيم الأخرى. لكن إذا أردنا الحصول على أعداد تشفير أولية بهذه الطريقة ، فعندئذٍ تضاعف بمقدار 2،4،6 ، سنزيد حجم الرقم لفترة طويلة جدًا ، لذلك فمن المنطقي أن ننظر في اتجاه خيار آخر - ضرب عددين أوليين. إذا ضاعفنا واحدًا تلو الآخر ، فسوف نحصل على رقم فردي ، لذا تأكد من الضرب في 2 للحصول على فترة كاملة ورقم مرشح فردي في المقام الأول. سيتم تقسيم الفترة الكاملة في هذه الحالة إلى
2،a،b،2a،2b،ab حيث
دولا و
ب هي الأعداد الأولية. نحن الآن بحاجة إلى إثبات أن الفترات المشار إليها لن تعطي البساطة الزائفة ، أو لإيجاد علامات تحذرنا من وجود البساطة الزائفة. فقط لاحظ أنه إذا كانت الفترة تساوي
2∗a∗b ، ثم سيكون الرقم أولي (كما هو موضح أعلاه). كما هو موضح أعلاه أن رقم نصف الفترة لا يمكن أن يكون بسيطًا ، وبالتالي طوله
ab يمكن استبعادها. على الرغم من الاكتمال ، يمكنك التحقق من هذه الفترة
ab طرق بديلة. لذلك إذا كانت الفترة
ab ، ثم بالنظر إلى ذلك
دولا و
ب بسيط ، يصبح من الواضح أن المضاعفات الأقل شيوعا لفترات المقسوم عليها
N يمكن أن تكون متساوية فقط
ab ، في حين أن فترات الفواصل يمكن أن تكون مساوية لأي منهما
ab كلاهما ، أو واحد
دولا وآخر
ب . لأن الفترة دائما أقل من العدد نفسه ، إذن
(ab+x)∗(ab+y) من الواضح أنه سيكون هناك المزيد

. وبالتالي ، البساطة الزائفة ليست ممكنة مع هذه الفترة. لذلك ، يبقى للتحقق من الفترات

. 2 أقل من الحد الأدنى لفترة الفترة الممكنة لجميع الأرقام ، أكثر من 3 ، وبالتالي فإننا نستبعد هذه الفترة. لنفترض الآن أن الرقم المقسوم مقسوم على
مدولا و
ن ، ثم مع المساواة في هذه الفترة
N معنى
دولا ، وسوف تكون الفترات أيضا متساوية
دولا لأن هذا هو المضاعف الوحيد الأقل شيوعًا لرقمين ، لأن
دولا لا تنقسم إلى أي شيء. يتبع ذلك
(a+x)∗(a+y)=N=ab∗2+1 حيث
a+x=m - أول عامل ممكن مع فترة
دولا و
a+y=n - الثانية. التالي:
a2+ax+ay+xy=2ab+1=>a2+ax+ay+(ka+r)=2ab+1=>a+x+y+k=(2ab+1−r)/a . هنا
ص يمكن أن يكون مساويا لواحد فقط ، وإلا فإن العدد الصحيح لن يعمل على اليسار. ثم:
x+y+k=2b−a ، والذي يتبع ذلك إذا
a geq2b ، ثم الزائفة بسيطة مع فترة
دولا لا يمكن أن يكون. يبقى للتحقق من البساطة الزائفة في
a<2b ، والتي يمكن القيام بها عن طريق التحقق من القيم في سلسلة من المتبقية في الموضع
دولا إذا كان هناك 1 ، فيمكن أن يكون هذا الرقم بسيطًا جدًا ويجب استبعاده من عمليات أخرى. المنطق ل
ب مماثل تمامًا ، مما يعني الحاجة إلى التحقق من مساواة الوحدة وما تبقى منها
b<2a .
للفترة

لدينا:
4a2+2ax+2ay+xy=2ab+1=>4a2+2ax+2ay+(ka+r)=2ab+1=>4a+2x+2y+k=(2ab+1−r)/a=>2x+2y+k=2b−4a . لقد حصلنا على ذلك من أجل
4a geq2b (أو ما يعادلها -
2a geqb ) مرة أخرى ، لا يمكن أن يكون هناك بساطة ، ولكن إذا
2a<b ، فأنت بحاجة إلى التحقق من التوازن على الموقف

. وبالمثل ل
ب - تحقق مما إذا
2b<a . في المجموع ، نحصل عليه ل
دولا ومن أجل
ب الحاجة إلى التحقق فقط من البنود

و

لأن الفترات
دولا و
ب سوف أكرر فقط في الموقف

و

. يتم إجراء التحقق فقط وفقًا للشروط المذكورة أعلاه ، مما يؤدي إلى مضاعفة العملية تقريبًا عند التحقق من القيم الكبيرة
دولا أو
ب ، لأنهم يجب عليهم
a geq2b مع مخطط الجيل بسيط أدناه ، وسيتم التحقق من القيم المنخفضة بسرعة كبيرة بسبب حجمها الصغير.
وهكذا ، فقد تم عرض الأسس النظرية أعلاه لتكون قادرة على توليد أعداد أولية مضمونة لمناطق حرجة مثل التشفير.
بالإضافة إلى ذلك ، يتم فتح وسيلة للتحقق من بساطة الرقم التعسفي ، شريطة أن يتم العثور على المقسومات من فترة كاملة (
N−1 ). لذلك ، بالنسبة للعدادات الأولية <126،000،000 ، فإن عدد "الأعداد الأولية المضروبة" التي تنتمي إلى الفئة هو 676625 ، مع إجمالي عدد الأعداد الأولية 7163812 ، مما يعطينا أقل قليلاً من 9.5٪. بالنسبة للقرود الأولية التي تصل إلى مليار ، لدينا 3.49٪ ينتمون إلى الفئة 2p + 1 ، و 1.8116٪ من الفئة 4p + 1 ، و 2.4709٪ من الفئة 6p + 1 ، و 7.7746٪ فقط ، حيث تمثل p عددًا أوليًا. صحيح ، تجدر الإشارة إلى أن تحلل الفترة الكاملة للأعداد الكبيرة أمر صعب للغاية. في هذه الحالة ، يمكنك تقديم فحص متكرر ، مما سيزيد بشكل طفيف من حجم الأرقام المتاحة للفحص ، ولكن في نفس الوقت يقلل بشكل كبير نسبة الأرقام التي تجتاز هذا الفحص ، لأنه إذا تم أخذ معامل تحديد عضوية فئات الأعداد الأولية المتساوية يساوي 0.2 ، فعندئذٍ في الاختيار الثاني ، لديك فقط 0.04 ، أو 4 ٪ من إجمالي عدد الأعداد الأولية. ومع ذلك ، في بعض الحالات ، يمكن أن يكون هذا النهج مفيدًا.
نتائج عملية
المولد نفسه ، بالطبع ، تم كتابته واختباره ، لأن التعقيد هناك ضئيل للغاية. أثناء الفحص ، اتضح أن الخوارزمية التالية ستعمل بكامل طاقتها:
نحصل ، على سبيل المثال ، على 1000 الأولية الأولية ، والتي يمكن إنشاؤها باستخدام غربال إراتوستينس أو تحميلها ببساطة
من هنا . ثم نقوم بضرب كل قيمة مع كل قيمة متبقية ولا ننسى الضرب في اثنين ، ثم نضيف قيمة واحدة. غالبًا ما يتم تقسيم المرشح الناتج على 3 ، لأن الأعداد الأولية لها ميزة محددة مشابهة لوجود شحنة على الجزيئات في الفيزياء. يتم صد الأشخاص البسطاء الذين يحملون نفس "التهمة" ، ويتم جذبهم بأشخاص مختلفين. في هذه الحالة ، تكون "الشحنة" هي الباقي للقسمة على 3. وهذا هو ، إذا كان ما تبقى من القسمة على 3 هو نفسه بالنسبة لكل من الأعداد الأولية ، فلن تعمل البرايم الجديد ، لأنه سيتم تقسيمها على 3. وإذا كان الباقي مختلفًا ، فيمكننا الحصول على الصحيح مرشح بسيط. علاوة على ذلك ، يتم "مزامنة" جميع الأشياء البسيطة التي تم الحصول عليها عن طريق الضرب ، أي أنها تتلقى نفس النسبة المتبقية تساوي 2. لذلك ، لا فائدة من ضربهم بأنفسهم مرة أخرى. لذا ، للحصول على أعداد أولية جديدة ، نحتاج إلى تصفية ذلك الجزء من 1000 الأولي الذي تكون معاملته الثلاثية (ما تبقى من القسمة على 3) هي 1. وبالتالي ، بعد الضرب الأول للجميع مع الجميع ، نشأنا في عدد الأرقام التي لا معنى لها للتكاثر مع بعضها البعض ، لذلك ، لزيادة الحجم (إلى ذلك المستخدم في التشفير) ، يجب علينا مرارًا وتكرارًا مضاعفة الأعداد الأولية التي تم الحصول عليها بالأرقام "المشحونة بشكل معاكس" المحددة مسبقًا. بعد ضرب الوحدة وإضافتها ، نجري عمليات فحص وفقًا لمعيار إمكانية البساطة الزائفة وإذا تم استيفاء المعيار ، فإننا نتحقق من الباقي في الموضع 2 أ لكل مرشح. إذا كان هناك 1 ، فسيتم رفض المرشح. بعد ذلك ، يتم فحص كل مرشح من خلال الاختبار الاحتمالي المعتاد ، أي يتم حساب القيمة في سلسلة المتبقيات في الموضع
(N−1)/2 إذا كان 1 أو
N−1 ، ثم أمامنا هو عدد أولي مضمون.
عند أداء الجيل ، يجب أن يؤخذ في الاعتبار أنه في كل تكرار ، يتم الحصول على زيادة في عدد الأعداد الأولية المولدة ، أي أن معامل الضرب لـ 1000 من الأعداد الأولية الأولية هو أكثر بكثير من الوحدة. لذلك ، للحصول على أعداد تشفير أولية ، من الضروري الحد من التوليد ، وإلا سيستغرق الأمر وقتًا طويلاً للغاية ، وقد لا توجد ذاكرة كافية. في نفس الوقت ، يجب ألا تقلل المجموعة الأولية من المجموعات البسيطة ، لأن الجيل يجب أن يكون عشوائيًا قدر الإمكان ، حتى لا يعرف المهاجم القيم الناتجة الناتجة عن ذلك. لهذا ، من الضروري تطبيق آلية لقطع فروع شجرة التوليد ، والتي تسمح في كل مرة بالحصول على فروع بسيطة فريدة من نوعها بعيدة عن تلك التي تم إنشاؤها مسبقًا. وبالطبع ، فإن قطع الفائض يسرع العملية بشكل كبير.
يعتمد وقت تنفيذ الاختبار على عدد المرشحين الذين تم إنشاؤها. كل من المرشحين يجتاز اختبار الاحتمال ، والذي يبطئ الجيل إلى أقصى حد. في الاختبار يعمل للحصول على بضع مئات بسيطة في النطاق
2900 -
21200 قضيت 5 إلى 20 دقيقة. يتم تفسير هذا الاختلاف الزمني بطرق مختلفة تمر بها الخوارزمية في شجرة التوليد. في البداية ، يقتصر التوليد على حوالي 10 أرقام ، لكن مع اقتراب حجم التشفير ، يتلاشى التوليد نظرًا لانخفاض كبير في معامل الضرب مع زيادة العدد. لذلك ، من الضروري زيادة عدد الأعداد الأولية المتوسطة ، ولكن من الصعب تحديد مدى أهميتها ، وبالتالي يتم استخدام زيادة بسيطة في الكمية المسموح بها بعامل اثنين للحد منها بزيادة حجم العدد وتجاوز العتبة التقريبية. نتيجة لذلك ، في حدود القيود ، يمكن أن يطفو عدد الأشكال البسيطة الجديدة وبذلك يحدث فرقًا كبيرًا في إجمالي وقت التوليد.
فيما يلي نص إجراء Java الذي ينشئ الأرقام الأولية. بطبيعة الحال ، لا يلبي متطلبات التشفير التي تتجاوز رمز البرنامج وتتعلق بشكل رئيسي بالمسائل التنظيمية. في جزء البرنامج المحض ، لا يقوم الإجراء بتطبيق آلية تقليم فروع شجرة التوليد ، باستثناء أبسط قيود. ومع ذلك ، وكمثال على تنفيذ خوارزمية التوليد ، يمكن للبرنامج المساعدة في شيء ما.
معلمات الإدخال هي القائمة الأولية البسيطة و PrintWriter لحفظ النتيجة في ملف. بعد الانتهاء من الخوارزمية ، سيحتوي الملف على جميع منتجات الأعداد الأولية التي تم إنشاؤها مع تلك الأرقام الأولية التي تحتوي على وحدة من ثلاثة يساوي واحد. يمكن التحقق من النتيجة بمساعدة الخدمات عبر الإنترنت التي تنفذ معاملات الأرقام ، ولكن يجب أن يفهم أنه يمكنهم استخدام اختبار احتمالي للبساطة قبل إجراء التوصيف ، وبالتالي ، للتحقق من النهج المقترح ، تصبح عديمة الفائدة (لأن جميع الأرقام يتم فحصها بالفعل بواسطة اختبار احتمالي). لكن عددًا منها يبدأ على الفور في تحويل الرقم المقترح إلى عوامل ، يمكن لهذه المواقع أن تغرس بعض الثقة الإضافية في صحة الطريقة المقترحة.
public static void generatePrimes(List<Integer> primes, PrintWriter pw) { List<BigInteger> mod3_1 = new ArrayList<BigInteger>(); List<BigInteger> l = new ArrayList<BigInteger>(); BigInteger three=BigInteger.valueOf(3), two=BigInteger.valueOf(2); for (int k=0;k<primes.size()-1;k++) { BigInteger seed=BigInteger.valueOf(primes.get(k)); BigInteger s2=seed.shiftLeft(1); BigInteger r0=seed.remainder(three); if (r0.intValue()==1) mod3_1.add(seed); for (int i=k+1;i<primes.size();i++) { BigInteger p=BigInteger.valueOf(primes.get(i)); BigInteger r=p.remainder(three); if (r.intValue()==r0.intValue()) continue;
حسنًا ، والآن بعد أن تعرف جيدًا (تقريبًا ، تقريبًا) كل شيء عن توليد الأعداد الأولية ، ربما تتجاوز اهتماماتك التشفير وحده وستصبح مثيرة للاهتمام بالنسبة لك لدراسة نظرية الأعداد ، لأنه ، كما ذكر أعلاه ، متاح لطلاب الصف الخامس ، ولكن في الوقت نفسه ، يسمح لك أيضًا بالبحث عن الماس الحقيقي بشكل مستقل دون انتظار مساعدة علماء الرياضيات الجادين.