203.4448 2011( סמסטר חורף תשע”ב ( SSL/TLS 10 – הרצאה

‫אבטחת מחשבים ורשתות‬
203.4448
(2011) ‫סמסטר חורף תשע”ב‬
SSL/TLS – 10 ‫הרצאה‬
:‫עזר‬ ‫ספרות‬ Dierks, Allen: The TLS Protocol. RFC 2246, 1999.
Dierks, Rescorla: The Transport Layer Security Protocol (v1.2). RFC 5246,
2008.
‫© אבטחת מחשבים ורשתות – חורף תשע”ב‬
‫‪SSL – Secure Socket Layer‬‬
‫●‬
‫●‬
‫●‬
‫●‬
‫●‬
‫‪2‬‬
‫פרוטוקול שפותח ע”י חברת ‪ Netscape‬במטרה לאפשר‬
‫גלישה בטוחה ברשת החל מ‪.1995-‬‬
‫גרסא ‪ 1‬היא גרסת בטא שלא יצאה מהחברה‪ ,‬וגרסא ‪2‬‬
‫שוחררה בפברואר ‪.1995‬‬
‫כתוצאה ממספר בעיות אבטחה‪ ,‬גרסא ‪ ,3‬פותחה ב‪1996-‬‬
‫ע”י קוצ'ר‪ ,‬קרלטון ופרייר‪.‬‬
‫בשלב מאוחר יותר‪ ,‬עבר פיתוח ‪ SSL‬לידי ה‪ ,IETF-‬אשר‬
‫שינה את שם הפרוטוקול ל‪) TLS-‬גרסא ‪ (1.0‬וערך מספר‬
‫שינויים‪/‬שיפורים‪.‬‬
‫נכון להיום‪ ,‬גרסת הפרוטוקול העדכנית היא ‪ ,1.2‬אבל מרבית‬
‫השרתים לא משתמשים בה באופן נפוץ )אם כי מומלץ שיעשו‬
‫כך(‪.‬‬
‫© אבטחת מחשבים ורשתות – חורף תשע”ב‬
‫הרצאה ‪10‬‬
‫מטרות הפרוטוקול‬
‫●‬
‫●‬
‫●‬
‫●‬
‫●‬
‫‪3‬‬
‫פרוטוקול ‪ SSL‬נועד לאפשר מסחר אלקטרוני בטוח‪.‬‬
‫הרעיון הבסיסי הוא לאבטח את התעבורה בין משתמש‬
‫לשרת‪ ,‬כך שזהות השרת מאומתת באמצעים קריפטוגרפיים‪.‬‬
‫זהות המשתמש עשויה להיות מאומתת באמצעים‬
‫קריפטוגרפיים‪ ,‬אבל הפרוטוקול אינו מחייב זאת )מה שדורש‬
‫אימות המשתמש באמצעים אחרים(‪.‬‬
‫כדי לאמת את השרת‪ ,‬משתמשים בסרטיפיקטים‪ ,‬אשר‬
‫מאפשרים החלפת מפתחות קריפטוגרפיים בצורה בטוחה‪.‬‬
‫מטעמי יעילות ל‪ SSL/TLS-‬יש אופציה לנצל החלפות מפתח‬
‫קודמות כדי לבצע את החלפת המפתח הנוכחית יעילה יותר‪.‬‬
‫© אבטחת מחשבים ורשתות – חורף תשע”ב‬
‫הרצאה ‪10‬‬
‫דרישות מ‪SSL/TLS-‬‬
‫●‬
‫●‬
‫●‬
‫●‬
‫●‬
‫●‬
‫●‬
‫●‬
‫●‬
‫‪4‬‬
‫אימות זהות השרת‬
‫אימות אופציונאלי של הלקוח‬
‫מהימנות )מבוססת על ‪(TCP‬‬
‫שלמות ואימות מקור הודעות )‪(MAC‬‬
‫סודיות הודעות )הצפנה(‬
‫דחיסה‬
‫חסינות להתקפות ‪Man in the middle‬‬
‫גמישות בבחירת האלגוריתמים הקריפטוגרפיים‬
‫פרוטוקול פשוט למימוש ואנליזה‬
‫© אבטחת מחשבים ורשתות – חורף תשע”ב‬
‫הרצאה ‪10‬‬
‫שימושי ‪SSL/TLS‬‬
‫●‬
‫●‬
‫●‬
‫‪5‬‬
‫מאז פיתוחו של ‪ ,SSL/TLS‬הוא הוכנס לשימוש נרחב הן‬
‫בגלישה ברשת‪ ,‬והן בפרוטוקולים אחרים‪.‬‬
‫היתרונות הגדולים של אבטחה ברמת ה‪ transport-‬הוא‬
‫ששכבת האפליקציה כמעט לא רגישה לשינוי‪ ,‬ובתמורה‬
‫מקבלת אבטחה חזקה שאינה מפריעה ל‪stateless-‬‬
‫‪.packet filters‬‬
‫עם זאת‪ ,‬הפרוטוקול איננו מוגן כנגד התקפות ברמת ה‪ IP-‬או‬
‫ה‪) TCP-‬דוגמת ‪ syn attack‬או ‪.(IP spoofing‬‬
‫© אבטחת מחשבים ורשתות – חורף תשע”ב‬
‫הרצאה ‪10‬‬
(‫ )במבט על‬SSL Handshake
Client
Server
ClientHello(version, cipher_suite, client_random, sid)
ServerHello(version, cipher_suite, server_random, sid),
Cert, [CertRequest]
ClientKeyExchange, [Certificate], [CertVerify]
ChangeCipherSpec
FinishedClient
ChangeCipherSpec
FinishedServer
‫המפתחות‬ ‫החלפת‬ ‫לפרוטוקול‬ ‫קשורות‬ ‫אינן‬ ChaneCipherSpec­‫ה‬ ‫הודעות‬
9 ‫הרצאה‬
‫© אבטחת מחשבים ורשתות – חורף תשע”ב‬
6
‫ההודעה הראשונה‬
‫●‬
‫●‬
‫ההודעה הראשונה בפרוטוקול נשלחת ע”י הלקוח‬
‫היא מכילה את המידע‪:‬‬
‫גרסת הפרוטוקול שהלקוח מריץ‪,‬‬
‫רשימה של אלגוריתמים קריפטוגרםיים בהם תומך הלקוח‬
‫)כולל הצפנה ואימות(‪,‬‬
‫ערך רנדומי בן ‪ 256‬ביט )‪ (client_random‬אשר‬
‫משמש בהמשך לגזירת המפתחות‪,‬‬
‫מזהה ה‪) session-‬שבשיחה הראשונה נשלח כ‪(0-‬‬
‫‪7‬‬
‫© אבטחת מחשבים ורשתות – חורף תשע”ב‬
‫הרצאה ‪10‬‬
‫ההודעה השניה‬
‫ההודעה השניה בפרוטוקול נשלחת ע”י השרת‬
‫היא מכילה את המידע‪:‬‬
‫גרסת הפרוטוקול שהשרת מריץ‪,‬‬
‫האלגוריתמים שהשרת בחר )אמורים להיות החזקים‬
‫ביותר מבין אלה שבחר הלקוח(‪.‬‬
‫ערך רנדומי בן ‪ 256‬ביט )‪ (server_random‬אשר‬
‫משמש בהמשך לגזירת המפתחות‪,‬‬
‫מזהה ה‪) session-‬שבשיחה הראשונה נשלח כ‪(0-‬‬
‫השרת גם שולח את הסרטיפיקט שלו‬
‫במקרה שהוא מעוניין באימות הלקוח ע”י סרטיפיקטים‪ ,‬הוא‬
‫גם יבקש את סרטיפיקט הלקוח‪.‬‬
‫‪8‬‬
‫© אבטחת מחשבים ורשתות – חורף תשע”ב‬
‫הרצאה ‪10‬‬
‫ההודעה השלישית‬
‫ההודעה השלישית בפרוטוקול נשלחת ע”י הלקוח‬
‫אם הסרטיפיקט ששלח השרת תואם לשרת שהלקוח מעוניין‬
‫לתקשר עימו‪ ,‬הסרטיפיקט בתוקף )ולא בוטל!( וחתום ע”י ‪CA‬‬
‫מוכר‪ ,‬הלקוח בוחר מחרוזת ‪ pre_master_secret‬באורך‬
‫‪ 384‬ביט ומחשב את‪:‬‬
‫= ‪ClientKeyExchange‬‬
‫)‪EpubServer(pre_master_secret‬‬
‫במקרה של בקשת הסרטיפיקט מהלקוח‪ ,‬הלקוח ישלח את‬
‫הסרטיפיקט שלו‪ ,‬ואת‬
‫= ‪CertVerify‬‬
‫)‪SigClient (pre_master_secret, Msg1, Msg2‬‬
‫‪9‬‬
‫© אבטחת מחשבים ורשתות – חורף תשע”ב‬
‫הרצאה ‪10‬‬
‫ההודעה השלישית )המשך(‬
‫מה‪ pre_master_secret-‬ושתי מחרוזות ה‪,random-‬‬
‫גוזרים את המפתח הראשי להמשך הפרוטוקול‬
‫‪master_secret = h(pre_master_secret,‬‬
‫‪client_random,‬‬
‫)‪server_random‬‬
‫זהו מפתח סודי ומשותף בן ‪ 384‬ביט‪.‬‬
‫הגנה משידור חוזר נובעת מהשימוש בערכי ‪random‬‬
‫שמשתנים בין ההרצות‪.‬‬
‫מה‪ master_secret-‬גוזרים את יתר המפתחות‪ ,‬ואפילו את‬
‫ה‪ IVs-‬להמשך התקשורת‪.‬‬
‫‪10‬‬
‫© אבטחת מחשבים ורשתות – חורף תשע”ב‬
‫הרצאה ‪10‬‬
‫המפתחות המעורבים‬
‫ מחושב ערך מפתח‬,master_secret-‫לאחר גזירת ה‬
:‫ אשר ממנו נגזרים המפתחות העיקריים‬,key_block
ClientMAC,
ServerMAC,
ClientWrite,
ServerWrite,
‫כאשר‬
key_block = h(master_secret, server_random,
client_random)
10 ‫הרצאה‬
‫© אבטחת מחשבים ורשתות – חורף תשע”ב‬
11
‫ההודעה הרביעית‬
‫לפני ההודעה הרביעית‪ ,‬הלקוח שולח לשרת הודעת‬
‫‪.ChangeCipherSuite‬‬
‫לאחריה‪ ,‬כל התעבורה בינו לבין השרת מוצפנת ומאומתת ע”י‬
‫‪ ClientWrite‬ו‪.ClientMAC-‬‬
‫ההודעה הרביעית‪ ,‬היא האימות של הלקוח‪ ,‬ושווה ל‪-‬‬
‫= ‪FinishedClient‬‬
‫))‪EClientWrite(MACClientMAC (Msg1, Msg2, Msg3‬‬
‫‪12‬‬
‫© אבטחת מחשבים ורשתות – חורף תשע”ב‬
‫הרצאה ‪10‬‬
‫ההודעה החמישית‬
‫לפני ההודעה החמישית‪ ,‬השרת שולח ללקוח הודעת‬
‫‪ ,ChangeCipherSuite‬המאשרת את בקשת הלקוח‪.‬‬
‫לאחריה‪ ,‬כל התעבורה בינו לבין השרת מוצפנת ומאומתת ע”י‬
‫‪ ServerWrite‬ו‪.ServerMAC-‬‬
‫ההודעה החמישית‪ ,‬היא האימות של השרת‪ ,‬ושווה ל‪-‬‬
‫= ‪FinishedServer‬‬
‫‪EServerWrite(MACServerMAC (Msg1, Msg2, Msg3,‬‬
‫))‪Msg4‬‬
‫‪13‬‬
‫© אבטחת מחשבים ורשתות – חורף תשע”ב‬
‫הרצאה ‪10‬‬
SSL Abbreviated Handshake
Client
Server
ClientHello(version, cipher_suite, client_random, sid)
ServerHello(version, cipher_suite, server_random, sid)
ChangeCipherSpec
FinishedServer
ChangeCipherSpec
FinishedClient
‫המפתחות‬ ‫החלפת‬ ‫לפרוטוקול‬ ‫קשורות‬ ‫אינן‬ ChaneCipherSpec­‫ה‬ ‫הודעות‬
9 ‫הרצאה‬
‫© אבטחת מחשבים ורשתות – חורף תשע”ב‬
14
‫הגרסא המקוצרת‬
‫במקרה שהלקוח והשרת כבר תיקשרו ביניהם‪ ,‬הם יכולים‬
‫לנסות להמשיך את ה‪ session-‬הקודם‪.‬‬
‫השרת בהודעה הראשונה שולח את ה‪ sid-‬שנשלח ע”י‬
‫השרת בפעם הקודמת שדיברו‪.‬‬
‫אם השרת מעוניין להמשיך את ה‪ session-‬עם אותו ‪,sid‬‬
‫הוא עונה בחבילה שלו את ה‪ sid-‬שנשלח ע”י הלקוח‪ ,‬אחרת‬
‫הוא עונה ע”י ‪ sid‬אחר )וממשיכים בהרצת הפרוטוקול‬
‫הרגיל(‪.‬‬
‫במקרה ששני הצדדים מעוניינים בהמשך ה‪,session-‬‬
‫ממשיכים עם הפרוטוקול המקוצר‪.‬‬
‫‪15‬‬
‫© אבטחת מחשבים ורשתות – חורף תשע”ב‬
‫הרצאה ‪10‬‬
‫הגרסא המקוצרת )המשך(‬
‫שינוי אחד עיקרי הוא שהודעת החלפת המפתחות כבר לא‬
‫דרושה‪.‬‬
‫שינוי שני‪ ,‬הוא שהשרת שולח את ההודעה השלישית )במקום‬
‫הלקוח(‪ ,‬וההודעה הרביעית נשלחת ע”י הלקוח‪.‬‬
‫גזירת המפתחות משתמש ב‪ master_secret-‬שרשום ב‪-‬‬
‫‪ ,sid‬אבל גם ב‪ client_random,server_random-‬של‬
‫החיבור הזה )שאמורים להיות שונים מהריצה הקודמת(‪.‬‬
‫‪16‬‬
‫© אבטחת מחשבים ורשתות – חורף תשע”ב‬
‫הרצאה ‪10‬‬
(‫הגרסא המקוצרת )המשך‬
‫המפתחות נגזרים לפי‬
key_block = h(master_secret, client_random,
server_random)
‫כאשר‬
FinishedServer =
EServerWrite(MACServerMAC (Msg1, Msg2))
FinishedClient =
EClientWrite(MACClientMAC (Msg1, Msg2, Msg3))
10 ‫הרצאה‬
‫© אבטחת מחשבים ורשתות – חורף תשע”ב‬
17