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

כוח גס: כמה עולה בזמן ובאנרגיה

מספר אחד בכל פעם, עם חישובים כנים של כמה מספרים בשנייה וכמה זה עולה בחשמל.

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

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

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

להתקדם צעד אחד עולה כמעט כלום. להתחיל מאפס בכל צעד היה עולה הכל.

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

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

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

כל האולם הזה מופעל כדי לפתוח קופסה.

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

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

כדאי להיות מדויקים לגבי השוואה שמופיעה הרבה. הרשת של Bitcoin כולה מחשבת בערך סקטיליון של hashes בשנייה, מספר גדול מאות מונים מכל חוות כרטיסים גרפיים — ועדיין היא לא מתאימה לזה. כורה ASIC יודע לעשות דבר אחד בלבד, SHA-256 על כותרת של שמונים בייטים, ולא יודע להכפיל נקודות בעקומה. החומרה שפותרת אתגר היא אחרת, והיא הרבה יותר איטית.

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

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

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