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

כפל סקלרי והלוגריתם דיסקרטי

חישוב kG הוא מהיר. גילוי k מתוך kG הוא הבעיה שעליה מתבססת כל הבטיחות.

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

השיטה נקראת להכפיל ולחבר, והמתכון הוא לקרוא את המספר בבינארי. שלוש עשרה, בבינארי, זה 1101. התחל בביט השמאלי, עם הנקודה G ביד. עבור כל ביט הבא, הכפל את מה שיש לך; אם הביט הוא אחד, הוסף G לאחר ההכפלה. הביט השני הוא אחד: הכפל ל-2G, הוסף ל-3G. השלישי הוא אפס: הכפל ל-6G, ולא יותר. הרביעי הוא אחד: הכפל ל-12G, הוסף ל-13G. שלוש הכפלות, שתי חיבורים, והגעת.

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

להכפיל שמונה פעמים מגיע רחוק יותר מאשר לערום מאתיים דפים אחד על השני.

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

מי שמקשיב לזמן של כל סיבוב מגלה את הסוד בלי לראות את המנגנון.

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

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

שורש ריבועי של 2^256 הוא 2^128, שזה 34 ואחריו 37 אפסים. כדאי לעשות את החישוב בנדיבות מכוונת. נניח שכל כוח החישוב של רשת הביטקוין, משהו קרוב לסקסטיליון פעולות לשנייה, היה מופנה לכך, ונעמיד פנים שכל אחת מהפעולות האלה היא פעולה על העקומה — מה שהוא שקרי בכמה סדרי גודל, כי פעולה על העקומה עולה אלפי פעמים יותר מאשר hash. אפילו עם היתרון הדמיוני הזה, הסריקה הייתה לוקחת כעשרה מיליארד שנים. בתיקון להבדל האמיתי בעלות, זה הולך לסדר גודל של 10^14 שנים: כמעט עשרת אלפים פעמים גיל היקום.

לשחרר לוקח שנייה. לאסוף דורש חבל שאין לאף אחד.

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

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