26-05-2008, 09:41
|
|
|
חבר מתאריך: 26.05.08
הודעות: 120
|
|
אתה רוצה לעשות משהו בלתי אפשרי
הלקוח מתחבר לשרת. השרת רוצה לוודא שללקוח מותר לבצע פעולה מסוימת מולו. כדי שהלקוח יוכל לעשות את זה הוא חייבים להיות לו valid credentials. כמו שאדם שנוהג חייב שיהיה לו רישיון נהיגה תקף.
כדי שהשרת ידע שללקוח יש valid credentials הוא חייב להוכיח את זה לשרת. זה מה שנקרא authentication. אימות. כשאתה בא להיכנס ללונה-פארק אתה מראה את הכרטיס שלך. ככה אתה מוכיח לשומר שיש לך זכות להיכנס אליו.
עכשיו נניח שחושבים שמישהו התגנב ללונה-פארק בלי רשות, והשומר בודק את כל האנשים. למה שהוא לא יגרש מישהו? משתי סיבות: או שהוא יראה לשומר שוב את הכרטיס (=יתאמת מחדש, מה שאתה לא רוצה לעשות), או שהשומר יזכור אותו. זה שהאדם זוכר שהשומר נתן לו להיכנס לא עוזר לאדם אם הוא איבד את הכרטיס שלו והשומר שכח מזה. השומר יבעט אותו החוצה.
אין בעיה לחלוק סוד בין הלקוח לשרת. זה מה שעושים בהצפנה אסימטרית בדרך-כלל: חולקים סוד שישמש להצפנה סימטרית. אם הסוד שלך הוא רנדום טוב, אז למישהו מבחוץ יהיו חיים די קשים כדי להרוס לך, אבל גם אתה וגם השרת חייבים לדעת אותו.
עכשיו כשסיכמנו שהשרת חייב לזכור מידע, בוא נדבר על הדרישה האמיתית שלך, זו שמציאותית:
אתה רוצה לתת למישהו תוכנה שתתאמת מול שרת ותעבוד מולו. אתה גם רוצה ש:
(1) לא תצטרך להתאמת מחדש עם כל בקשה לשרת (=השרת יזכור את הלקוח)
(2) אתה רוצה שהאדם שהבאת לו את התוכנה לא יוכל להתאמת בעצמו (לדוגמה, אחרי פרק זמן מסוים, שבו עבד זמן השימוש בתוכנה)
נתחיל מ-1. השרת פשוט צריך לזכור שכתובת IP מסוימת מאומתת מולו ולאשר בקשות ממנה עד שיחלוף timeout מסוים. אתה רוצה משהו יותר מסובך? בבקשה, אבל זה הכיוון הכללי.
עכשיו 2: עם העותק של התוכנה שאתה נותן לאדם הזה אתה תיתן לו רישיון. אתה (השרת) תחתום על הרישיון בעזרת מפתח פומבי חזק. פעולת האימות של הלקוח מול השרת תהיה שליחת הרישיון לשרת. ברישיון יהיה כתוב מה וכמה (עד מתי) מותר למשתמש לעשות. המשתמש יוכל לשנות את הפרמטרים ברישיון, אבל אז החתימה תהיה פגומה, והשרת לא יסכים לאמת אותו.
אם האימתו נעשה בעזרת סיסמה מצד המשתמש, כל 2 היה מיותר, ואתה פשוט זוכר מי התאמת מולך. אין אפשרות אחרת. לשרת חייב להיות state מסוג כזה או אחר.
אני אומר זאת שוב כדי שזה יהיה ברור: או שלשרת יש state, או שהלקוח מאמת את עצמו יחד עם כל בקשה.
|