Going Deepnet, Part 2
מאת iTK98 בתאריך 13/01/12, תחת כללי
חלק א' היה דיון מקדים, ניסתי להראות את החשיבות ואת החיוניות של אנונמיות ברשת האינטרנט אשר משרתת את חופש הביטוי באופן אשר מגן על אומר הדברים, וכך למעשה מונעת את עריצות השלטון כנגד ביטויים אשר אינו מעוניין שישמעו במרחב הציבורי. אנונימיות היא כנראה הכוח אשר מונע מדמוקרטיה פלורליסטית מלהפוך לדמוקרטיה טוטאליטרית (עריצות הרוב). בחלק ב', אדון באופן סצפיצי ברשתות נסתרות, אשר מוכרות גם בכינוי Deepnet, הדיון יהיה בעל גוון טכנולוגי וטכני במהותו.
נתחיל עם סקירה היסטורית, התנסות ברשתות אנונימיות ומוצפנות החל כבר ב-1995 בפרוייקט שנקרא "Onion Routing" (מעתה OR) כאשר המטרה היא למונע האזנה לתשדורת, ניתוח ותקיפה, זאת נעשה על-ידי אנונימיזציה של הצדדים המדברים והצפנה של השיח שלהם1. פרוייקט OR עבר מספר גלגולים לפני שהפך ל-"The Onion Router" המוכר לנו היום יותר בשם פרוייקט Tor.
אך בעוד שפרוייקט OR עדיין נמצא בשלבי נסיון, ב-1998 הוכרזה הרשת Freedom Network על-ידי חברה פרטית בשם ZeroKnowlegde, כאשר הטכנולוגיה הנמצאת בשימוש ברשת זו דומה לזאת המשמשת את פרוייקט OR. המודל של הרשת היה קנייני ומסחרי, ואולי זה אשר הוביל לסגירתה בסוף שנת 2001. בשנת 2000 פרוייקט OR כבר סיים את הגלגול הראשון שלו, שהיה למעשה Proof-of-Concept. בעקבות הפעילות הראשונית נכתבו מאמרים והועלו בעיות והיה נסיון לפתור את הבעיות שנמצאו עד כו בישום מחודש, הדור השני של OR. שלב זה התחיל בשנת 2000 והגיע לסיימו ב-2003 עם התחלתו של פרוייקט Tor2.
חוץ מפרוייקט Tor ישנם עוד פרוייקטים דומים, כמו Freenet ו-I2P אשר החלו את דרכם בשנת 2000 ו-2003 בהתאם. בעוד שהם מציעים יכולות מעט שונות, לדוגמה פרוייקט Freenet אשר מציע תפוצה של המידע בין המשתתפים השונים ברשת, כך שגם אם המקור למידע נעלם, חלקים ממנו עדיין נמצאים אצל משתתפים שונים ובכך המידע עדיין זמין. פרוייקט I2P מציע רשת נסתרת בלבד אשר יש לה אופי של ריכוזיות במידה מסויימת (שרת IRC, פורומים וכיוצ"ב שהרשת מציעה למשתמשיה). אך עם זאת, הטכנולוגיה שבה הם עושים שימוש דומה ל-OR, לכן אני אנתח אך ורק את Tor בהמשך המאמר3.
עתה נעבור לסקירה קצרה של המושג 'אנונימיות'. פירוש המילה אנונימיות מציגה דמות חסרת פנים, דמות שאין לה מוטיבים יחודיים, דמות ללא שם. יש לשים לב שקיים הבדל בין אנונימיות לבין זהות בדויה – שלה מוטיבים יחודיים, גם אם הם לא מצביעים על הדמות האנונימית העומדת מאחוריה. אנונימיות הינה נגזרת של הזכות לפרטיות, משמע שאם אדם בוחר לפרסם כתב כלשהו ברבים באופן אנונימי יש לו את הזכות לכך, כמובן שבחיינו היום אפשרות זו מוגבלת למצבים מסויימים שנקבעו בחוק. חופש הביטוי גם כן נשען על אנונימיות בצורך להגן על המבטאים מפני עריצות החוק והשלטון.
אז איך אנחנו משיגים אנונימיות ברשת? בכדי להשיג אנונימיות ברשת אנחנו צריכים להסתיר את מרכיבי הדו-שיח:
- מי שלוקח חלק בדו-שיח, המוען והנמען4.
- תוכן הדו-שיח, המסר.
כאשר המרכיב הראשון הוא בעל חשיבות גבוהה יותר, לפעמים אנחנו נרצה לפרסם את תוכן הדו-שיח בפומבי, אך להישאר עלומי-שם, או לגשת למידע פומבי באופן אנונימי. Tor מאפשרת להשיג את שני היעדים, (1) שמירה על המוען בלבד, או (2) שמירה על המוען, נמען ותוכן ההודעה. יש לשים לב כי לא ניתן להשיג אנונימיות מושלמת, אלא אך ורק אנונימיות מספקת, על-פי מודל זה פרוייקט Tor פועל, משמע השגת אנונימיות מספקת5. הסתרת המרכיבים בדו-שיח משיגים על-ידי הצפנת ההודעה, לכן לא יודעים מה אנחנו שולחים ולמי, ואילו מי שנמצא בצד השני (נמען) יראה מה נשלח, אך לא ידע מי שלח לו את ההודעה.
עם סיום ההקדמה הארוכה, אני אעבור לדבר על איך פרוייקט Tor בדיוק עובד. כבר הזכרתי כי יש שימוש ברעיון שנקרא Onion Routing, וכזכור, ל-Tor יש שני מצבים, (1) אנונימיות המוען בלבד ו-(2) אנונימיות של המוען, הנמען והמסר. תחילה אני אסביר את 1:
קלינט שמתחבר לרשת Tor יוצר ראשית מעגל (Circuit) במעגל יש מספר קשרים (Node) שדרכם הקלינט בוחר לעבור. את זהות הקשרים הוא מוודא דרך קשר מיוחד (Directory) שמחזיק את המפתחות הציבוריים שלהם. עם הקשר הראשון (A) בעזרת פרוטוקול דיפי-הלמן מוחלף מפתח סימטרי (Key-A) שבעזרתו השיח העתידי יוצפן, לאחר מכן המעגל מורחב לקשר נוסף (B), כאשר התקשורת מתבצעת דרך קשר A ובאותה דרך מוחלף מפתח סמטרי נוסף (Key-B), המעגל מורחב שוב לקשר שלישי (C) (עובר תחילה דרך A, ולאחר מכן ל-B ולבסוף ל-C) ויש לנו מפתח נוסף (Key-C). לשם הבהרה, רק הקלינט והקשר X מכירים את המפתח המתאים להם Key-X. ובכך יצרנו מעגל שבעזרתו נוכל לצאת אל רשת האינטרנט באופן אנונימי.
לכן, כאשר אני רוצה לגשת לאתר Y, אני יוצר מעגל אשר מורכב מ-3 קשרים, A,B ו-C, כאשר אני חולק עם כל אחד מהם באופן בלעדי ובהתאם מפתח Key-A, Key-B ו-Key-C, קשר B לא יודע על קיומי, אלא רק על קיום קשרים A ו-C, ואילו קשר C יודע רק על קיום קשר B ושרת Y (היעד). את ההודעה אני עוטף תחילה ב-Key-C, לאחרו מכן ב-Key-B ולבסוף ב-Key-A.
ההודעה עוברת תחילה דרך קשר A, הוא לא יודע את תוכנה ומה יעודה שכן היא עטופה על-ידי Key-B ו-Key-C והיא הולכת לעבור דרך קשר B. קשר A מסיר את העטיפה בעזרת Key-A, ומעביר את ההודעה לקשר B. קשר B לא יודע מה מקור ההודעה, מה תוכנה ומה יעודה. קשר B מסיר את העטיפה על-ידי Key-B ומעביר את ההודעה לקשר C. קשר C יודע מה תוכן ההודעה ומה יעודה, אך לא יודע מה מקורה, הוא מסיר את העטיפה האחרונה בעזרת Key-C ומעביר את הבקשה לשרת Y.
ההודעה החוזרות (תשובה) עוברת את אותו תהליך, קשר C מקבל את התשובה ועוטף אותה בעזרת Key-C ואז מעביר אותה לקשר B שהוא עם קבלת התשובה עוטף אותה בעזרת Key-B ומעביר אותה הלאה לקשר A, קשר A לבסוף עוטף את התשובה בעזרת Key-A ומחזיר אותה לקלינט שלו יש את כל המפתחות והוא מאחזר את ההודעה המקורית של שרת Y.
באופן שתואר לעיל פרוייקט Tor משיגה את אנונימיות המוען, התקשורת מוצפנת עוד לפני כניסתה לרשת Tor, ולכן האזנה פאסיבית תהיי לא אפקטיבית. בנקודת היציאה (Exit Point) מרשת Tor התקשורת כבר אינה מוצפנת וחשופה למפגעים שונים שיש לקחת בחשבון, כמו איסוף והזרקת מידע אשר יכולים להתבצע על-ידי קשר C וכן קשר C פגיע מחדש להאזנה פאסיבית – אך המאזין לא יודע מה מקור ההודעות (או שהן פשוט יפלילו את מי שמריץ את קשר C), לכן הן מאבדות מהטעם שלהן.
את היעד השני של אנונימיות (2) Tor משיגה על-ידי יישום שלו היא קוראת Hidden Services שבמקרה זה המוען, נמען והמסר אנונימיים (אף אחד חוץ מהמוען והנמען אינו מודע למסר). במצב זה התקשורת לעולם אינה עוזבת את רשת Tor לכן מוצפנת מתחילתה ועד סוף ויהיה שימוש במעגל (Circuit) כפול.
תחילה צריך ליצור Hidden Service, משמע פירסום שלו בתוך רשת Tor, לשם כך נבחרים מספר קשרים שונים אשר ישמשו כמאזינים עבורו, נוצר מעגל אליהם והם מתבקשים לשמש כ-Introduction Point, לקשרים הללו מועלה המפתח הפומבי של השירות הנסתר. בעוד שהקשרים יהיו מודעים לתוכן (שכן הועלה אליהם המפתח הפומבי שמותאם עם ה-Hidden Service) הם לא יהיו מודעים לכתובת IP, שכן התקשרות התבצעה בעזרת מעגל (תקשורת אשר עוברת דרך 3 קשרים באופן מוצפן).
השלב השני הוא יצירת Hidden Service Descriptor שיכיל את המפתח הפומבי ותקציר של קשרים אשר משמשים כ-Introduction Points זאת בכדי שהשירות הנסתר יהיה נגיש ברשת Tor. המידע הזה יועלה לרשת DHT כאשר הוא חתום במפתח הפרטי של יוצר ה-Hidden Service.
כאשר קלינט כלשהו מבקש לגשת ל-Hidden Service כלשהו, הוא ידלה את המידע שהועלה לרשת DHT שמותאם עם ה-Hidden Service Descriptor ובכך הוא יזכה לדעת מי הם הקשרים אשר משמשים כ-Introduction Points. לכן קלינט שרוצה לגשת ל-Hidden Service חייב להכיר את הכתובת של השירות מראש. כאשר הקליט מציג בקשה לסיומת .onion הוא מבקשת מידע (מבקש את ה-Hidden Service Descriptor מהרשת DHT, בתקווה שקיים מידע כלשהו על הכתובת הזאת) ובכך הוא מקבל את המפתח הציבורי של השירות ואת הקשרים אשר פועלים כ-Introduction Points.
השלב הבא שהקלינט מבצע הוא יצירת מעגל לקשר שישמש כ-Rendezvous Point שיתקשר בין המעגל של הקלינט למעגל של ה-Hidden Service. ל-Rendezvous Point נמסר סיסמא חד-פעמית (Cookie), ולאחר מכן הקלינט יוצר מעגל תקשורת לאחד מה-Introduction Points (על-ידי מעגל, לא קשר ישיר) ומוסר לו מידע בדבר ה-Rendezvous Point שימסר ל-Hidden Service, ההודעה עטופה על-ידי המפתח הפומבי של השירות ובין היתר היא מכילה את תחילתה של לחיצת היד להחלפת מפתחות בעזרת פרוטוקול DH.
ה-Hidden Service יוצר מעגל תקשורת אל ה-Rendezvous Point ותו"כ שימוש בסיסמא החד-פעמית מאשש את זהותו ונותן את המחצית השניה של לחיצת היד בפרוטוקול DH וזה המפתח אשר יצפין את התקשורת כאשר היא מגיעה ל-Rendezvous Point. כל התקשורת בין הקילנט וה-Hidden Service תעבור דרך ה-Rendezvous Point כאשר כל אחד משתמש במעגל שיצר, וכאשר התקשורת יוצאת מהמעגל בכל צד, היא עדיין תהיי מוצפנת בעזרת המפתח שהוחלף בעזרת פרוטוקול דיפי-הלמן.
היישום הכפול של מעגל תקשורת ב-Hidden Service מאפשר לכל צד לשמור על האנונימיות שלו, שכן כל צד בוחר בעצמו את המעגל תקשורת שלו. למרות שעם הגעת ההודעה ל-Rendezvous Point המעגלי תקשורת כביכול הסתיימו, ההודעה עדיין מוצפנת על-ידי המפתח שנחלק בין הקלינט לבין ה-Hidden Service. כל צד אנונימי לצד השני, ובכך המוען, הנמען והמסר נותרים אנונימיים.
בכך סיימתי לתאר איך פרוייקט Tor מצליח להשיג אנונימיות (1) של המוען בלבד, או (2) של המוען, נמען והמסר. עם זאת, יש לזכור כי השימוש ב-Tor לכשעצמו משיג אנונימיות מספקת אך ורק ברמת הקישוריות, בעוד שהוא הופך את התקשורת עצמה לאנונמית הקלינט יכול להסגיר את הזהות שלו בעצמו ובכך התקשורת האנונימית לא תהיה מספיקה בכדי למנוע את זיהוי הקלינט.
אנונימיות ברמת התוכנה ניתן להשיג במספר דרכים, אחת מהן היא Tor Browser Bundle, או לכל הפחות להשתמש בתוסף לשועל האש TorButton, למרות שפרוייקט Tor אינו ממליץ להשתמש בתוסף שכן הם לא מצליחים לעמוד בקצב הפיתוח של שועל האש. התוסף דואג להפריד את המידע האישי שנשמר על המחשב מהמתבצע בגלישה אנונימית (לדוגמה, אי-שמירת מוטמן, ביטול של פלאש, ניקוי עוגיות, ביטול השלמה אוטומטית של פורומים וכיוצ"ב). מי שמעוניין בפתרון יותר מקיף של אנונימיות אני ממליץ לו לבחון את הפצת הלינוקס המוכרת בשם Tails, שמנסה להטמיע אנונימיות בכל רמות האפלקציה השונות. היא כוללת כלים נוספים של הצפנת מידע הנשמר ועוד.
שכן חלק זה מעט ארוך אני אוסיף חלק נוסף. בחלק ג' אני אדון בחלשות של פרוייקט Tor ובדרכים להילחם ברשת האנונימית.
הערות:
1למעשה אנחנו לא יודעים מי הצדדים הלוקחים חלק בשיח, ומה תוכן השיח שלהם, אך אנחנו מודעים לעצם קיומו של שיח כלשהו.
2השלב הראשון נקרא דור 0, השלב השני נקרא דור 1, ו-TOR שאנחנו מכירים היום נקרא דור 2.
3I2P הציגו מושג חדש "Garlic Routing" שמציג הרחבה של המושג "Onion Routing". ניתן לאחד מספר הודעות נפרדות אל תוך הודעה אחת, כאשר כל אחת מהן יכולה להכיל יעוד שונה שיוודע במהלך הניתוב בתוך הרשת האנונימית.
4מוען במקרה שלנו הוא יוזם הפעולה, אם כתיבה של מסמך כלשהו ופרסמו, ואם קריאה של מסמך אחר באופן אנונימי, והנמען הוא תמיד הצד השני, הנמצא בעבר השני של המוען.
5אנונימיות מוחלטת אומרת כי לא רק שלא נהיה מודעים למרכיבי השיחה, אלא אף לקיום השיחה עצמה.
מקורות:
14/01/12 בשעה 14:08
אם הבנתי אותך נכון, אחד מה introductions points מכיר את הIP האמיתי של ה hidden service?
והIP של שלושתם רשום ב hidden service descriptor, אז כל מה שצריך לעשות בשביל למצוא את הhidden service של להגיע לintroduction point שמכיר את הHidden service ולחלץ אותו משם?
15/01/12 בשעה 4:12
לא, ה-hidden service שומר על מעגל תקשורת (המורכב משלוש קשרים כמו שתואר ב-1) ל-introduction points באופן קבוע, כל התקשורת "הלוך ושוב" מתבצעת דרכם. ה-introduction points מכירים רק את המפתח הפומבי של השירות של ה-hidden service.
ה-hidden service descriptor מכיל בין היתר את ה-introdcution points וכמו שנאמר הם אינם מכירים את הכתובת IP של ה-hidden service שכן התקשורת מתבצעת דרך מעגל.
כל פעם שאמרתי מעגל (circuit) התכוונתי לתקשורת אשר מתבצעת באופן מוצפן דרך שלוש קשרים שונים, שעם כל אחד מהם נחלק מפתח יעודי.
16/01/12 בשעה 9:45
באופן בלתי פורמלי אני נכנס לתקופת המבחנים (שבועיים לסוף הסמסטר), לכן החלק השלישי יתעקב בין חודש לחודשיים, מקווה שלא יותר.
מי שלא יכול להתאפק ומעוניין לסקור את הנושא בעצמו, הנה מספר נקודות התחלה, אלה הם חלק מהמקורות לחלק השלישי:
חולשות בפרוייקט Tor:
http://en.wikipedia.org/wiki/Tor_%28anonymity_network%29#Weaknesses
http://freehaven.net/anonbib/#hs-attack06
וכמה דרכים להילחם ברשתות אנונימיות שהוצעו על-ידי ד"ר נמרוד קוזלובסקי:
http://www.holesinthenet.co.il/archives/35306
כמובן שאני התכוונתי להציג ביקורת כנגד השיטות שתוארו בפוסט שלו. קצת מוזר שהוא האדם אשר הגן על חופש הביטוי כאשר הם פגעו בחברות הסלולר (היה להם קושי ליישם את החוק, כנראה מבחינה כלכלית בלבד):
http://shimshon.net/?p=88