300 likes | 480 Views
הגנה במערכות מתוכנתות. תרגול 5 – אבטחה ברמת אפליקציה - PGP. הערה: שקפים אלה אינם מהווים תחליף לחומר התרגולים המפורסם באתר הקורס, ומשמשים כעזר הוראה בלבד. השקפים מכילים שרטוטים מהאתר www.pgpi.org. PGP – Pretty Good Privacy. ניתן להוריד מימוש של PGP בחינם בכתובת: www.pgpi.org.
E N D
הגנה במערכות מתוכנתות תרגול 5 – אבטחה ברמת אפליקציה - PGP הערה: שקפים אלה אינם מהווים תחליף לחומר התרגולים המפורסם באתר הקורס, ומשמשים כעזר הוראה בלבד. השקפים מכילים שרטוטים מהאתר www.pgpi.org
PGP – Pretty Good Privacy ניתן להוריד מימוש של PGP בחינם בכתובת: www.pgpi.org Philip Zimmermann הגנה במערכות מתוכנתות - תרגול 5
"ללא הגבלת הכלליות" נניח צופן פומבי RSA סקירהPGP מספקת את השירותים הבאים: XM Signature required? חתום על ההודעה X X || SigPrs(h(X)) Yes אימות No דחיסה דחיסה XZ(X) "ללא הגבלת הכלליות" נניח צופן סימטרי Rijndael הגרל k, הצפן את k ואת X X EPPubr(k) || ESk(X) הצפנה Confidentiality required? Yes No תאימות לדואר אלקטרוני המרה ל-radix 64 XR64(X) חלוקת המסר לחלקים הגנה במערכות מתוכנתות - תרגול 5
FileName Timestamp1 (file creation time) Message Data ההודעה הגנה במערכות מתוכנתות - תרגול 5
XM Signature required? חתום על ההודעה X X || SigPrs(h(X)) Yes אימות No דחיסה דחיסה XZ(X) הגרל k, הצפן את k ואת X X EPPubr(k) || ESk(X) הצפנה Confidentiality required? Yes No תאימות לדואר אלקטרוני המרה ל-radix 64 XR64(X) חלוקת המסר לחלקים הגנה במערכות מתוכנתות - תרגול 5
אימות – שלב השליחה X SHA-1, etc… SigPrs(h(X)) h(X): 160 bit M || SigPrs(h(X)) Prs הגנה במערכות מתוכנתות - תרגול 5
אימות – שלב הוידוא • למקבל נתון: X || Sig(X) כאשר SigPrs(h(X))Sig(X) = • יחשב h(X) • יחשב VerPubs(Sig(X)) • האימות מצליח אם קיבל אותה תוצאה בשניהם: VerPubs (SigPrs(h(X)),h(X)) = true הגנה במערכות מתוכנתות - תרגול 5
Timestamp2 (message sending time) Signature SigPrs Message Digest (h(M)) FileName Timestamp1 (file creation time) Message Data עוד קצת הגנה • כדי להגן מפני התקפת שידור חוזר, מוסיפים Timestamp של זמן שליחה • יכלל בחלק החתום. • התוצאה בינתיים: הגנה במערכות מתוכנתות - תרגול 5
ענייני מפתחות... • PGP מאפשרת יותר מזוג מפתחות פרטי-פומבי אחד. • החלפת מפתחות "חלקה"יותר • מפתחות שונים לקבוצות אנשים שונות אין התאמה חח"ע בין משתמשים לזוגות המפתחות שלהם! • איך פותרים? • נצרף את המפתח הפומבי להודעה? (בזבזני...) • ניתן לכל מפתח ID? (איך נשייך ID למפתח?...) נשתמש ב-64 הביטים התחתונים של המפתח בתור KeyID הגנה במערכות מתוכנתות - תרגול 5
עוד בעיה... • אם האימות לא הצליח, מה זה אומר? EPPubs (SigPrs(h(X))) h(x) • מישהו שינה את ההודעה? • ואולי לא השתמשנו במפתח הנכון? • פתרון: השולח יעביר גם את שני הבתים הראשונים של h(X) • אם שונים מה-h(X) שהמקבל חישב זו אינדיקציה שההודעה שונתה. הגנה במערכות מתוכנתות - תרגול 5
סיכום שלב האימות: Timestamp2 (message sending time) Signature KeyID of Pubs Two first bytes of h(M) SigPrs Message Digest (h(M)) FileName Timestamp1 (file creation time) Message Data הגנה במערכות מתוכנתות - תרגול 5
XM Signature required? חתום על ההודעה X X || DPPrs(h(X)) Yes אימות No דחיסה דחיסה XZ(X) הגרל k, הצפן את k ואת X X EPPubr(k) || ESk(X) הצפנה Confidentiality required? Yes No תאימות לדואר אלקטרוני המרה ל-radix 64 XR64(X) חלוקת המסר לחלקים הגנה במערכות מתוכנתות - תרגול 5
הצפנהע"י אלג' מפתח סימטרי מיוצר מפתח סימטרי חדש k לכל הודעה M עפ"י תזמון הקלדה ESk(X) המפתח נשלח עם ההודעה, מוצפן ע"י המפתח הפומבי של המקבל: EPpubr(k) EPpubr(k) || ESk(X) הגנה במערכות מתוכנתות - תרגול 5
והפענוח... EPpubr(k) || ESk(X) EPpubr(k) k ESk(X) הגנה במערכות מתוכנתות - תרגול 5
למה אימות לפני הצפנה? • ההודעה הנשלחת ב-PGP: EPPubr(k) || ESk(M || Sig(M)) • ומה אם היינו מצפינים קודם? EPpubr(k) || ESk(M) || Sig(X) • משיגים יעילות במקרה בו רוצים להוכיח שמשתמש חתם על הודעה מסוימת. X הגנה במערכות מתוכנתות - תרגול 5
XM Signature required? חתום על ההודעה X X || DPPrs(h(X)) Yes אימות No דחיסה דחיסה XZ(X) הגרל k, הצפן את k ואת X X EPPubr(k) || ESk(X) הצפנה Confidentiality required? Yes No תאימות לדואר אלקטרוני המרה ל-radix 64 XR64(X) חלוקת המסר לחלקים הגנה במערכות מתוכנתות - תרגול 5
דחיסה • משתמשים ב-ZIP לצורך דחיסת ההודעה • לאחר האימות • לא צריך לשמור את הדחיסה של ההודעה כדי להוכיח את החתימה • לפני ההצפנה • פעולת ההצפנה פוגעת ביעילות הדחיסה הגנה במערכות מתוכנתות - תרגול 5
סיכום השלבים עד כה: KeyID of Pubr Symetric Key Component EPPubr Symmetric key k Timestamp2 (message sending time) Signature KeyID of Pubs Two first bytes of h(M) SigPrs ZIP ESk Message Digest (h(M)) FileName Timestamp1 (file creation time) Message Data הגנה במערכות מתוכנתות - תרגול 5
XM Signature required? חתום על ההודעה X X || DPPrs(h(X)) Yes אימות No דחיסה דחיסה XZ(X) הגרל k, הצפן את k ואת X X EPPubr(k) || ESk(X) הצפנה Confidentiality required? Yes No תאימות לדואר אלקטרוני המרה ל-radix 64 XR64(X) חלוקת המסר לחלקים הגנה במערכות מתוכנתות - תרגול 5
תאימות לדוא"ל וחלוקת המסר • פרוטוקול דוא"ל מוגדר עבור תווי ASCII(בתחום 0-127) • ההודעה המוצפנת לא תכיל רק סימני ASCII • משתמשים בהמרת radix-64 • 3 בתי הודעה 4 תווי ASCII(אורך ההודעה גדל ב-33%...) • דחיסת ZIP מפצה על ההגדלה • חלק מיישומי דוא"ל מגבילים גודל הודעה • PGP מחלק הודעה נשלחת לתת-הודעות קטנות, ומרכיב אותה בחזרה בצד המקבל. הגנה במערכות מתוכנתות - תרגול 5
פורמט הודעת PGP KeyID of Pubr Symetric Key Component EPPubr Symmetric key k Timestamp2 (message sending time) Signature KeyID of Pubs Two first bytes of h(M) R64 SigPrs ZIP ESk Message Digest (h(M)) FileName Timestamp1 (file creation time) Message Data הגנה במערכות מתוכנתות - תרגול 5
ניהול המפתחות • מחזיק מפתחות פרטיים • המפתח הפרטי מוצפן בצופן סימטרי: • המשתמש מקליד סיסמה pass • מיוצר hash של הסיסמה בן 160 ביטים h(pass) • מתוך h(pass) נלקחות 128 סיביות שישמשו כמפתח לצופן סימטרי • הסיסמה למפתח הפרטי לא נשמרת על המחשב בשום דרך • יש להקליד את הסיסמה בכל פעם שניגשים למפתח הפרטי. אינדקס אינדקס הגנה במערכות מתוכנתות - תרגול 5
ניהול המפתחות - המשך • מחזיק מפתחות פומביים • בביצוע אימות • שליחה – מוציאים מפתח פרטי ע"י UserID • קבלה – מוצאים את המפתח הפומבי המתאים עפ"י KeyID • בביצוע הצפנה • שליחה – מוציאים מפתח פומבי של המקבל עפ"י UserID • קבלה – מוצאים את המפתח הפרטי המתאים עפ"י KeyID אינדקס אינדקס הגנה במערכות מתוכנתות - תרגול 5
מודל האמון ב-PGP • איך משתמש A יודע שמפתח פומבי מסוים הוא אכן של משתמש B? • העברת מפתח פיזית? (לא תמיד מעשי...) • שימוש ב-CA? (צריך לסמוך על גוף מרכזי כלשהו...) • הפתרון:"רשת אמון" אישית • כל משתמש הוא CA עבור משתמשים אחרים • כל משתמש מגדיר על מי הוא סומך כ-CA ובאיזה מידה הגנה במערכות מתוכנתות - תרגול 5
רמת אמון • נשמר בשדה Owner Trust במחזיק המפתחות הפומבי • ערכים אפשריים: • Ultimate Trust(רק למפתחות של A – משקל 1) • Always Trust(משקל 1/X) • Usually Trust(משקל 1/Y) • No Trust(משקל 0) • הפרמטרים X ו-Y נקבעים ע"י המשתמש A. • אם לא נאמר אחרת, נניח X=1, Y=2 • אם סכום המשקלות עולה על 1 – המפתח לגיטימי בעיני A. הגנה במערכות מתוכנתות - תרגול 5
מחזיק המפתחות הפומבי של A • A יחזיק רשומה עבור כל מפתח פומבי של משתמש B: כל האישורים ש-A קיבל על המפתח הפומבי של B (יתכנו מספר אישורים לכל מפתח) שדה בינארי – האם A מאמין כי Pub הינו מפתח פומבי של B או לא עבור כל אישור בשדה Signatures, מה רמת האמון של מנפיק האישור הגנה במערכות מתוכנתות - תרגול 5
דוגמה הגנה במערכות מתוכנתות - תרגול 5
הצגת רמת האמון בצורה גרפית הגנה במערכות מתוכנתות - תרגול 5
שאלה על PGP(חורף תשס"ג, מועד ב', 23.2.03) • ב-PGP נעשה שימוש במפתחות פומביים פרטיים. • המפתחות הפומביים נשמרים בצורה גלויה, ואילו המפתחות הפרטיים נשמרים בצורה הבאה: • המשתמש מקיש סיסמה (password) באורך כלשהו. • PGP מחשבת H(password) כאשר H פונקציית עירבול קריפטוגרפית. • PGP מחשבת EP=EH(password)(Private_Key) כאשר E צופן סימטרי ושומרת את התוצאה בקובץ. • בכל מקרה הסיסמה password אינה נשמרת בשום צורה על המחשב. הגנה במערכות מתוכנתות - תרגול 5
שאלה על PGP- המשך • נשים לב שאם הסיסמה שהוקשה שגויה אז המפתח הפרטי שיפוענח לא יהיה המפתח הנכון. במקרה והסיסמה שהוקשה שגויה, האם יש ל-PGP דרך לדעת האם הסיסמה שהוקשה נכונה? שים לב שההודעות הנשלחות ב-PGP אינן חייבות להיות בעלות משמעות. הגנה במערכות מתוכנתות - תרגול 5