לא זיוף תעודת הזהות הדיגיטלית של המוסד אלא דווקא הוכחה שהדרך בה בני אדם סומכים אחד על השני היא לקויה מיסודה. בשבוע שעבר התבשרנו כי חברת DigiNotar, אשר מנפיקה אישורי SSL, נפרצה והאקרים הפיצו תעודות SSL באמצעותה. תעודות SSL הן הבסיס לתקשורת באינטרנט; כאשר אני גולש לאתר מסוים, אני צריך הבטחה כי אכן מדובר באותו אתר ולא מדובר במישהו שפרץ לי למחשב וגרם לכך שכשאני מקיש את הכתובת google.com אני מגיע ל123.com. לכן, ישנם מספר גורמים מאשרים אשר מנפיקים תעודות כאלה.
הבעיה היא כזו: יש רשימה סגורה של גורמים מאשרים, אשר מתעדכנת על ידי יצרניות הדפדפנים. כל גורם מאשר יכול לאשר כל כתובת אינטרנט שהיא, ואולי כאן הבעיה. הגורמים המאשרים דומים (אולי קצת) לחבר שאנו יכולים לסמוך עליו: כשהוא אומר שמוסך מסוים לא יגנוב לך את הרכב, אנו סומכים עליו. בחיים האמיתיים יש לנו כל מיני גורמים מאשרים: משרד הרישוי, לדוגמא, מאשר שאנו כשירים לנהיגה, בנק ישראל מאשר שהבנק בו אנו סוחרים לא יגנוב את כספנו יותר מדי, הרבנות הראשית מאשרת לנו שהמזון שאנו אוכלים כשר.
אבל, מעל למוסדות האלה יש לעיתים מוסדות נוספים, כמו ארגוני צרכנים, שנותנים הכשרים נוספים. הבעיה מתחילה לא שם, אלא במקום אחר: האינטרנט היא תשתית מבוזרת; אין לה גורם מרכזי אחד (למעט ICANN, שידון אחר כך) שיודע מי הוא מי. לכן, הוחלט להקים תקן שיאפשר הוצאת תעודות SSL שאומרות, בבסיסן, שהאתר בו אתה גולש נמצא בבעלות של אדם מסוים, ובעלות זו נבדקה על ידי החברה שהוציאה את התעודה.
אלא, שמשהו קטן רקוב במנגנון הזה: אנו סומכים כל כך הרבה על אותם גורמים מאשרים שאנו לא טורחים לבדוק (וגם לא תמיד יכולים) מה קורה מסביב. הפתרון לכך אינו כל כך יעיל, אבל הוא אפשרי: בעת ההתחברות לא רק נבדוק את זהות האתר אלא גם מה הוא יודע עלינו. כלומר, אם אני אנסה להתחבר לחשבון הGoogle שלי, גוגל תגיד לי: "היי, אתה יהונתן קלינגר, ואני יודעת עלייך ש(1) גלשת אתמול בשעה 17:30 לכתבה של סטס סגין בYnet יחסים ו(2) קיבלת הודעת דואר אלקטרוני עם הכותרת "רוצה להפגש מחר?" בשעה 21:27"; רק אם הפרטים האלה יופיעו ויהיו נכונים, נעבור להזין את הססמא השניה. מצד אחד, אנו נוותר על הפרטיות שלנו אבל מצד שני נדע בדיוק מי האתר.
כן, יש בכך חסרון של מתקפת Man in the middle, כלומר: מי שיפרוץ את תעודת הSSL יוכל לגשת, בזמן אמת, לשרתים של גוגל ולהביא את המידע תוך שהוא מתחזה אליי. הפתרון לכך יהיה, ככל הנראה, על ידי פתרון טכנולוגי: אפשר להציג לך בתוך הטקסט מידע שמכיל את כתובת הIP שביקשה את המידע (כלומר: מי ניסה לקבל את המידע הזה מהחשבון שלך) ואז תדע אם התחברת באמצעות מתווך, אפשר פשוט להגביל את ההתחברות למספר מוגדר של מכשירים מאושרים.
שום דבר לא מושלם, אבל משהו רקוב באמת בדרך שבה אנחנו מזדהים באינטרנט.
בהערת אגב בלבד, תעודות הזהות הביומטריות שלנו יונפקו עם מפתח דומה.
לדעתי, הפתרון שהוצע ע"י הצגת כתובת ip למשתמש על מנת שיוכל לדעת אם יש man in the middle הוא בעייתי בעיקר מצד המשתמש הממוצע. במיוחד כיום שהתקשורת הופכת להיות יותר ויותר ניידת. אנשים מתחברים דרך רשתות פתוחות שנקרות בדרכם או בבית קפה וכו' בלי שיש להם מושג מהי כתובת הרשת המקומית כך שגם אם יוצג בפניהם כתובת אירנית הם עדיין יאשרו וכך לא הרווחת כלום. מעט אותם 'פרנואידים' שמודעים לנושא של אבטחת מידע. אבל הם לצערי בודדים.
כבר יש פתרונות בקנה שמתמודדים עם תעודות מזויפות ובעיית ה-MitM
1. לבזר את מתן האמון למספר נוטריונים שכל אחד מהם מסתכל מנקודת המבט שלו ברשת על התעודה ולקבל אותה רק אם כולם מסכימים. פרוייקט כזה קיים היום בשם perspectives
2. פעולה שנקראת pinning שנכנסת לסטנדרט המומלץ לדפדפנים – הדפדפן זוכר את התעודה הקודמת ומודיע אם השתנתה התעודה בכניסה נוספת. יש כיום תוסף לשוא"ש שמממש את הרעיון ונקרא Certificate Patrol
3. מעבר לשימוש במודל אחר שמבוסס על שמות מתחם וטכניקה שנקראת DNSSEC שבו שרתי ה-DNS עצמם מכילים את המידע אודות התעודות. המידע אודות כתובת האתר והתעודה שמזהה אותו יגיעו מאותו מקור… מצד שני מי שפרץ לשרת ה-DNS שלך יכול להחליף גם את הכתובת וגם את התעודה.
בסופו של דבר משלוח התעודה ואימותה באותו אמצעי תקשורת (רשת האינטרנט) הוא בעיתי.
הרעיון שלך של אימות האתר באמצעות פרטים אישיים הוא בעיתי בלשון המעטה, הוא דורש חשיפת פרטיך לכל מאן דהוא מצד אחד ולא מוסיף הרבה מאחר שהוא לא פותר את הבעיה העיקרית שאין לה פתרון – MitM. הבנק Bank of America משתמש בתמונה שאותה אתה בוחר והוא מראה לך כחלק מהכניסה לאתר, אולם הוא מסתמך על כך ש-MitM יזוהה ברמת השרת (הרבה כניסות של חשבונות שונים מאותה כתובת) וכך מונע מתקפה בה התוקף פשוט שואל את השרת מה התמונה הנכונה. הוא לא פותר את הבעיה אם התוקף הוא מדינה כמו איראן שיכולה ליצור מתקפת MitM על רשת שלמה. כנ"ל לגבי הרעיון של אבי – לא יעזור נגד תוקף שמסוגל ליצור מתקפת MitM – הוא פשוט יזייף גם את הכתובת שאתה רואה.
מסקרן אותי מה כוונתך ב"שהדרך בה בני אדם סומכים אחד על השני היא לקויה מיסודה" – מדובר על תוכנה שסומכת על השרת אליו היא מתחברת (מודל של לקוח מול שרת) ולא אנשים אחד על השני (מודל של לקוח מול לקוח).
ועוד דבר: הרמיזה שלך להקבלה בין המצב הזה לבין התעודות הביומטריות שגויה ומטעה. מדובר על מנגנון PKI פרטי ולא ציבורי ואי אפשר להשתמש באותה שיטה מכיוון שיש רק גורם אחד שיכול להנפיק תעודות… כל עוד הוא לא נפרץ. אני לא אומר שהוא מאובטח בצורה מושלמת – אבל הוא לא פגיע לאותן מתקפות.
— אריק
שתי הערות לתגובה הקודמת:
פתרון ה-pinning הוא כנראה מה שגרם למשתמשים באיראן לזהות שמשהו רקוב בתעודות שמזהות את Google. דפדפן Chrome עושה כבר היום pinning, אבל רק עבור אתרים של Google.
פתרון אפשרי רביעי משתמש בזה שלכל אחד מהאתרים שחשובים לך יש כבר משהו סודי, שרק האתר והמשתמש מכירים: הסיסמה של המשתמש לכניסה לאתר. יש שיטות לעשות הזדהות הדדית, של המשתמש לאתר ושל האתר למשתמש, בלי לחשוף את הסיסמה. זה נקרא Zero Knowledge Password Proof. ואז אין צורך בשום ידע נוסף שיש לאתר על המשתמש.