אבטחת רשתות - symmetric key

lilithmm

New member
אבטחת רשתות - symmetric key

האם ב-symmetric key הכוונה היא למפתח מקודד מוגדר מראש? ז.א. בנסיון לירוט הודעה יקבל הפורץ הודעות בלתי קריאות? תודה
 

uzi2

Active member
בד"כ מועבר בהצפנה אסימטרית

הצפנה אסימטרית היא הצפנה שמבוצעת בעזרת שיטת הצפנה שבה המפתח המצפין זהה למפתח המפענח. בניגוד להצפנה אסימטרית שבה יש זוג מפתחות שכל מה שמוצפן בעזרת האחד ניתן לפיענוח רק בעזרת השני, ומה שמוצפן בעזרת השני ניתן לפיענוח רק בעזרת הראשון. בהצפנה אסימטרית הרבה פעמים לגורם המזוהה יש זוג מפתחות שאת הראשון הוא מפיץ לכל הגורמים (ושנקרא מפתח ציבורי) ואת השני הוא שומר בסוד. לא ניכנס לשאלה כיצד הגורמים שרוצים להתקשר בהתקשרות מאובטחת יודעים שיש להם את המפתח הציבורי הנכון של אותו גורם שאיתו הם רוצים להתקשר, אבל בהנחה שיש להם, הם יכולים להצפין בעזרת המפת הציבורי של אותו גורם אינפורמציה מסויימת ואז הם יודעים שרק אותו גורם יכול לפענח אותה (כי רק אותו גורם יודע את המפתח הפרטי שמפענח), באותה צורה מה שאותו גורם מעביר להם מוצפן בעזרת המפתח הפרטי שלו, אולי ניתן לפיענוח ע"י כל גורם שיש לו את המפתח הציבורי המתאים, אבל ניתן לוודא שאכן המקור של האינפורמציה הוא אותו גורם, כי אם האינפורמציה פוענחה ע"י שימוש במפתח ציבורי מסויים אז בהכרח המקור של אותה אינפרומציה זה מי שיודע את המפתח הפרטי המתאים. הבעיה אם הצפנה אסימטרית היא שההצפנה והפיענוח הם יחסית איטיים. לכן בד"כ מה שקורה, הוא שהגורם שרוצה ליזום קשר, מייצר באופן אקראי מפתח חד פעמי שנועד לשימוש רק באותה תקשורת. מפתח זה נועד להצפנה סימטרית. את המפתח הזה הוא מצפין בעזרת המפתח הציבורי של הגורם שאיתו הוא מעוניין להתקשר, ואז הוא מעביר את המפתח המוצפן לאותו גורם. המפתח הזה (שנועד לשימוש בהצפנה סימטרית) נקרא session key כי הוא משמש רק לאותו session. הצד שיוזם את ההתחברות יודע את המפתח הסימטרי כי הוא יזם אותו. הצד השני יודע כי הוא קיבל אותו מוצפן בהצפנה אסימטרית שבוצעה בעזרת המפתח הציבורי שלו, ולכן יכול לפענח את ה- session key בעזרת המפתח הפרטי שלו. אבל שום גורם אחר לא יכול לפענח את ה- session key כיוון שגם אם יירט את התקשורת, הוא צריך את המפתח הפרטי של הגורם שאליו נשלח ה- session key כדי לפענח את ה- session key. מאותו רגע שבו רק אותם שני צדדים יודעים את המפתח הסימטרי הנ"ל הם עוברים לשוחח ביניהם בעזרת הצפנה סימטרית שבה אותו מפתח משמש גם להצפנה וגם לפיענוח, בידיעה שרק הם יודעים את המפתח הזה. מקרים אחרים הם כאשר המפתח הסימטרי מועבר באמצעי אחר בין הגורמים השונים (למשל באופן ידני) אבל זה פחות נפוץ.
 

lilithmm

New member
עוד שאלה

