خوارزمية شور
في وحدة Qiskit in Classrooms هذه، يجب أن يكون لدى الطلاب بيئة Python تعمل بشكل صحيح مع تثبيت الحزم التالية:
qiskitالإصدار v2.1.0 أو أحدثqiskit-ibm-runtimeالإصدار v0.40.1 أو أحدثqiskit-aerالإصدار v0.17.0 أو أحدثqiskit.visualizationnumpypylatexenc
لإعداد هذه الحزم وتثبيتها، راجع دليل تثبيت Qiskit. لتشغيل المهام على حواسيب كمومية حقيقية، يحتاج الطلاب إلى إنشاء حساب على IBM Quantum® باتباع الخطوات الواردة في دليل إعداد حسابك على IBM Cloud.
تم اختبار هذه الوحدة واستغرقت ثلاث ثوانٍ من وقت وحدة معالجة الكم (QPU). هذا تقدير فقط، وقد يختلف الاستخدام الفعلي.
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'
مقدمة
في أوائل تسعينيات القرن الماضي، كان هناك حماس متزايد حول إمكانية استخدام الحواسيب الكمومية لحل مسائل كانت صعبة على الحواسيب الكلاسيكية. ابتكر عدد من علماء الحاسوب الموهوبين خوارزميات أظهرت قوة الحوسبة الكمومية في مسائل متخصصة ومحدودة، لكن لم يجد أحد بعد "التطبيق الرائد" للحوسبة الكمومية الذي من شأنه إحداث ثورة في هذا المجال. وذلك حتى عام 1994، حين توصّل بيتر شور إلى ما يُعرف اليوم بخوارزمية شور لتحليل الأعداد الكبيرة.
كان من المعروف في ذلك الوقت أن إيجاد العوامل الأولية لعدد كبير كان بالغ الصعوبة على الحاسوب الكلاسيكي. بل إن بروتوكولات الأمان على الإنترنت كانت تعتمد على هذه الصعوبة. وجد شور طريقة للعثور على هذه العوامل بكفاءة أسرع بشكل أُسّي، وذلك بتحميل بعض الخطوات الأكثر تعقيدًا على حاسوب كمومي نظري مستقبلي.
في هذه الوحدة، سنستكشف خوارزمية شور. أولًا، سنوفر مزيدًا من السياق للخوارزمية، بصياغة رسمية للمسألة التي تحلّها وشرح أهميتها للأمن السيبراني. بعد ذلك، سنقدّم مقدمة عن الحساب المعياري وكيفية تطبيقه على مسألة التحليل إلى عوامل، موضّحين كيف يمكن اختزال التحليل إلى عوامل في مسألة أخرى تُسمى "إيجاد الرتبة". سنُظهر كيف يدخل تحويل فورييه الكمومي وتقدير الطور الكمومي اللذان تعلمناهما في وحدة سابقة، وكيفية استخدامهما لحل مسألة إيجاد الرتبة.
وأخيرًا، سنُشغّل خوارزمية شور على حاسوب كمومي حقيقي! لكن ضع في الاعتبار أن هذه الخوارزمية ستكون مفيدة حقًا فقط حين يتوفر حاسوب كمومي كبير ومتسامح مع الأخطاء، وهو أمر لا يزال على بُعد سنوات. لذا، سنحلّل عددًا صغيرًا فقط لإظهار طريقة عمل الخوارزمية.
مسألة التحليل إلى عوامل
الهدف من مسألة التحليل إلى عوامل هو إيجاد العوامل الأولية لعدد . بالنسبة لبعض الأعداد ، هذا أمر سهل نسبيًا. فمثلًا، إذا كان زوجيًا، فأحد عوامله الأولية سيكون 2. وإذا كان قوة أولية، أي لعدد أولي ما، فمن السهل نسبيًا إيجاد : نقترّب من الجذر للعدد ونبحث عن الأعداد الأولية القريبة التي قد تكون .
لكن تكمن صعوبة الحواسيب الكلاسيكية حين يكون فرديًا وليس قوة أولية. وهذا هو الحالة التي تتعامل معها خوارزمية شور. تجد الخوارزمية عاملين و بحيث يكون ، ويمكن تطبيقها بشكل تكراري حتى تصبح جميع العوامل أولية. في الأقسام التالية سنرى كيف يتم التعامل مع هذه المسألة.
الصلة بالأمن السيبراني
تم بناء كثير من المخططات التشفيرية على أساس أن تحليل الأعداد الكبيرة إلى عوامل أمر صعب، بما في ذلك مخطط يُستخدم شائعًا اليوم يُعرف بـ RSA. في RSA، يُنشأ م فتاح عام بضرب عددين أوليين كبيرين معًا للحصول على . بعد ذلك، يمكن لأي شخص استخدام هذا المفتاح العام لتشفير البيانات. لكن فقط من يملك المفتاح الخاص، وهو و، يستطيع فك تشفير تلك البيانات.
لو كان تحليل إلى عوامل أمرًا سهلًا، لتمكّن أي شخص من تحديد و وكسر التشفير. لكنه ليس كذلك. هذه مسألة صعبة للغاية واشتُهرت بذلك. في الواقع، لم يُعثر حتى الآن على العوامل الأولية لعدد يُسمى RSA1024، الذي يتكوّن من 1024 رقمًا ثنائيًا و309 رقمًا عشريًا، على الرغم من تقديم جائزة بقيمة $100,000 لتحليله منذ عام 1991.
حل شور
في عام 1994، أدرك بيتر شور أن حاسوبًا كموميًا يمكنه تحليل عدد كبير إلى عوامل بكفاءة أكبر بشكل أُسّي مقارنةً بالحاسوب الكلاسيكي. استندت فكرته على العلاقة بين مسألة التحليل هذه والحساب المعياري. سنستعرض مقدمة موجزة عن الحساب المعياري، ثم نرى كيف يمكن استخدامه لتحليل إلى عوامل.
الحساب المعياري
الحساب المعياري هو نظام عدّ دوري، بمعنى أن العدّ يبدأ بالطريقة المعتادة بالأعداد الصحيحة 0، 1، 2، إلخ، لكن عند نقطة معينة، بعد دورة ، يبدأ العدّ من جديد. لنرى كيف يعمل هذا بمثال. لنفرض أن الدورة هي 5. إذن، أثناء العدّ، بدلًا من الوصول إلى 5، نعود إلى 0:
هذا لأنه في عالم "modulo-5"، 5 يعادل 0. نقول إن . وفي الواقع، ستعادل جميع مضاعفات 5 القيمة .
اختبر فهمك
اقرأ السؤال/الأسئلة أدناه، فكّر في إجابتك، ثم اضغط على المثلث للاطلاع على الحل.
استخدم الحساب المعياري لحل المسألة التالية:
غادرت في رحلة قطار طويلة عبر القارات الساعة 8 صباحًا. مدة رحلة القطار 60 ساعة. ما الوقت حين تصل؟
الإجابة:
الدورة هي 24، إذ يحتوي اليوم على 24 ساعة. لذا يمكن كتابة المسألة بالحساب المعياري على النحو التالي:
إذن، ستصل إلى وجهتك الساعة 20:00، أو الساعة 8 مساءً.
و
من المفيد في الغالب تقديم مجموعتين، و. هي ببساطة مجموعة الأعداد الموجودة في عالم "modulo-". مثلًا، حين كنّا نعدّ modulo-5، ستكون المجموعة . مثال آخر: . يمكننا إجراء عمليتي الجمع والضرب (معياريًا بالنسبة لـ ) على عناصر ، ونتيجة كل من هاتين العمليتين تكون أيضًا عنصرًا في ، مما يجعل كيانًا رياضيًا يُسمى حلقة.
هناك مجموعة جزئية خاصة من تهمّنا بشكل خاص لخوارزمية شو ر. وهي مجموعة الأعداد في التي يكون القاسم المشترك الأكبر بين كل عنصر منها و يساوي 1، بحيث يكون كل عنصر "أوليًا مشتركًا" مع . إذا أخذنا هذه المجموعة مع عملية الضرب المعياري، فإنها تُشكّل كيانًا رياضيًا آخر يُسمى مجموعة. نسمّي هذه المجموعة . اتضح أنه مع (والمجموعات المنتهية بشكل عام)، إذا اخترنا أي عنصر وضربنا في نفسه بشكل متكرر، سنصل دائمًا في نهاية المطاف إلى العدد . أدنى عدد من المرات التي يجب فيها ضرب في نفسه للحصول على يُسمى رتبة . هذه الحقيقة ستكون بالغة الأهمية في نقاشنا حول كيفية تحليل الأعداد إلى عوامل فيما بعد.
اختبر فهمك
اقرأ السؤال/الأسئلة أدناه، فكّر في إجابتك، ثم اضغط على المثلث للاطلاع على الحل.
ما هي ؟
الإجابة:
استبعدنا الأعداد التالية:
ما هي رتبة كل عنصر من عناصر ؟
الإجابة:
الرتبة هي أصغر عدد بحيث يكون لكل عنصر .
لاحظ أنه على الرغم من أننا تمكّنا من إيجاد رتبة الأعداد في ، إلا أن هذا ليس مهمة سهلة بشكل عام لقيم الأكبر. هذا هو جوهر مسألة التحليل إلى عوامل وسبب حاجتنا إلى حاسوب كمومي. سنرى لماذا حين نتابع بقية المفكرة.
تطبيق الحساب المعياري على مسألة التحليل إلى عوامل
مفتاح إيجاد العاملين و بحيث يكون يعتمد على إيجاد عدد صحيح آخر بحيث
و
كيف يساعدنا إيجاد في إيجاد العاملين و؟ دعنا نستعرض المنطق الآن. بما أن ، فهذا يعني أن . بعبارة أخرى، هو مضاعف لـ . لذا، لعدد صحيح ما ،
يمكننا تحليل للحصول على:
من افتراضاتنا الأولية نعلم أن ، لذا لا يقسم بالتساوي على أو . فالعاملان الاثنان لـ ، وهما و، يجب أن يقسم كل منهما على و. إما أن يقسم و يقسم ، أو العكس. لذا، إذا حسبنا القاسم المشترك الأكبر (GCD) بين وكل من و، فسيعطينا ذلك العاملين و. حساب القاسم المشترك الأكبر بين عددين مهمة كلاسيكية سهلة يمكن إنجازها مثلًا باستخدام خوارزمية إقليدس.
اختبر فهمك
اقرأ السؤال/الأسئلة أدناه، فكّر في إجابتك، ثم اضغط على المثلث للاطلاع على الحل.
قد يكون من الصعب فهم كل خطوة من خطوات المنطق أعلاه، لذا جرّب التحقق منها بمثال. استخدم و. أولًا، تحقّق من أن و. ثم تابع التحقق من كل خطوة. أخيرًا، احسب وتحقق من أنها عوامل .
الإجابة:
، وهو ، إذن .
، وهو لا يعادل .
، وهو لا يعادل .
الآن، نعلم أن لعدد صحيح ما. يتحقق هذا حين نعوّض بـ و: عند .
الآن، نحتاج إلى حساب و.
إذن، وجدنا عوامل !
الخوارزمية
الآن بعد أن رأينا كيف أن إيجاد عدد صحيح بحيث يكون يساعدنا على تحليل إلى عوامل، يمكننا استعراض خوارزمية شور. يتلخّص الأمر في جوهره في إيجاد :
- اختر عددًا صحيحًا عشوائيًا اختر عددًا صحيحًا عشوائيًا بحيث يكون .
- احسب كلاسيكيًا.
- إذا كان ، فقد وجدت عاملًا بالفعل. توقف.
- وإلا، تابع.
-
أوجد الرتبة لـ معياريًا بالنسبة لـ أوجد أصغر عدد صحيح موجب يحقق .
-
تحقق من أن الرتبة زوجية
- إذا كانت فردية، عُد إلى الخط وة 1 واختر جديدة.
- إذا كانت زوجية، تابع إلى الخطوة 4.
- احسب
- تحقق من أن وأن .
- إذا كان ، عُد إلى الخطوة 1 واختر جديدة.
- وإلا، احسب القواسم المشتركة الكبرى لاستخراج العوامل:
ستكون هذه عوامل غير بديهية لـ .
- حلّل إلى عوامل بشكل تكراري إذا لزم الأمر
- إذا لم يكن و/أو أوليين، طبّق الخوارزمية بشكل تكراري لتحليلهما بالكامل.
- بمجرد أن تصبح جميع العوامل أولية، يكتمل التحليل.
بناءً على هذا الإجراء، قد لا يكون من الواضح سبب الحاجة إلى حاسوب كمومي لإتمام هذه المهمة. الضرورة تأتي من الخطوة 2، إذ إن إيجاد رتبة معياريًا بالنسبة لـ مسألة صعبة للغاية كلاسيكيًا. يتناسب تعقيدها أُسّيًا مع حجم . لكن مع الحاسوب الكمومي، نحتاج فقط إلى استخدام تقدير الطور الكمومي لحلها. أما الخطوة 4، إيجاد القاسم المشترك الأكبر لعددين، فهي مهمة سهلة نسبيًا كلاسيكيًا. لذا، الخطوة الوحيدة التي تحتاج فعلًا إلى قوة الحاسوب الكمومي هي خطوة إيجاد الرتبة. نقول إن مسألة التحليل إلى عوامل "تختزل" في مسألة إيجاد الرتبة.
الجزء الصعب: إيجاد الرتبة
الآن، سنستعرض كيف يمكننا استخدام الحاسوب الكمومي في إيجاد الرتبة. أولًا، لنوضح ما نعنيه بـ "الرتبة". بالطبع، أخبرتك بالفعل ما تعنيه الرتبة رياضيًا: إنها أول عدد صحيح غير صفري بحيث يكون لكن دعنا نرى إن كان بإمكاننا اكتساب مزيد من الحدس حول هذا المفهوم.
بالنسبة لقيم الصغيرة بما يكفي، يمكننا تحديد الرتبة ببساطة بحساب كل قوة من قوى ، وأخذ المعيار لذلك العدد، ثم التوقف حين نجد القوة التي تحقق . هذا ما فعلناه في مثالنا أعلاه. دعنا نلقي نظرة على بعض رسوم بيانية لهذه القوى المعيارية لبعض قيم و:
لاحظ شيئًا؟ هذه دوال دورية! والرتبة هي نفسها الدورة! إذن، إيجاد الرتبة يعادل إيجاد الدورة.
الحواسيب الكمومية مناسبة جدًا لإيجاد دورة الدوال. لهذا الغرض، يمكننا استخدام روتين خوارزمي فرعي يُسمى تقدير الطور الكمومي. تحدّثنا عن QPE وعلاقته بتحويل فورييه الكمومي في الوحدة السابقة. للاطلاع على مراجعة تفصيلية، انتقل إلى وحدة QFT أو درس John Watrous عن تقدير الطور الكمومي في دورة خوارزميات الكم. سنستعرض جوهر الإجراء الآن:
في تقدير الطور الكمومي (QPE)، نبدأ بعامل أحادي وحالة ذاتية لذلك العامل الأحادي . ثم نستخدم QPE لتقريب القيمة الذاتية المقابلة، والتي، بما أن العامل أحادي، ستكون على الشكل . إذن، إيجاد القيمة الذاتية يعادل إيجاد قيمة في الدالة الدورية. تبدو الدائرة كالتالي:

