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

אריתמטיקה בשעון של מספרים ראשוניים

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

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

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

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

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

החלוקה היא זו שדורשת רעיון חדש, וזהו הרעיון החשוב ביותר בשיעור. אין פסיק בגוף סופי, ולכן חלוקה ב-a לא יכולה להיות חיתוך לחלקים. היא משמעותה כפל בהפכי של a — המספר שכפול ב-a נותן בדיוק אחד. במודולו 7, ההפכי של שלוש הוא חמש, כי חמש עשרה משאיר שארית אחת. חלוקה בשלוש, שם, היא כפל בחמש.

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

בשעון ראשוני, לכל חלק יש את המקביל שלו. בשעון מורכב, נשארות חלקים ללא זוג.

חישוב ההפכי בפועל נעשה בשתי דרכים. המשפט הקטן של פרמה, מ-1640, מבטיח ש-a בחזקת p פחות אחד משאיר שארית אחת; לכן a בחזקת p פחות שתיים הוא ההפכי, וחישוב חזקות פותר את הבעיה. מהיר עוד יותר הוא האלגוריתם המורחב של אוקלידס, סדרת חלוקות שהיוונים כבר הכירו ומחזירה את ההפכי בכמה צעדים. כל ארנק בעולם מפעיל אחד משני אלה, אלפי פעמים בשנייה, מבלי שאף אחד ישים לב.

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

נבחר קרוב לחזקה של שתיים: כמעט ללא מרווח, ולכן מהיר להתאים.

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

עם השעון מורכב, נותר להניח את העקומה עליו. בשיעור הבא, y² = x³ + 7, הנקודות שמספקות את המשוואה הזו והחוק שמחבר שתיים מהן כדי לייצר שלישית.