28-05-2008, 00:51
|
|
|
חבר מתאריך: 26.05.08
הודעות: 120
|
|
אוקיי. איפה הבעיה?
הלקוח שולח לשרת שם משתמש וסיסמה, השרת מוודא שהם לגיטימיים, ומהרגע הזה יש תקשורת בין הלקוח לשרת. - כדי שהלקוח לא ישלח את הפרטים המזהים שלו בכל בקשה לשרת מחדש, השרת חייב לזכור את הלקוח. אין לך שום ברירה אחרת.
- כדי שהלקוח לא ישלח את הפרטים המזהים שלו בסשן אחר, אתה חייב לשמור אותם לוקאלית על המחשב. זה מה שקורה כשמסמנים "remember my password" - הסיסמה נשמרת על המחשב. לא במישור הוודו הקסום.
עכשיו בוא נדבר על הפרטים. ממי אנחנו חוששים ומה אנחנו מתכננים לעשות בעניין?
אם אנחנו מפחדים שמישהו באינטרנט יראה את התקשורת שלנו וינסה להתחזות ללקוח בפעם אחרת, אפשר ללכת בכיוון כזה: - הלקוח שולח לשרת שם משתמש
- השרת שולח ללקוח מספר אקראי
- הלקוח משתמש בסיסמה שלו ובמספר האקראי בצורה בטוחה כדי לייצר מספר חדש (לדוגמה, עושה MD5 על שניהם)
- הלקוח שולח את התוצאה הזו לשרת
- השרת מבצע את התהליך הזה אצלו, ובודק שהתוצאה זהה
מצד שני, נותרת הבעיה שאם מישהו רואה את המספר האקראי, הוא עדיין יכול לנסות לבצע dictionary attack על הסיסמה...
אם אתה רוצה להגן על עצמך מפני MITM, ההודעות צריכות להיות חתומות. לכל לקוח יהיה המפתח הפומבי של השרת, והוא יחתום על ההודעות שהוא שולח ללקוחות.
ועכשיו ישנה הבעיה שהלקוח יחבר דיבאגר/סניפר לתוכנה, יראה מה עובר איפה, ויגלה את הסיסמה שהוא בעצמו הזין לתוכנה. איך אפשר להגן מפני הדבר הזה? הלקוח צריך לא לדעת מה הסיסמה שהוא מכניס לתוכנה? באמת לא כל כך הגיוני...
|