ממש תודה על התשובה המקצועית והמפורטת! יש לי עוד כמה שאלות: 1) אם הבנתי נכון, בשימוש בהצפנה אסימטרית יש לכל משתמש מפתח ציבורי ומפתח פרטי. ז.א. נניח לקבוצה בת 3 משתמשים שרוצים לצור קשר אחד בין השני כך שכל פעם רק 2 צדדים אמורים לדבר אחד עם השני (לתקשר בזוגות), יש מפתח פרטי לכל אחד, ז.א. 3 מפתחות, ועוד 3 מפתחות ציבוריים, ז.א. 6 מפתחות סה"כ או פשוט לקבוצה שמונה מספר משתמשים מספר כפול של מפתחות? 2)אם הבנתי נכון, אז בשימוש בהצפנה סימטרית יש לכל session שני מפתחות, מפתח לכל צד, ז.א. לקבוצה של 3 משתתפפים שרוצים לתקשר בזוגות יהיו 5 מפתחות? 3)כשיש מפתח עבור צופן monoalphabetic שמשמר סימני פיסוק ורווחים, איזה חסרונות יש לשיטת ההצפנה מול אותה שיטה שלא משמרת סימני פיסוק ורווחים? תודה!!
 

uzi2

Active member
תשובות

לשאלה 1 ======= לא בהכרח לכל משתמש יש מפתח פרטי וציבורי של עצמו. ב- SSL למשל רק לשרת צריך להיות מפתח אסימטרי. ואז למשל כאשר אני מתחבר מהדפדפן שלי לשרת בתקשורת מאובטחת, אני משתמש במפתח הציבורי שלו כדי להעביר לו את מפתח ה- session, אבל אין שימוש לא שלי ולא שלו במפתחות שלי, אלא רק במפתחות של השרת ובמפתח ה- session שמיוצר אך ורק לצורך אותה תקשורת. איך SSL עובד (הסבר טיפה נאיבי): כל דפדפן מגיע עם מפתחות מפתחות ציבוריים של שרתים של גורמים מאשררים (Certification Authorities). חברה שרוצה לקבל זוג מפתחות לצורך חיבור SSL, חייבת לקבל אותו מגורם מאשרר מוסמך. הגורם המאשרר לאחר זיהוי החברה הנ"ל, נותן לה מפתח פרטי ושם בשרתים הפומביים שלו את המפתח הציבורי המתאים. כאשר את מנסה בעזרת הדפדפן שלך להתחבר לשרת מסויים בצורה מאובטחת, הדפדפן שלך ראשית יוצר קשר מאובטח בעזרת המפתח הציבורי שכבר יש לו אל השרת של הגורם המאשרר ולוקח ממנו את המפתח הציבורי של השרת שאליו ביקשת להתחבר. לאחר שהוא קיבל את המפתח הזה הוא משתמש בו כדי ליצור קשר עם השרת הנ"ל ומעביר לשרת הנ"ל מפתח session, שהדפדפן יצר רק לצורך התקשורת הספציפית הזאת. לאחר ההמפתח הנ"ל הועבר, נוצר קשר שמוצפן בעזרת מפתח ה- session והמשך התקשורת מתבצע בעזרת הצפנה סימטרית שבה שני הצדדים משתמשים באותו מפתח גם להצפנה וגם לפיענוח. הדפדפן שלך זיהה בוודאות את השרת שאיתו הוא מתחבר. השרת מצידו לא לא ביצע זיהוי מוחלט של הדפדפן שיזם איתו את הקשר, והשרת מסתפק בכך שהמנגנון מבטיח שתוכנה אחרת לא תוכל להכנס באמצע ולפענח את התקשורת. אבל אם רוצים זיהוי וודאי של כל הצדדים (אז החלט לכל צד צריך להיות זוג מפתחות אחד סודי ואחד ציבורי, וחייב להיות גורם שמחלק את המפתחות הציבוריים בצורה שנוכל לסמוך עליו שהוא אכן נותן לנו את המפתח הציבורי הנכון ולא מפתח ציבורי של גורם עויין שמתחזה לשרת הנ"ל (זו הסיבה לשימוש בגורמים מאשררים (כגון Verisign)). במידה ואכן יש צורך בזיהוי מדוייק של כל אחד מהגורמים, אז אכן חייב לכל אחד מהגורמים להיות זוג מפתחות - אחד ציבורי ואחד פרטי, כאשר הפרטי נשמר בסוד. במקרה כזה כל תקשורת שאת יוזמת, לפחות בהתחלה (עד להעברת ה- session key) תהיה צריכה להיות מוצפנת גם בעזרת המפתח הפרטי שלך, וגם בעזרת המפתח הציבורי של הגורם שאליו את יוזמת את התקשורת. במפתח הציבורי של הגורם שאליו את יוזמת את הקשר - על מנת שרק הוא יוכל לפענח אותו. במפתח הפרטי שלך - על מנת שהגורם הנ"ל יוכל לוודא שאת זו שבאמת פנית אליו ולא מישהו שמתחזה אלייך. כי רק את יכלת להצפין את הקוד כך שהמפתח הציבורי שלך יוכל לפענח אותו. כאשר את מתחברת לאתר מאובטח, כאמור יש זיהוי וודאי רק של האתר אבל לא שלך (אין צורך שיהיה לך זוג מפתחות משל עצמך). יצאת מתקשורת מאובטחת וחזרת אליה - אז יבנה מפתח session חדש. לשאלה 2 ======= החשבון כאן שגוי. אם מדובר במפתחות סימטרים שסוכמו מראש, אז מספיק 3 מפתחות לשלושה אנשים. אם האנשים הם A,B,C אז צריך להיות מפתח אחד לתקשורת בין A ו- B (שידוע רק ל- A ול- B) מפתח שני לתקשורת בין A ל- C, ומפתח שלישי לתקשורת בין B ל- C. שימי לב שוב: אותו מפתח משמש גם להצפנה וגם לפיענוח. באופן כללי ל- n אנשים יהיו ככה:
n(n-1)/2​
מפתחות. לשאלה 3 ======= קשה לי לדבר באופן כללי, מבלי שמדברים על שיטת הצפנה ספציפית, אבל ברור שסימני פיסוק נותנים רמז סטטיסטי לפחות לגבי מהות המילים. למשל באנגלית מילה בת תו אחד בד"כ תהיה a או I. זה לא אומר שבהכרח הקוד יהיה פריץ - הכל תלוי בסופו של דבר באלגוריתם עצמו של ההצפנה.
 

uzi2

Active member
תיקון קל לתשובה 1

כאשר רוצים גם שרק גורם מסויים יוכל לקרוא את התקשורת וגם לאפשר לאותו גורם לזהות אותך, כתבתי כי יש צורך להצפין גם במפתח הציבורי של אותו גורם וגם במפתח הפרטי שלך. התיקון: אין צורך להצפין את כל התקשורת הנ"ל (אפילו עד לנקודה שבה הוחלף ה- session key) במפתח הפרטי שלך, אלא רק להצפין מה שנקרא hash function של התקשורת. מדובר בקוד אשר נבנה מתוך התוכן של הקוד המקורי אבל הוא הרבה יותר קצר מהקוד המקורי. הזיהוי יתבצע ע"י השוואת הקוד המפוענח של ה- hash function (שפוענח בצד השני ע"י שימוש במפתח הציבורי שלך) עם ה- hash function שחושבה מהקוד שפוענח בעזרת המפתח הפרטי של הצד השני, ושהוא הקוד המוצפן.
 

blaaaat

New member
לעוזי

עוזי ההסבר הזה המצויין... עכשיו הבנתי איך SSL עובד.. למה לא הסברת ככה קודם :)?
 

uzi2

Active member
ההסבר שנתתי

לא היה ספציפי לגבי SSL. לגבי SSL נתתי הסבר קצת יותר מפורט במסגרת מכתב אחר בתכתובת הנוכחית ("תשובות").
 
למעלה