מיחשוב קוונטי (מבוא)

forum link

אחת הבעיות המאתגרות שעומדות בפני ממשלות ואירגוני פשע הוא פיצוח שיטת ההצפנה RSA, הידועה גם בשם "שיטת שני המפתחות". בשיטה זו, אם אנו רוצים להצפין מסמך, יש ליצור מפתח "נעילה" ומפתח "פתיחה". שני המפתחות כוללים מספר גדול מאוד N. המספר הזה הוא מכפלה של שני מספרים ראשוניים גדולים p,q שנבחרו אקראית. רק בעל הקוד יודע את שני המספרים p,q בנפרד, בעוד שהמכפלה N ידועה לכולם. אם אתה מסוגל לפרק את N לגורמיו הראשוניים הרי שפיצחת את הקוד.

נתון מספר באורך \(\displaystyle{ n=400 }\) ביטים. כמה פעולות דרושות כדי לפרק אותו לגורמים? תשובה: מספר מאוד גדול מסדר גודל של \(\displaystyle{ 2^n }\) . לשם השוואה מספר האטומים ביקום הוא מסדר גודל של \(\displaystyle{ 2^{300} }\) . שימו לב: למספר 987 יש רק "3" ספרות, אבל נדרשות הרבה פעולות כדי למצוא במה הוא מתחלק. במחשב קוונטי ניתן להכין רגיסטר של \(\displaystyle{ n }\) ביטים במצב סופרפוזיציה, לבצע את החישוב באופן "מקבילי" באמצעות יחידת עיבוד אחת. זה מה שמאפשר "לפרק" את המספר לגורמים "במכה אחת". לפרק את המספר = לפצח את הקוד!

פרוק לגורמים

את בעית הפרוק לגורמים אפשר "להמיר" לבעיה שקולה של מציאת מחזור של פונקציה. בהינתן המספר N נגדיר את הפונקציה

  \(\displaystyle{ f(x) \ \ \equiv \ \ M^x \ \text{mod}(N) }\)

באשר M מספר שרירותי. אנו מעונינים למצוא את המחזור r של \(\displaystyle{ f(x) }\) עבורו מתקיים

\(\displaystyle{ f(x+r)=f(x) }\)

אם N היה ראשוני אז המחזור של הפונקציה היה \(\displaystyle{ r=N-1 }\) . זה נקרא "המשפט הקטן של פרמה". לעומת זאת אם \(\displaystyle{ N=pq }\) אז \(\displaystyle{ r<(N-1) }\) . אם המחזור r ידוע, אז אפשר לחשב בקלות את גורמיו הראשוניים של N. מה שהמחשב הקוונטי מאפשר זה למצוא את המחזור r. כדי להבין איך זה מתבצע, נגדיר להלן את המושג רגיסטר, ואת הפעולות שנקראות פוריה טרנספורם והדמרד טרנספורם.

רגיסטר

רגיסטר x הוא יחידת זכרון של מחשב, והוא מורכב מביטים (bits). כל ביט יכול להכיל את הערך 0 או 1.

\(\displaystyle{ x=(x_0,x_1,...,x_{n-1}) }\)

אופציונלית אפשר לפרש את התוכן של הרגיסטר כיצוג של מספר בינארי:
 
\(\displaystyle{ x \ \ = \ \ \sum_{i=0}^{n-1} x_i2^i }\)

מכפלה סקלרית של ערכי רגיסטר מוגדרת בצורה הבאה:
 
  \(\displaystyle{ x^A \cdot x^B \ \ \equiv \ \ \sum_i x^A_i x^B_i }\)
מכפלה אלגברית של ערכי רגיסטר מוגדרת בצורה הבאה:

  \(\displaystyle{ x^Ax^B \ \ \equiv \ \ \sum_{ij}x^A_i x^B_j 2^{i+j} }\)
ברגיסטר קוונטי יש qbits במקום bits. בשפה של ספינים אפשר להגיד שכל qbit יכול להיות מקוטב up או down, וזה מיצג את הערכים 0 ו-1. בהתאם נסמן את מצב הרגיסטר בסימון \(\displaystyle{ \mid 0\rangle }\) או \(\displaystyle{ \mid 1\rangle }\) .  להלן נתיחס לשתי פעולות שלוקחות את הרגיסטר והופכות אותו לסופרפוזיציה של מצבים.

שערים

במחשב קלאסי השערים האלמנטרים הם NOT ו-AND. השערים האלה מיצגים פעולות על ביט אחד ועל שני ביטים בהתאמה. אפשר לבנות מהם כל פרוצדורה שרוצים. במחשב קוונטי הפעולה NOT נקראת X. אם אנו חושבים על הקיוביט כעל ספין אז אפשר לפרש את הפעולה הזו כסיבוב של 180 מעלות מסביב לציר X.
\( |0\rangle \ \ \mapsto \ \ | 1\rangle \)
\( |1\rangle \ \ \mapsto \ \ | 0\rangle \)
באופן כללי אפשר להגדיר פעולות נוספות על קיוביט בודד. כל הפעולות האלו מיצגות סיבובים. לדוגמה, הפעולה Z מייצגת סיבוב של 180 מעלות סביב ציר Z
\( |0\rangle \ \ \mapsto \ \ | 0\rangle \)
\( |1\rangle \ \ \mapsto \ \ -| 1\rangle \)

בסעיף הבא נגדיר פעולה שנקראת Hadamard שגם אותה אפשר לפרש כסיבוב.

