מתקדם שיעור 4 4 דקות קריאה

הקנגורואים של פולארד: האלגוריתם הפותר את האתגרים הגדולים

שני קנגורו קופצים במהלך ההפסקה עד שהם נוחתים באותו מקום. כך נופלות המפתחות של 100 ביטים או יותר.

האלגוריתם שהצליח לפתור את האתגרים הגדולים ביותר כבר קיבל את שמו מחיה, כיוון שהמחבר עצמו הסביר זאת כך. בשנת 1978, המתמטיקאי הבריטי ג'ון פולארד תיאר שיטה שבה שני קנגורואים קופצים בשדה: אחד מאולף, שמיקומו ידוע, ואחד פראי, שהוא זה שמחפשים. הקנגורו המאולף משאיר מלכודות במקום שבו הוא דורך. במוקדם או במאוחר, הקנגורו הפראי דורך על אחת מהן.

התרגום לעקומה הוא ישיר. הקנגורו המאולף מתחיל מנקודה ידועה בתוך התחום — נניח מאמצעו — והמרחק שכבר עבר נרשם בכל קפיצה. הקנגורו הפראי מתחיל מהנקודה Q, המפתח הציבורי של היעד, שהמרחק שלו מהמקור הוא בדיוק המספר שרוצים לגלות.

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

אחד מהם מסמן איפה הוא דורך. השני, במוקדם או במאוחר, דורך על סימן.

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

נותר לפתור בעיה מעשית: איך להבחין שההתנגשות התרחשה, מבלי לשמור את כל הנקודות שבהן כל קנגורו עבר? התשובה היא נקודות מובחנות. בוחרים תכונה נדירה וקלה לבדיקה — למשל, שהקואורדינטה x מסתיימת בעשרים ביטים אפסיים — ורק רושמים את הנקודה כשהיא בעלת תכונה זו. אחד מכל מיליון קפיצות, בערך. מכיוון שאחרי ההתנגשות שני המסלולים חופפים, שניהם בסופו של דבר ידרכו באותה נקודה מובחנת, ושם נרשם המפגש.

רושמים רק מי שדורך על אבן לבנה. שאר העקבות הולכות לאיבוד, ואין בהן צורך.

החישוב הסופי הוא אותו שורש ריבועי של השיטה הקודמת — משהו בסביבות פעמיים השורש של רוחב התחום — עם הבדל מכריע: הזיכרון המשמש הוא טבלת הנקודות המובחנות, שיכולה להיכנס בכמה מגה-בייטים. במקום שבו שיטת הצעד התינוקי והצעד הענק דרשה שבע מאות וחמישים ג'יגה-בייטים לשבעים ביטים, הקנגורו דורש כמעט כלום.

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

ישנן שתי תנאים, ושניהם חשובים.

הראשון הוא שהמפתח הציבורי צריך להיות ידוע. הקנגורו קופץ על נקודות העקומה; אם יש לך רק את הכתובת, אין נקודת התחלה לפראי, והשיטה לא חלה. זה היה שיעור 1 שהפריד בין שני העולמות, וכאן ההפרדה גובה את מחירה.

השני הוא שהתחום צריך להיות ידוע. הקנגורו המאולף צריך להתחיל קרוב לפראי כדי שהמפגש יתרחש בכמה קפיצות; בשדה בגודל העקומה כולה, ההמתנה חוזרת להיות 2^128. מבלי לדעת את הקטע, אין היכן להקים את ההמתנה.

מבלי לדעת את הקטע, אין היכן להקים את ההמתנה.

שים לב למה שזה אומר לגבי ארנק רגיל. המפתח הציבורי שלך נחשף ברגע שאתה מוציא בפעם הראשונה, ובכל זאת אין תחום: הוא נבחר באקראי ב-256 ביטים שלמים, והקנגורו יצטרך 2^128 קפיצות. שני התנאים צריכים להתקיים יחד, ובאתגר הם מתקיימים בכוונה — כי מי שהרכיב אותו בחר את התחום בכוונה.

נותר לבדוק את החומרה שמבצעת את הקפיצות הללו, והיכן היא נעצרת. בשיעור הבא, כרטיסי מסך, ASICs והמרחק האמיתי בין 2^40 ל-2^70.