באג האינפלציה בביטקוין
בספטמבר 2018 התגלה באג בתוכנת הביטקוין, החמור ביותר מזה שמונה שנים. מה אנו יכולים ללמוד על האופן בו ביטקוין שונה מכל מה שקדם לו, ועל האתגרים הצפויים לו בעתיד?
ביטקוין הוא מטבע דיגיטלי מבוזר. אין שרת מרכזי או גורם כלשהו שמנהל אותו. במקום זאת, מנהלת אותו רשת מחשבים שיתופית, המורכבת מ"צמתים" – שהם מחשבים המופעלים ע"י המשתמשים בו. כל משתמש יכול להפעיל צומת, להתחבר לצמתים אחרים ברשת, וכך להשתתף בתפעול.
כל צומת כזה מקבל מעמיתיו ברשת (הצמתים שאליהם הוא מחובר) מידע על כל הפעולות המתבצעות ברשת, בודק את תקינות הפעולות, ומפיץ את המידע הלאה לשאר עמיתיו. בכך הצומת יודע את מצב הרשת בכל רגע נתון, ומוודא שכל הפעולות נענות לחוקי פרוטוקול הביטקוין – אין מטבעות הנוצרים יש מאין, מטבעות אינם עוברים ללא הרשאת בעליהם וכו'.
בין היתר, כשהמשתמש מקבל תשלום בביטקוין, הצומת אותו הוא מפעיל מקבל מידע על פעולה זו כמו שהוא מקבל מידע על כל פעולה, ובודק את תקינותה כמו שהוא בודק פעולות אחרות. כך המשתמש יכול לדעת שקיבל ביטקוינים טבין ותקילין, ושלא הערימו עליו חלילה עם טרנסאקציה "מזויפת".
התוכנה להפעלת צומת היא תוכנה חופשית בקוד פתוח (FOSS), וכל אחד יכול לעיין בקוד המקור (אוסף פקודות המחשב שמהוות את התוכנה) ולהבין בדיוק מה התוכנה עושה וכיצד היא עובדת. המשתמש אינו צריך לסמוך על אף אחד בעניין זה. אנשים רבים בכל העולם בוחנים בקפדנות את הקוד, וכל טעות או באג שעשויים לפגוע ביכולת של התוכנה לבצע את תפקידה, יתגלו במהרה ויתוקנו ע"י העיניים הרבות הבוחנות אותה.
עד שמופיע באג שלא מתגלה במהירות.
הצורך במענה לנפח פעילות הולך וגובר של שימוש בביטקוין, יוצר חיפוש מתמיד אחרי שיפורים וייעולים שיכולים לזרז את קצב הטיפול בפעולות ולהגדיל את קיבולת הרשת. ייעול כזה נכנס לתוכנה לפני כשנה וחצי. למרבה הצער, בשם היעילות בוצע קיצור דרך בתהליך הבדיקה – וכעת, היה סוג מסוים של פעולות לא תקינות, שהתוכנה לא הצליחה לאבחן.
לא מדובר בסתם פעולות לא תקינות – מדובר בפעולות שמאפשרות שכפול של מטבעות, ובכך יצירת מטבעות חדשים יש מאין. אחת הבשורות החשובות ביותר של ביטקוין היא הבקרה המדויקת על יצירת מטבעות – וכאן אנו רואים שנוצר פתח לתוקפים להפר עיקרון זה, מבלי שהצמתים ידווחו שמשהו אינו כשורה.
מה שיותר חמור מהבאג עצמו – שזכה לכינוי CVE-2018-17144 – הוא העובדה שכשהוא נכנס לקוד, אף אחד מהבודקים לא עלה עליו. גם לא מיד לאחר מכן, וגם לא בשנה וחצי מאז שהוא הוכנס. רשת הביטקוין היתה חשופה זמן רב למתקפה נגד עקרונותיו הבסיסיים.
הבאג התגלה בסופו של דבר ע"י מתכנת הפעיל בתחום. לאחר התגלית, נשאלה השאלה מה לעשות עם זה. ביישומים בהם אבטחת המידע קריטית, תמיד נוצר קונפליקט – מצד אחד, יש רצון לפרסם את הבעיה, בכדי להזהיר את הציבור ולקדם פיתרון עבורה; ומצד שני, עצם פרסום המידע יכול למשוך תוקפים – שלא ידעו לכתחילה על הפרצה, וכעת ימהרו לנצל אותה בעוד הרשת חשופה.
לכן, בקהילות פיתוח של מערכות רגישות, ובכלל זה בקהילת הביטקוין, נהוג נוהל של "גילוי אחראי". מי שמגלה את הפרצה מעדכן קבוצה מצומצמת של מפתחים אמינים, וביחד הם בונים תיקון הסותם את הפרצה – ורק לאחר שהתיקון במקומו, הם חושפים לציבור את הבעיה ופתרונה.
זה, בגדול, מה שבוצע בהצלחה גם פה. המגלה עדכן את מי שעדכן, וביחד עבדו על תיקון. תוך 7 שעות הם פרסמו את התיקון, כדי שכל מפעילי הצמתים יוכלו לשדרג גרסה ולהטמיע אותו; אך הצניעו מידע לגבי מה הוא מתקן, וחשפו רק בעיה קלה יותר מהסכנה לשכפול מטבעות. רק לאחר מספר ימים, כשמספיק צמתים וכורים שדרגו כדי שלא תהיה היתכנות למתקפה, שוחררו הפרטים המלאים לגבי מה היה יכול לקרות.
ומה היה יכול לקרות באמת? בתרחיש הרע שבו במהלך השנה וחצי מישהו היה מצליח לנצל את הפרצה ולשכפל מטבעות, מבלי שזה היה מתגלה עד היום – המצב היה חמור מאד. קיימות מספר דרכי פעולה אפשריות לתקן את המעוות – למשל, הסרה נקודתית של טרנסאקציות בעייתיות מהעבר (וכל פעולה שנבעה מהן), או לחילופין מתן לגיטימציה בדיעבד לפעולות ואפשרות למי שניצל את המצב לזכות מן ההפקר, וכו' – אבל אף אחת מהן אינה טובה במיוחד, וכולן היו גורמות לפגיעה באמון במטבע ובעקרונות שלו. זו הסיבה שבאג זה נחשב לחמור ביותר מזה שמונה שנים, והוביל לקריאה חריגה בדחיפותה לעדכן לגרסה החסינה לו.
כמה קרובים היינו לתרחיש אימים כזה? קשה לדעת, במיוחד לאור העובדה שככל הנראה, הבאג נודע לאנשים ישרים לפני שנודע לתוקפים פוטנציאליים. אבל הדעה הרווחת היא שלא היינו מאד קרובים, ואפילו אם דברים היו מתגלגלים אחרת. קודם כל, אף על פי שהגרסאות העדכניות של תוכנת הצומת הסטנדרטית "ביטקוין קור" היו חשופות, ומהוות את הרוב המכריע של הצמתים, יש גם מימושים חלופיים, גרסאות ישנות יותר של התוכנה וכו'. סביר להניח שאם היתה נוצרת טרנסאקציה זדונית כנ"ל, צמתים כאלה היו מתריעים על כך, והעניין היה מסודר בעודו טרי. זוהי גם התקפה שקל מאד לזהות אם מסתכלים בעיניים על פרטי הפעולה. עקב כך, האינטרס לתקוף קלוש – קשה להאמין שהתוקף היה מצליח להנות מהמטבעות ששכפל, או לגרום נזק לביטקוין (אם זו מטרתו, למשל לצורך הימור ספקולטיבי נגד המטבע). נוסיף על כך את העובדה שאופי הפרצה הוא כזה, שרק כורה המוצא בלוק יכול לנצל אותה. לכן לא לכל אחד הזדמנות לעשות זאת, וגם למי שכן – הוא עלול לאבד את כל התגמול על מציאת הבלוק אם ההתקפה תסוכל.
איך שלא יהיה, תקלות כאלה לא אמורות לקרות, במיוחד לא במטבע שערכו הכולל חצה את רף 100 מיליארד דולר (יותר, אם כוללים מטבעות אחרים שנגזרו ממנו ומושפעים גם הם). איך קרה הדבר, ומה בתהליכי הפיתוח והבדיקה כשל? מי מבטיח לנו שלא יהיו באגים נוספים כאלה – שאולי הפעם כן ינוצלו לרעה באופן זדוני וישבשו את המערכת? מה ניתן לעשות כדי למנוע הישנות תקלות כאלה בעתיד? האם זהו סימן שלילי, המעיב על יכולתנו לסמוך על תהליכי פיתוח מבוזרים ועל מטבע מבוסס תוכנה? ואולי להיפך, הדרך שבה הוא טופל והעובדה שצלחנו אותו ללא שריטה, הוא סימן חיובי לחוסנו של ביטקוין והיכולת שלנו לעבור כל משוכה?
האם, כשהתגלה הבאג, הוא טופל בצורה הטובה ביותר? על מי ניתן לסמוך כשמשתפים אותו? האם הדיון צריך להיות בערוצים פרטיים או בפורומים פתוחים יותר? את מי מהכורים מעדכנים לפני האחרים? כמה לחכות לפני הפרסום הפומבי? איך מעודדים משתמשים המפעילים צומת להשתדרג, מבלי להזמין פורצים שינצלו את המהומה? האם זה נכון לפרסם הודעות שמשמיטות מידע באופן מכוון?
המקרה גם שם זרקור על אחד הנושאים המורכבים והמעניינים ביותר בביטקוין, והוא המשילות. מי קובע את החוקים? התוכנה אינה נותנת זכויות מיוחדות לאף גורם, אבל מי קובע באיזו תוכנה להשתמש? אם רוב הכוח הכלכלי של הרשת משתמש בתוכנה המגלמת אוסף חוקים א' (במקרה זה, חוקים המתירים פעולות המשכפלות מטבעות), ובא מתכנת עם תוכנה "מתוקנת" המגלמת אוסף חוקים ב', איך קובעים מי הוא "הביטקוין האמיתי"? עקרון יסוד הוא שבסופו של דבר מי שקובע הוא המשתמשים. המתכנת יכול לבקש יפה לשדרג, אבל אין לו אפשרות להכריח אף אחד לעשות זאת. במקרה זה, השכנוע לא היה קשה, כי ברור לכל כי הם אינם מעוניינים במטבעות הניתנים לשכפול, והתמיכה עד כה היה בשוגג. אבל יש גם מקרים בהם ההסכמה אינה כה גורפת, וזה מה שגורם לתופעה השנויה במחלוקת של פיצולים במטבע.
הפרשה טרם הסתיימה, וכרגע יש לנו יותר שאלות מאשר תשובות. עוד מתקיימים ויכוחים סוערים על מה שקרה, המסקנות והלקחים, ויכוחים שאינם חפים מהפניית אצבעות מאשימות. אבל בינתיים נראה שמה שלא הורג מחשל, וביטקוין עדיין לא מת. נותר רק לקוות שנלמד מהמקרה מה שניתן ללמוד, וביטקוין ייצא ממנו חזק יותר.
גרסה מקוצרת של מאמר זה הופיעה לראשונה במגזין Crypto360 מבית http://www.globes.co.il/.