לגבי שער שפועל על שני קיוביטים. נהוג לבחור בתור שער אלמנטרי את הפעולה CX שנקראת Controlled NOT (CNOT). הביט הראשון קובע האם מתבצעת פעולת X על הביט השני:
\( |0,0\rangle \ \ \mapsto \ \ |0,0\rangle \)
\( |0,1\rangle \ \ \mapsto \ \ |0,1\rangle \)
\( |1,0\rangle \ \ \mapsto \ \ |1,1\rangle \)
\( |1,1\rangle \ \ \mapsto \ \ |1,0\rangle \)
למעשה אפשר לבנות את השער הזה מתוך שער אלמנטרי פשוט יותר שנקרא CZ
\( |0,0\rangle \ \ \mapsto \ \ |0,0\rangle \)
\( |0,1\rangle \ \ \mapsto \ \ |0,1\rangle \)
\( |1,0\rangle \ \ \mapsto \ \ |1,0\rangle \)
\( |1,1\rangle \ \ \mapsto \ \ -|1,1\rangle \)

אפשר לפרש את השער CZ בתור סיבוב Z על הקיוביט השני שמתבצע אם הקיוביט הראשון במצב 1. לחילופין אפשר לפרש את השער CZ בתור סיבוב Z על הקיוביט הראשון שמתבצע אם הקיוביט השני במצב 1. בכל מקרה המשמעות היא שהמצב מוכפל בפקטור "-" אם שני הקיוביטים במצב 1.

טרנספורם הדמרד

פעולת הדמרד (Hadamard) על qubit יחיד מוגדרת בצורה הבאה:

\(\displaystyle{ \mid 0\rangle \ \ \mapsto \ \ \frac{1}{\sqrt{2}} \left(\mid 0\rangle +\mid 1\rangle\right) }\)
\(\displaystyle{ \mid 1\rangle \ \ \mapsto \ \ \frac{1}{\sqrt{2}} \left(\mid 0\rangle -\mid 1\rangle\right) }\)

כלומר qbit מקוטב up יהפוך להיות מקוטב right, ולעומת זאת qbit מקוטב down יהפוך להיות מקוטב left. בשפה של ספינים זו למעשה פעולת סיבוב. שילוב שתי הנוסחאות ביחד נותן את צורת הרישום:
 
\(\displaystyle{ \mid x_0\rangle \ \ \mapsto \ \ \frac{1}{\sqrt{2}} \left(\mid 0\rangle + (-1)^{x_0} \mid 1\rangle\right) }\)

או בצורה יותר קומפקטית:

\(\displaystyle{ \mid x_0\rangle \ \ \mapsto \ \ \frac{1}{\sqrt{2}} \sum_{k_0=0,1} (-1)^{k_0x_0} \mid k\rangle }\)

באופן דומה, עבור רגיסטר בעל 2 qbits: 

\(\displaystyle{ \mid x_0,x_1\rangle \ \ \mapsto \ \ \frac{1}{\sqrt{2^2}} \sum_{k_0=0,1\\k_1=0,1} (-1)^{k_0x_0+k_1x_1} \mid k_0,k_1\rangle }\)

באופן כללי נגדיר טרנספורם הדמרד שפועל על רגיסטר קוונטי בעל n ביטים:

\(\displaystyle{ \mid x\rangle \ \ \mapsto \ \ \frac{1}{\sqrt{N}} \sum_{k} (-1)^{k \cdot x} \mid k\rangle }\)
באשר

\(\displaystyle{ N=2^n }\)

דוגמא לטרנספורם הדמרד על רגיסטר בעל 3 ביטים:

\(\displaystyle{ \mid 000\rangle \ \ \mapsto \ \ \frac{1}{\sqrt{2^3}} (\mid 0\rangle +\mid 1\rangle )(\mid 0\rangle +\mid 1\rangle )(\mid 0\rangle +\mid 1\rangle) }\)

קיבלנו סופרפוזיציה של כל המצבים האפשריים:

\(\displaystyle{ \small \mid \Psi\rangle \ = \ \frac{1}{\sqrt{2^3}}\left(\mid 000\rangle+\mid 100\rangle+\mid 010\rangle+\mid 001\rangle+\mid 110\rangle+\mid 011\rangle+\mid 101\rangle +\mid 111\rangle\right) }\)

האפשרות להכין סופרפוזיציה כזאת, ואחר כך לפעול עליה "במכה אחת" באמצעות יחידת עיבוד, עומדת בבסיס הקונצפט של מיחשוב קוונטי.

טרנספורם פוריה

טרנספורם פורייה (FT) נותן את רכיבי התדר של פונקציה. לדוגמא: את הצליל שיוצר כלי נגינה אפשר לתאר באמצעות פונקציה של הזמן. הפונקציה מאופינת על ידי ספקטרום תדרים. צליל "נקי" מאופין על ידי פונקציה מחזורית שיש לה תדר בסיסי ותדרים עיליים שהם כפולות שלמות של התדר הבסיסי. לעומת זאת צליל רועש מאופין ברצף של תדרים. מבחינה מתמטית התמרת פוריה מוגדרת באופו הבא:

\(\displaystyle{ F(\omega) \ \ = \ \ \text{FT}[f(t)] \ \ \equiv \ \ \frac{1}{\sqrt{N}}\sum_{t}J^{\omega t}f(t) }\)  
באשר

\(\displaystyle{ J=e^{i(2\pi/N)} }\)

נשים לב שבמקרה של פונקציה מחזורית ההתמרה מחזירה  0, אלא אם כן \(\displaystyle{ \omega }\) הוא התדר של הפונקציה, או כפולה של התדר הבסיסי.

טרנספורם פורייה קוונטי (QFT) מוגדר באנלוגיה מלאה לטרנספורם הדמרד:
 
\(\displaystyle{ \mid x\rangle \ \ \mapsto \ \ \frac{1}{\sqrt{N}}\sum_{k}J^{kx} \mid k\rangle }\)