האלגוריתם של שור
למודול Qiskit in Classrooms הזה, הסטודנטים צריכים סביבת Python פעילה עם החבילות הבאות מותקנות:
qiskitv2.1.0 או חדש יותרqiskit-ibm-runtimev0.40.1 או חדש יותרqiskit-aerv0.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'
מבוא
בתחילת שנות ה-90, היה התרגשות גוברת סביב הפוטנציאל של מחשבים קוונטיים לפתור בעיות שהיו קשות למחשבים קלאסיים. מדעני מחשב מוכשרים אחדים המציאו אלגוריתמים שהדגימו את כוח המחשוב הקוונטי עבור כמה בעיות נישתיות ומלאכותיות, אך איש לא מצא "יישום הרג" יחיד למחשוב קוונטי שיהפוך את התחום. עד 1994, כאשר פיטר שור הגה את מה שנקרא כיום אלגוריתם שור לפירוק מספרים גדולים לגורמים.
היה ידוע היטב באותה תקופה שמציאת הגורמים הראשוניים של מספר גדול הייתה קשה ביותר עבור מחשב קלאסי. למעשה, פרוטוקולי אבטחת האינטרנט הסתמכו על קושי זה. שור מצא דרך למצוא את הגורמים הללו ביעילות אקספוננציאלית יותר על ידי העברת חלק מהשלבים המאתגרים יותר למחשב קוונטי תיאורטי, עתידי.
במודול זה נחקור את אלגוריתם שור. ראשית, נספק הקשר נוסף לאלגוריתם, נפרמל את הבעיה שהוא פותר ונסביר את הרלוונטיות לאבטחת סייבר. לאחר מכן, נציג מבוא לחשבון מודולרי וכיצד ליישם אותו על בעיית הפירוק, ונראה כיצד הפירוק לגורמים מתמצה לבעיה אחרת הנקראת "מציאת סדר". נראה כיצד הטרנספורם הפוריה הקוונטי (QFT) ואמידת הפאזה הקוונטית (QPE) שלמדנו במודול קודם נכנסים לתמונה, וכיצד להשתמש בהם לפתרון בעיית מציאת הסדר.
לבסוף, נריץ את אלגוריתם שור על מחשב קוונטי אמיתי! זכרו, עם זאת, שאלגוריתם זה יהיה שימושי באמת רק כשיהיה לנו מחשב קוונטי גדול ועמיד לשגיאות, שעדיין שנים ספורות רחוק. אז, נפרק מספר קטן בלבד כדי להדגים כיצד האלגוריתם עובד.
בעיית הפירוק לגורמים
המטרה של בעיית הפירוק לגורמים היא למצוא את הגורמים הראשוניים של מספר . עבור כמה מספרים , זה די קל. לדוגמה, אם זוגי, אחד מהגורמים הראשוניים שלו יהיה 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, הקבוצה תהיה . דוגמה נוספת: . ניתן לבצע חיבור וכפל (modulo ) על האיברים ב-, והתוצאה של כל אחת מהפעולות הללו היא גם איבר ב-, מה שהופך את לאובייקט מתמטי הנקרא חוג.
יש תת-קבוצה מיוחדת של שמעניינת אותנו במיוחד לאלגוריתם שור. זוהי תת-קבוצת המספרים ב- כך שהמחלק המשותף הגדול ביותר בין כל איבר ל- הוא 1, כלומר כל איבר "קו-ראשוני" ל-. אם ניקח את קבוצת המספרים הללו יחד עם פעולת הכפל המודולרי, אז זה יוצר אובייקט מתמטי אחר, הנקרא חבורה. אנו קוראים לחבורה זו . מתברר שעם (וחבורות סופיות בכלל), אם ניקח כל איבר , ונכפול את בעצמו שוב ושוב, תמיד בסופו של דבר נקבל את המספר . המספר המינימלי של פעמים שצריך לכפול את בעצמו כדי לקבל נקרא הסדר של . עובדה זו תהיה חשובה מאוד לדיון שלנו על כיצד לפרק מספרים למטה.
בדוק את ההבנה שלך
קרא את השאלה/ות למטה, חשוב על התשובה שלך, ואז לחץ על המשולש לגלות את הפתרון.
מהו ?
תשובה:
אנו השמטנו את המספרים הבאים:
מהו הסדר של כל אחד מהאיברים ב-?
תשובה:
הסדר הוא המספר הנמוך ביותר כך ש- עבור כל איבר .
שים לב שאמנם הצלחנו למצוא את הסדר של המספרים ב-, אבל זו אינה משימה קלה בכלל, עבור גדול יותר. זהו לב ליבה של בעיית הפירוק לגורמים ולכן אנחנו צריכים מחשב קוונטי. נראה למה ככל שנתקדם בשאר המחברת.
יישום חשבון מודולרי על בעיית הפירוק לגורמים
המפתח למציאת גורמים ו- כך ש- נובע ממציאת מספר שלם אחר כך ש
וגם
איך מציאת עוזרת לנו למצוא את הגורמים ו-? בואו נעבור על ההנמקה עכשיו. מכיוון ש-, זה אומר ש-. במילים אחרות, הוא כפולה של . אז, עבור מספר שלם כלשהו,
ניתן לפרק את לקבל:
מהנחות הפתיחה שלנו אנחנו יודעים ש-, לכן אינו מחלק באופן שווה לא את ולא את . אז, שני הגורמים של , ו- חייבים להתחלק כל אחד ב- וב-. או שe הוא גורם של ו- הוא גורם של , או להפך. לכן, אם נחשב את המחלקים המשותפים הגדולים ביותר (GCDs) בין לבין וגם , זה ייתן לנו את הגורמים ו-. חישוב ה-GCD בין שני מספרים הוא משימה קלה קלאסית שניתן לבצע, לדוגמה, באמצעות אלגוריתם אוקלידס.
בדוק את ההבנה שלך
קרא את השאלה/ות למטה, חשוב על התשובה שלך, ואז לחץ על המשולש לגלות את הפתרון.
אולי יהיה קשה להבין כל שלב בהיגיון לעיל, אז נסה לעבור על דוגמה. השתמש ב- ו-. ראשית, אמת ש- ו-. לאחר מכן המשך לאמת כל שלב. לבסוף, חשב ואמת שהם הגורמים של .
תשובה:
, שהוא , לכן .
, שאינו שקול ל-.
, שאינו שקול ל-.
כעת, אנחנו יודעים ש- עבור מספר שלם כלשהו. זה מאומת כשמציבים ו-: כאשר .
כעת, עלינו לחשב ו-.
אז, מצאנו את הגורמים של !