פרשת Coldcard: הכספת נשארה סגורה,
אבל המפתח היה צפוי

פרשת Coldcard אינה מעידה על חולשה ברשת הביטקוין עצמה, אלא על כשל בתהליך שבו נוצר הסוד שמגן על הכסף. זהו שיעור חשוב לכל מי שסומך על טכנולוגיה – לא רק למחזיקי מטבעות קריפטוגרפיים.
מאת ד”ר טדי לזבניק, החוג למערכות מידע, הפקולטה למדעי המחשב והמידע, אוניברסיטת חיפה
כששומעים כי אלפי כתובות ביטקוין רוקנו בתוך זמן קצר, התגובה הכי טבעית היא כמובן לומר: “פרצו לביטקוין” כפי שנכתב במספר כתבות. אולם, הניסוח הזה מטעה, אף על פי שמדובר בתגובה ראשונית טבעית. במקרה שנחשף סביב ארנקי החומרה של Coldcard, אין עדות לכך שהתוקפים שברו את ההצפנה של רשת הביטקוין, שינו מידע בבלוקצ’יין או עקפו את מנגנון האימות המבוזר. ההפך הוא הנכון – הרשת פעלה בדיוק כפי שתוכננה מכיוון שהיא קיבלה עסקאות שנחתמו באמצעות מפתחות פרטיים תקפים, אימתה אותן והעבירה את המטבעות לכתובות החדשות. הבעיה הייתה, ככל הנראה, שהתוקפים הצליחו לשחזר את אותם מפתחות פרטיים.
לא פריצה לבנק, אלא שכפול של המפתח
מבחינת רשת הביטקוין, מי שמחזיק במפתח הפרטי הוא מי שמוסמך להעביר את המטבעות. אפשר לחשוב על זה קצת כמו הסיסמה לחשבון הבנק שלכם. הרשת אינה יודעת אם החתימה הופקה בידי הבעלים, בידי יורש חוקי או בידי תוקף שהצליח לנחש או לשחזר את הסוד – בדיוק כמו שכל מחשב שיכול להתחבר לחשבון הבנק שלכם אם יכיר את פרטי המשתמש והסיסמה הרלוונטיים. אפשר לדמות זאת לגנב שלא פרץ את קירות הבנק, לא ניטרל את מערכת האזעקה ולא שינה את רישומי החשבון, אלא נכנס עם מפתח שהמנעול מזהה כמקורי. לכן מדובר בכשל במוצר ובשרשרת האמון שסביב רשת הביטקוין, ולא בכשל בפרוטוקול הביטקוין עצמו.
ההבחנה הזאת חשובה גם מעבר לעולם הקריפטו. במערכות מידע, החוסן הכולל אינו נקבע רק לפי חוזק האלגוריתם המתמטי. הוא נקבע לפי החוליה החלשה ביותר: יישום התוכנה, רכיב החומרה, תהליך הייצור, עדכוני הקושחה, בדיקות האיכות, שרשרת האספקה והאופן שבו המשתמש מפעיל את המערכת. אפשר לבנות פרוטוקול הצפנה חזק מאוד, ואז לאבד את מרבית ההגנה בגלל בדיקה לוגית אחת, הגדרה שגויה או הנחת עבודה שלא נבדקה כראוי.
כשהאקראיות אינה באמת אקראית
בעת יצירת ארנק חדש, המכשיר מייצר ביטוי שחזור, המכונה Seed phrase, שממנו נגזרים כל המפתחות והכתובות של המשתמש. הביטחון אינו נובע מכך שאיש אינו יודע כיצד פועל האלגוריתם, אלא מכך שהערך הראשוני נבחר מתוך מרחב עצום ובאופן בלתי צפוי. כשהבחירה אקראית באמת, מספר האפשרויות גדול כל כך עד שניחוש המפתח אינו מעשי גם באמצעות כוח מחשוב משמעותי.
אולם כאשר מחולל האקראיות מוגדר באופן שגוי, כמו במקרה הזה, מרחב האפשרויות עלול להצטמצם בצורה דרמטית ולהפוך את יכולת הניחוש לריאלית. לפי הניתוח הטכני שפורסם, בחלק מגרסאות Coldcard הייתה בדיקה לוגית שבחנה אם הגדרה מסוימת קיימת, במקום לבדוק אם היא אכן מופעלת. כתוצאה מכך, תהליך יצירת הסוד נשען במקרים מסוימים על מחולל שמייצר מפתחות בצורה שיחסית קל להתחקות אחריה.
זו נקודה קריטית: מחשב אינו זקוק לכך שהמפתח יהיה “קל” במובן היומיומי. די בכך שהמפתח נבחר מתוך קטלוג קטן בהרבה מהמתוכנן. במקום לחפש בתוך מרחב כמעט עצום, התוקף יכול לשחזר את התנאים המקוריים ליצירת המפתח, לייצר מיליוני מועמדים (דבר לא קשה עם מחשוב מודרני), לגזור מהם כתובות ביטקוין ולהשוות אותן לבלוקצ’יין הציבורי. כאשר נמצאת התאמה לכתובת שמחזיקה מטבעות, התוקף יכול להפיק את המפתח המתאים ולחתום על עסקה תקפה.
מכאן נובע הפרדוקס של האירוע: הארנק יכול להישאר כבוי, מנותק מהאינטרנט, לא מחובר מעולם למחשב נגוע ואף נעול בכספת — ועדיין להיות פגיע. התוקף אינו חייב לגעת במכשיר. הוא אינו צריך להתקין עליו תוכנה זדונית או ליירט תקשורת. הוא יכול לבצע את החיפוש במחשב שלו, הרחק מהקורבן. ארנק “קר” מגן היטב על מפתח לאחר שנוצר, אך הוא אינו מסוגל להפוך מפתח חלש למפתח חזק. אם הסוד נולד עם מעט מדי אקראיות, הניתוק מהאינטרנט אינו מרפא את הבעיה.
מה צריכים משתמשי הקריפטו לעשות?
הלקח הראשון הוא שעדכון תוכנת המכשיר, או הקשחה, חשוב מאוד, אך אינו מתקן בדיעבד מפתח שכבר נוצר. משתמשים שביטוי השחזור שלהם הופק בגרסה פגיעה צריכים לפעול לפי הנחיות היצרן: לעדכן תחילה את המכשיר, ליצור ארנק חדש לחלוטין עם ביטוי שחזור חדש, לאמת את כתובת הקבלה על מסך החומרה ולהעביר תחילה סכום קטן לבדיקה. רק לאחר שהתקבלה העסקה והכול נבדק, יש להעביר את היתרה. אין למחוק את הארנק הישן לפני שמוודאים שההעברה הושלמה בהצלחה.
הלקח השני הוא להתייחס לאי־ודאות כאל סיכון. מי שאינו יודע באיזו גרסה נוצר ביטוי השחזור שלו, או אינו בטוח אם המכשיר הוגדר כראוי, אינו יכול להסיק מכך שהכול תקין. באבטחת מידע, היעדר הוכחה לכשל אינו הוכחה לבטיחות. עבור סכומים משמעותיים, עדיף לבצע מעבר יזום לארנק חדש שנוצר בסביבה מעודכנת ומתועדת, גם אם הדבר כרוך בזמן, בעמלות ובאי־נוחות זמנית.
הלקח השלישי הוא להיזהר דווקא בזמן משבר. אירועי אבטחה מולידים במהירות הודעות מזויפות, קישורים ל”תיקון דחוף”, נציגי תמיכה מתחזים ואתרים שמבקשים להקליד את מילות השחזור. ביטוי השחזור לעולם אינו אמור להימסר לאתר, לצ’אט, לאפליקציה לא מוכרת או לאדם אחר. יש להסתמך רק על ערוצי היצרן הרשמיים, להקליד כתובות באופן עצמאי ולא מתוך הודעה שהתקבלה, ולבדוק כל צעד לפני אישור עסקה.
לבסוף, אסור לרכז את כל האמון בנקודה אחת. עבור נכסים בהיקף גדול, ראוי לשקול מנגנון רב־חתימתי, שבו נדרשים כמה מפתחות כדי להעביר כספים, ורצוי שמפתחות אלה ייווצרו במכשירים של יצרנים שונים. כך כשל אצל ספק יחיד אינו מוביל בהכרח לאובדן מלא. עם זאת, גם פתרון מורכב צריך להיות מתועד, מתורגל וניתן לשחזור. מורכבות שאינה מנוהלת עלולה להפוך בעצמה לסיכון, למשל במקרה של אובדן מכשיר, מוות של בעל הארנק או טעות בתהליך הגיבוי.
המסקנה אינה שארנקים קרים חסרי ערך, ובוודאי לא שהביטקוין “נפרץ”. המסקנה היא שמונחים כמו “קר”, “מנותק” ו”חומרתי” מתארים ארכיטקטורה, לא תעודת ביטוח. אבטחה אמיתית מחייבת לשאול כיצד נוצר המפתח, מאין הגיעה האקראיות, כיצד נבדק הקוד, כיצד מופצים עדכונים ומה עושים ביום שבו הנחת יסוד מתבררת כשגויה. בפרשת Coldcard הדלת נשארה נעולה. הבעיה הייתה שמפעל המפתחות ייצר סודות מתוך קטלוג קטן מדי.