מניעת שירות בחלק מן האקצ'יינג'ים – מה קרה שם? (ולמה אין סיבה לדאגה)

 בשעות האחרונות אקצ'יינג'ים בינלאומיים גדולים הקפיאו משיכות ביטקוין בעקבות באג שקיים במימושים רבים של תוכנות ביטקוין. נפתח ונרגיע כי כרגע לא מסתמן שבפועל לקוחות איבדו כסף בעקבות הבאג (עדכון: נכון ל- 25/2/14 נראה כי ל-  Mt. Gox נגנבו מיליוני דולרים). כאמצעי בטחון האקצ'יינג'ים הגדולים מונעים משיכת כספים עד שיוודאו כי אינם מושפעים מהבאג, תהליך זה צפוי להימשך בין שעות לימים בודדים.

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

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

באג Transaction Malleability דווח לראשונה בפורום BitcoinTalk ע"י המשתמש Enochian במאי 2011. הבאג אינו באג בפרוטוקול אלא בספרית OpenSSL שבה משתמשות רבות מתוכנות הביטקוין. כדי להבין באג זה ואיך נתן לנצלו לרעה, חשוב קודם להבין בצורה כללית איך בנויה טרנזקצית ביטקוין טיפוסית.

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

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

כעת, אם בוב רוצה להשתמש בכסף שקיבל, עליו תחילה לתת את מזהה הטרנזקציה הקודמת, זו שאליס יצרה. כעת נגיע לבאג ה- Transaction Malleability. אחד הפרמטרים של החתימה הדיגיטלית שאליס חתמה היא מספר הנקרא 's', נניח לצורך הפשטות שהמספר 42 נבחר ע"י אליס. גם חתימות שישתמשו במספר 042 או 0042 או 00042 יתקבלו משום שהערך המספרי שלהם זהה. לעומת זאת, כאשר ידחס כל המידע לצורך יצירת מזהה טרנזקציה, יתקבל מזהה שונה לגמרי מהמקורי. כיצד האקר יכול להשתמש בזה לטובתו?

האקר יכול להאזין לרשת הביטקוין לטרנזקציה של אליס שמעבירה כסף לבוב, לשנות את המספר 42 ל-042 ולשדר את הטרנקציה שוב. חשוב להבהיר שהכסף של אליס עדיין ישלח לבוב, רק מזהה הטרנזקציה יהיה שונה. עכשיו נניח שאליס היא בעצם אקצ'יינג' MtAlice וההאקר הוא בוב והוא ביקש למשוך 100 ביטקוין מהחשבון שלו. ברגע ש-MtAlice שולחים לו את הכסף הוא מיד משדר לכורים טרנזקציה זהה במהותה אבל עם מזהה שונה. הוא מקבל את 100 הביטקוין שלו. אך כעת תוכנת ראיית החשבונות של MtAlice לא תמצא בבלוקצ'יין את מזהה הטרנזקציה שהיא מצפה לראות (זו שהיא יצרה) ולכן לא תשנה את מצב החשבון של ההאקר, ותשאיר את 100 הביטקוין לזכותו בחשבון שלו. כעת יכול לחזור על התרגיל ולמשוך עוד ועוד כסף מ-MtAlice.

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

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