עדכון זה נכתב וסופק על ידי המפתח הראשי של Litecoin MimbleWimble דיוויד בורקט.
————
פגיעות אבטחה
כפי שפורסם אתמול בטוויטר:
קורט, חבר קהילת GRIN ותיק, יצר קשר עם צ'רלי ואני כדי להודיע לנו על פגיעות בתכנון לעסקאות לא אינטראקטיביות. למרות שהתקיפה קשה לביצוע בפועל, היא מאפשרת גניבת כספים אם התנאים מסתדרים בדיוק כמו שצריך.
ההתקפה הזו היא די טכנית וקשה להבנה מבלי ללמוד תחילה את כל הקריפטו מאחורי MWEB. בצורה מאוד לא פורמלית, זה עובד כך:
- אליס שולחת 2 מטבעות לבוב:
- מטבע 1 = 10 LTC
- מטבע 2 = 20 LTC
- בוב יוצר 2 עסקאות, אחת לצ'רלי, ועוד אחת בחזרה לאליס, ושולח אותן בערך באותו זמן:
- tx1 = הוצא מטבע 1 כדי לשלוח 8 LTCs לאליס (8 LTC Alice, 2 LTC Change)
- tx2 = הוצא מטבע 2 כדי לשלוח 15 LTCs לצ'רלי (15 LTC Charlie, 5 LTC Change)
- אליס משנה את tx1 להוצאת מטבע 2 במקום זאת, ושומרת את 10 ה-LTC הנוספים לעצמה:
- tx3 = הוצא מטבע 2 כדי לשלוח 18 LTCs לאליס ו-2 LTC בחזרה לבוב כשינוי
- tx1 ו-tx2 נפלו והוחלפו ב-tx3
ישנן מספר סיבות לכך שמתקפה זו תיכשל בפועל כמעט בכל פעם. אבל ההשלכות אם זה אכן יצליח יהיו חמורות מאוד, אז היה ברור שזה משהו שעלינו למנוע.
אנו אסירי תודה על כך שקורט לקח את הזמן ללמוד את העיצוב של MWEB, ועל כך שהגענו לחלוק את ההתקפה הזו איתנו. בשל חשיבות הממצא, צ'רלי תרם בנדיבות מכספו כדי לשלם לקורט פרס ראוי של 0.15 BTC.
התיקון
בהתחשב בסמיכות לתאריך השחרור המתוכנן, הפאניקה החלה להופיע. למרבה המזל, הבנתי שיש תיקון פשוט יחסית למתקפה המורכב מהכנסת מפתח ציבורי חדש בכל קלט שמונע שימוש חוזר בחתימות קלט.
במקביל עבדנו על הפרטים של המתקפה והתיקונים, יצרתי קשר עם כמה קריפטוגרפים מהשורה הראשונה שהציעו לעשות ביקורת אבטחה של העיצוב שלנו, שבו הם שקלו להשתמש כנקודת התחלה לעוד הפרויקט שהם עבדו עליו.
הצורך בעיצוב מתועד יותר רשמית התברר, אז ביליתי את השבועות הבאים בשכתוב של LIP-0004 לעיצוב שלם ומפורט יותר, תוך ביצוע שינויים קלים לאורך הדרך כדי להקשיח אותו היכן שאוכל. ברור שהייתי צריך לעשות את זה מההתחלה, כי היו לנו כמעט כמה מבקרים של LIP-0004 בחודש האחרון כמו שיש לנו במשך 1.5 השנים הקודמות 🙂
אמנם הייתי שמח לראות את כל העיניים האלה על העיצוב מזמן, אבל אני נרגש מכל המשוב שקיבלתי.
למרבה הצער, יש צורך לבצע כמה שינויים בקוד כדי להתאים כעת לעיצוב החדש, מה שאומר עוד כמה שבועות של עבודת פיתוח. למרבה המזל, כמעט כל השינויים יהיו בתת-פרויקט libmw, שהוא מאוד מודולרי ונבדק מאוד. אלו חדשות נהדרות, מכיוון שמשמעות הדבר היא שהשינויים צריכים להיות קלים יותר לביצוע, לבדיקה, והכי חשוב, לסקירה. סקירה זו יכולה להתבצע בקפידה על ידי מפתחי LTC האחרים, כך שאני לא מאמין שיש צורך לשלוח את השינויים בחזרה למבקרים. זה ישפיע על תאריך השחרור, אבל העיכוב צריך להיות מינימלי.
תהליך שחרור
הזכרתי בחודש שעבר שתהליך בניית השחרור היה גוזל זמן, והתסריטים היו מיושנים, אז ביליתי זמן בניקוי כל הסקריפטים הישנים ויצירת תהליך בנייה פשוט יותר, אוטומטי יותר. סקריפטי הבנייה ומפתחות האימות יישמרו ב-repo נפרד בעתיד. נכון לעכשיו, ה-ltc-release-build החדש נמצא ממש מתחת לחשבון ה-github האישי שלי, אבל אם זה יעבוד טוב עבור מהדורת MWEB, נעביר את זה ל-github org של litecoin.
עדכונים בציר הזמן
בחרתי לדחוף את הגרסה לינואר כדי להבטיח שיהיה לנו מספיק זמן לתקן את הפגיעות שנמצאה. מקווה שזו תהיה הפעם האחרונה 🤞. wenmweb.com שוב מעודכן.
v0.21.1 any day now™ בזמן אמת