حيث يحدد عدد كيوبتات التحكم (الكيوبتات العليا في الشكل أعلاه) دقة التقريب.
في خوارزمية شور، نستخدم QPE على العامل الأحادي :
هنا، يشير إلى حالة أساس حسابية لسجل متعدد الكيوبتات، حيث القيمة الثنائية للكيوبتات تقابل العدد الصحيح . مثلًا، إذا كان و، فإن يُمثَّل بحالة الأساس رباعية الكيوبتات ، إذ يلزم أربعة كيوبتات لترميز الأعداد حتى 15. (إذا كان هذا المفهوم غير مألوف، راجع وحدة Qiskit in Classrooms التمهيدية لمراجعة الترميز الثنائي للحالات الكمومية.)
الآن، نحتاج إلى تحديد حالة ذاتية لهذا العامل الأحادي. إذا بدأنا في الحالة ، نلاحظ أن كل تطبيق متتالٍ لـ سيضرب حالة سجلنا في ، وبعد تطبيقًا سنصل إلى الحالة مجددًا. مثلًا مع و:
إذن، التراكبات فوق الحالات في هذه الدورة () على الشكل:
هي جميعها حالات ذاتية لـ . (هناك حالات ذاتية أكثر من هذه، لكننا نهتم فقط بالتي على الشكل أعلاه.)
اختبر فهمك
اقرأ السؤال/الأسئلة أدناه، فكّر في إجابتك، ثم اضغط على المثلث للاطلاع على الحل.
أوجد حالة ذاتية للعامل الأحادي المقابل لـ و.
الإجابة:
إذن، الرتبة . ستكون الحالات الذاتية التي نهتم بها تراكبًا متساويًا لجميع الحالات التي مررنا بها أعلاه، مع أطوار متنوعة:
لنفرض أننا تمكّنّا من تهيئة حالة كيوبتنا إلى إحدى هذه الحالات الذاتية (سبويلر — لسنا كذلك. أو على الأقل ليس بسهولة. سنوضح لماذا وما يمكننا فعله بدلًا من ذلك قريبًا). عندها يمكننا استخدام QPE لتقدير القيمة الذاتية المقابلة، حيث . ثم سنتمكّن من تحديد الرتبة بالمعادلة البسيطة:
لكن تذكّر، قلت إن QPE يقدّر — لا يعطينا قيمة دقيقة. نحتاج إلى أن يكون التقدير جيدًا بما يكفي للتمييز بين و. كلما زاد عدد كيوبتات التحكم ، كان التقدير أفضل. في المسائل في نهاية الدرس، ستُطلب منك تحديد الحد الأدنى لـ اللازم لتحليل العدد إلى عوامل.
الآن، علينا التعامل مع مشكلة. كل الشرح أعلاه حول كيفية إيجاد يبدأ بتحضير الحالة الذاتية . لكننا لا نعرف كيف نفعل ذلك دون أن نعرف مسبقًا. المنطق دائري. نحتاج إلى طريقة لتقدير القيمة الذاتية دون تهيئة الحالة الذاتية.
بدلًا من البدء بحالة ذاتية لـ ، يمكننا تحضير الحالة الابتدائية في حالة الكيوبت البالغة المقابلة لـ في الثنائي (أي ). على الرغم من أن هذه الحالة ليست حالة ذاتية لـ بوضوح، إلا أنها تراكب فوق جميع الحالات الذاتية :
اختبر فهمك
اقرأ السؤال/الأسئلة أدناه، فكّر في إجابتك، ثم اضغط على المثلث للاطلاع على الحل.
تحقق من أن يعادل التراكب فوق الحالات الذاتية التي وجدتها لـ و في سؤال التحقق السابق.
الإجابة:
الحالات الذاتية الأربع كانت:
إذن،