לדף הכניסה של ישרא-בלוג
לדף הראשי של nana10
לחצו לחיפוש
חפש שם בלוג/בלוגר
חפש בכל הבלוגים
חפש בבלוג זה
 

יומן אבטחה

בלוג אבטחת מידע. עדכונים, עניינים, חדשות ופרסומים. הכל מכל בכל בנושא אבטחת מידע. ופרטיות.

מלאו כאן את כתובת האימייל
שלכם ותקבלו עדכון בכל פעם שיעודכן הבלוג שלי:

הצטרף כמנוי
בטל מנוי
שלח

RSS: לקטעים  לתגובות 
ארכיון:


קטעים בקטגוריה: . לקטעים בבלוגים אחרים בקטגוריה זו לחצו .

חסימת אתרי פורנו וסינון תוכן


מה שאני אוהב בהצעת החוק לחסימת אתרים של חבר הכנסת כהן מש"ס זו ההזדמנות שהיא מספקת לעיסוק בקצת חומר תיאורטי באבטחת מידע (ראו רשימה קודמת בנושא).

 

אחת הדרישות של החוק היא לבצע סינון תוכן וכמובן עולה השאלה האם זה בכלל אפשרי. לסינון, כל סינון (כלומר גם של וירוסים, קלטים וכדומה) יש שתי גישות בסיסיות אפשריות. גישה רשימת המורשים (הידועה לרוב כגישת white list) לעומת גישת רשימת הפסולים (הידועה לרוב כגישת black list).

 

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

 

בעולם הטכנולוגי אנו ניתקל ברשימת מורשים ורשימת פסולים ביישומים רבים. דוגמא נפוצה היא סינון קלטים המועברים על ידי המשתמש. ברשימת מורשים נגדיר עבור כל שדה קלט מהי תבנית הקלט המורשית. כך לדוגמא בשדה מספר זהות יוכלו המשתמשים להקליד ספרות בלבד. לעומת זאת, ברשימת פסולים אנו נאפשר למשתמשים להזין בשדה מספר זהות כל נתון, למעט נתונים המוכרים לנו כפוגעניים, כדוגמת סוגרים משולשים וכדומה.

 

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

 

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

 

על כל אלה יש להוסיף את העובדה שגולשים יכולים לבחור לגלוש דרך מנגנונים שאינם מאפשרים סינון (שרתי Proxy מוצפני SSL, שירות TOR וכדומה). בין אם החוק ראוי או לא, רמת הישימות שלו שואפת לאפס בכל מה שאמור בסינון תוכן, גם אם היה רק ספק אינטרנט אחד בארץ.

נכתב על ידי , 30/5/2007 06:22   בקטגוריות אבטחת מידע כללי, מושגי יסוד  
7 תגובות   הצג תגובות    הוסף תגובה   הוסף הפניה   קישור ישיר   שתף   המלץ   הצע ציטוט
 



מבוא להצפנה - חתימה דיגיטלית (חלק ד')


בחלקים קודמים סקרתי את יסודות ההצפנה, ההבדלים בין פונקציות סימטריות לאסימטריות ופונקציות hash. בחלק זה אסקור את הנושא של חתימה דיגיטלית.

 

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

 

בתיאוריה

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

 

במעשה

בפועל חתימות דיגיטליות לא מתנהגות באופן זה משתי סיבות, ביצועים ושימושיות. מבחינת ביצועים כבר הסברתי את הבדלי הביצועים בין פונקציות סימטריות לאסימטריות וחתימה דיגיטלית על קבצים גדולים (ומסמכי חברה למשל, אחרי שמוסיפים להם את כל הסמלילים הם תמיד קבצים גדולים) באמצעות המפתח הפרטי בלבד יכולה להיות תהליך מאוד איטי. לכן בחתימות דיגיטליות כמעט תמיד תגלו שנעשה שימוש בפונקציות hash. התהליך המקובל הוא לקחת את הקובץ, להעביר אותו בפונקציית hash על מנת לקבל גיבוב בן 128/160 ביט (לדוגמא) ולהצפין את הגיבוב באמצעות המפתח הפרטי. לגורם שאמור לקבל את הקובץ החתום שולחים את הקובץ הלא חתום ביחד עם הגיבוב החתום. המקבל לוקח את הקובץ הלא חתום ומעביר אותו באותה פונקציית hash בה אנו השתמשנו ומשווה את הגיבוב שהתקבל לגיבוב החתום ששלחנו לו. אם הגיבוב זהה, הקובץ הוא אכן קובץ מקורי, אם לא אז לא. הסיבה השנייה למתווה שימוש זה נובעת מכך שחתימה דיגיטלית נחוצה פעמים רבות כאמצעי משלים ולא מחייב. בהרבה מאוד אתרי תוכנה ניתן להוריד תוכנות וניתן גם להוריד את הגיבוב החתום. מאחר ולא ניתן להניח שהמשתמש הרגיל יהיה בעל כלים מתאימים לפענוח החתימה ומכיוון שהדבר לא מעניין בכל המקרים את כולם, מוסיפים את החתימה כאפשרות בחירה למשתמשים.

 

דוגמאות

אני משתמש בתוכנת PGP, שמאפשרת להצפין ולחתום, כך שאמחיש באמצעותה. לקחתי קובץ בשם אפיון.doc וחתמתי אותו דיגיטלית. התמונה להלן היא מסך אפשרויות החתימה. האליפסה האדומה העליונה מקיפה את מפתח החתימה שלי. לתשומת לבכם, מפתח זה שונה ממפתח ההצפנה ובדרך כלל מקובל לעשות שימוש במפתחות שונים להזדהות, הצפנה וחתימה ולמעשה להקצות מפתח פרטי לכל סוג שימוש בעל שונות מהותית. המפתח הזה ספציפית הוא מפתח 1024bit של אלגוריתם Digital Signature Algorithm, המבוסס על ה-Digital Signature Standard (DSS) שפותח על ידי מכון התקנים האמריקאי.

באליפסה התחתונה ניתן לראות כי ניתן לבחור באפשרות של Detached Signature, כלומר - האם החתימה תהיה חלק מהקובץ או בנפרד ממנו.

 

אפשרויות חתימה pgp

 

אם נבחר חתימה שהיא חלק מהקובץ נקבל קובץ PGP מוצפן רגיל (אלא שהוא הוצפן באמצעות המפתח הפרטי שלנו). במקרה זה די לשלוח את הקובץ המוצפן.

קובץ PGP מוצפן

אם נבחר חתימה שאינה חלק מהקובץ נקבל קובץ חתימה ועלינו יהיה לשלוח את קובץ החתימה עם הקובץ המקורי. 

קובץ חתימה של PGP

 

בעת ווידוא החתימה וללא שינוי הקובץ המקורי זו ההודעה שאקבל. ניתן לראות את מועד החתימה, זהות החותם, זיהוי המפתח ותקפותו.

חתימה תקיפה

 

לאחר שנכנסתי לקובץ המקורי והוספתי רווח אחד בשורת הכותרת, להלן ההודעה שמתקבלת בעת הפעלה חוזרת של אותו קובץ החתימה. ניתן לראות כי כעת כתוב במפורש כי החתימה אינה תקפה.

חתימה לא תקיפה

 

אפילוג

חתימות דיגיטליות הן עוף מוזר. להבדיל מהצפנות או פונקציות hash, הנוכחות של חתימות דיגיטליות מתקיימת במקביל בעולם הוירטואלי ובעולם האמיתי. חוק חתימה אלקטרונית שנחקק ב-2001 משווה את התוקף של חתימה אלקטרונית (בהזדמנות אביא הסבר מקוצר על החוק) לחתימה רגילה. תוקפן של חתימות אינו פג, אך מה לגבי תוקפן של חתימות דיגיטליות? תוקפן של חתימות דיגיטליות אינו אמור לפוג, אלא שחוזקן עשוי לפוג, כפועל יוצא של היחלשות מנגנוני אבטחה. מה קורה אם בעוד שנה מגלים דרך יעילה מאוד לפצח מפתח הצפנה פרטי על בסיס המפתח הציבורי. כיצד ניתן יהיה למנוע זיוף בדיעבד של מסמכים? אך מתקפה יותר סבירה תנצל את השימוש בפונקציות hash בחתימות דיגיטליות. זהו עקב האכילס של חתימות דיגיטליות, כיוון שמשנה לשנה אנו מגלים מתקפות נוספות על הפונקציות המקובלות ומלכתחילה פונקציות hash חשופות יותר למתקפות מפונקציות ההצפנה בהן נעשה שימוש בחתימה דיגיטלית (מה שמחזק את הטיעון על חוזק השרשרת כחוזק החוליה החלשה). אני חושב שמבחינת היקף השימוש וזמן השימוש בחתימות דיגיטליות עוד לא הגיע העולם לשלב הזה, אך ייתכן ובעשור או שניים הקרובים, במידה ויחולו עוד התקדמויות בפיצוח sha-1 ייתכן ונגיע לשם.

נכתב על ידי , 6/2/2007 08:54   בקטגוריות אבטחת מידע כללי, כרטיסים חכמים, הצפנות ושמונצס, מושגי יסוד  
4 תגובות   הצג תגובות    הוסף תגובה   2 הפניות לכאן   קישור ישיר   שתף   המלץ   הצע ציטוט
 



מבוא להצפנה - פונקציות hash (חלק ג')


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

 

שימושים של פונקציות hash

כפי שכתבתי בחלק הראשון, פונקציות hash מתאפיינות בכך שהן לוקחות נתון באורך משתנה והופכות אותו לנתון באורך קבוע (160bit ב-SHA-1 ו-128bit ב-MD5). לכל נתון שנעביר בפונקציית hash נקבל תמיד את אותו הנתון. מבחינת שימושיות יש לפונקציות hash שני מאפיינים מרכזיים המשרתים אותנו:

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

בעיות של פונקציות hash ופתרונן

 

פונקציות hash חשופות, כאמור, למתקפת rainbow אך גם למתקפות המכונות מתקפות יומולדת. מתקפות יומולדת מתבססות על פרדוקס יומולדת, לפיו בקבוצה של 23 איש יש 50% סיכוי לאתר שני אנשים עם אותו תאריך לידה ובקבוצה של 60 איש ומעלה הסיכוי הוא 99%. מתקפת יומולדת מאפשרת לצמצם בצורה דרמטית את כמות הניחושים הדרושים על מנת לאתר התנגשויות בפונקציות hash. התנגשויות הן מצב בו ישנם שני נתונים עבורם מתקבלת תוצאת hash אחת. מתקפת יומולדת מכתיבה למעשה כי בפונקציות hash החוזק האפקטיבי הוא מחצית אורך הגיבוב (כלומר 80bit ב-SHA-1 ו-64bit ב-MD5). מתקפת יומולדת תבוצע כך - נניח ואנחנו שולחים למישהו חוזה לחתימה (על מנת שיחתום עליו, על כל המשמעויות הכרוכות בכך), ננסה לאתר חוזה אחר, שעובד לטובתנו, אבל יש לו גיבוב דומה, כך שלאחר שהצד השני חותם על החוזה, נוכל להציג את החוזה החדש כאילו הוא החוזה החתום. בפועל, מה שנעשה זה לייצר המון סוגים של שני החוזים (נעשה שינויים בפסיקים, בגדלי פונט, בכל מיני מרכיבים שלא ישפיעו על התוכן אך ישפיעו על הגיבוב) נעשה לכולם hash וננסה לאתר את הצמד המושלם.

 

לגבי מתקפות rainbow והחולשה המובנית בבחירת סיסמאות על ידי משתמשים הפתרון פשוט יחסית. מוסיפים קצת מלח לתבשיל. salt הוא מונח המתאר הוספת רכיב אקראי (קצת כמו וקטור האתחול עליו דיברנו בחלק הראשון). על ידי הוספת מרכיב אקראי לסיסמאות המשתמשים לפני הפיכת ל-hash ושמירתם בבסיס הנתונים אנו הופכים טבלאות המרה של hash ללא רלוונטיות, כיוון שהסיסמאות המעורבלות חורגות ממרחב הסיסמאות הצפוי והופכות להיות אקראיות לחלוטין (לצורך העניין).

 

לגבי מתקפות יומולדת אין מה לעשות למעט לבחור להשתמש באלגוריתמים חזקים דיים. נכון להיום השניים הנפוצים הם MD5 ו-SHA-1, כאשר SHA-1 המשתמש בגיבוב של 160bit חזק בהרבה מ-MD5 (אך מעט יותר איטי). מתקפות על SHA-1 הביאו את הסבירות לאיתור התנגשויות לכדי 69bit, כך שהעת בשלה לאתר מחליפים. לשם כך יש את משפחת sha-2, הכוללת אלגוריתמים באורכי גיבוב של 256, 384, 512 ביטים. הגם שמדובר בסטנדרטים תקניים, חשוב לומר כי הם לא צברו כמות נסיונות תקיפה כמו MD5 ו-SHA-1, כך שייתכן ואף סביר שיש בהם חולשות שטרם התגלו.

 

מה לא עושים עם פונקציות hash

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

נכתב על ידי , 19/1/2007 07:09   בקטגוריות אבטחת מידע כללי, כרטיסים חכמים, הצפנות ושמונצס, מושגי יסוד  
4 תגובות   הצג תגובות    הוסף תגובה   2 הפניות לכאן   קישור ישיר   שתף   המלץ   הצע ציטוט
 



מבוא להצפנה - חלק ב'


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

 

 

הבדלי ביצועים בין פונקציות סימטריות לעומת פונקציות אסימטריות

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

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

 

מילה על מפתחות הצפנה

המפתח הוא אותו המרכיב המעניק להצפנה הנוכחית את הייחודיות שלה. שני אנשים יכולים להצפין אותו נתון עם אותו אלגוריתם ולקבל תוצר מוצפן שונה לחלוטין. זו תוצאה של שימוש במפתחות הצפנה שונים. בפועל, רוב האלגוריתמים מיישמים מנגנון שנועד למנוע מצב בו הצפנה של אותו הנתון, באותו האלגוריתם, עם אותו המפתח תייצר אותה תוצאה. מנגנון זה נקרא וקטור אתחול (Initialization Vector) והוא מבוסס על הוספת מרכיב אקראי בעת אתחול מנגנון ההצפנה. אורך מפתח נמדד בביטים, כאשר האורכים המקובלים היום הם 128 או 256 לפונקציות סימטריות ו-1024 או 2048 לפונקציות אסימטריות (בצורה מאוד פשטנית. יש אלגוריתמים אסימטריים, כמו ECC שעושים שימוש במפתח 160 ביט, אך זה לא באמת מהותי). מה מציין אותו אורך מפתח? כל ביט הרי מייצג שתי אפשרויות 0 או 1. ומכאן שמפתח של 128 ביט מציין מפתח בעל 2 בחזקת 128 אפשרויות, שזה נכון להיום כמות בלתי סבירה של אפשרויות לניחוש עיוור.

 

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

 

 

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

 

 

 יתרונות וחסרונות של פונקציות סימטריות ואסימטריות

פונקציות סימטריות מספקות חסיון הנתונים, שלמות ואמינות והזדהות.

פונקציות אסימטריות מספקות לעומת זאת חסיון הנתונים, שלמות ואמינות, הזדהות ומניעת התכחשות.

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

 

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

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

 

בפועל מה קורה?

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

 

 

שימו לב לחלק המוקף באליפסה אדומה. פרוטוקול ההצפנה: TLS גרסה אחת (כמו שאמרתי, זה SSL לצורך העניין). האלגוריתם בשימוש - AES (שהופיע כאחד האלגוריתמים במשפחת האלגוריתמים הסימטריים) עם מפתח של 256bit ובשילוב עם אלגוריתם RSA (שהוא אלגוריתם אסימטרי) עם מפתח 1024bit ובנוסף SHA (שזה אלגוריתם hash). נעזוב לרגע את ה-hash בצד ונתעסק רק בפונקציות הסימטריות והאסימטריות.

ניתן לראות שבפונקציה הסימטרית נעשה שימוש במפתח הרבה יותר קצר מאשר באסימטרית וזה תואם את מה שנכתב עד כה. בדרך כלל, מה שנעשה הוא להצפין את הנתונים באמצעות אלגוריתם סימטרי (ובכך להרוויח את יתרון הביצועים של האלגוריתם הסימטרי) ואת מפתח ההצפנה עצמו להצפין באמצעות אלגוריתם אסימטרי (ובכך להרוויח את היתרון של שינוע מפתחות מאובטח ופשוט באלגוריתם אסימטרי). כך עובד IPSEC, כך עובדת תוכנת PGP (וגם GPG אני מניח). כך שבזמן שאתם מקימים קישור SSL, הצדדים מחליפים ביניהם מפתח סימטרי בצורה מאובטחת על ידי הצפנתו באמצעות המפתח האסימטרי.

 

מבחינת אורכי המפתחות והאלגוריתמים בהם נעשה שימוש חשוב לדעת שהסטנדרטים משתנים מעת לעת ותמיד כדאי לעקוב אחר מה עדכני. לדוגמא, עד לפני מספר שנים דפדפנים תמכו בהצפנה של 56bit באלגוריתם DES. היום ניתן לפצח הצפנה כזו במספר שעות (עם כמות המחשבים המתאימה).

 

בחלקים הבאים אעסוק בפונקציות hash ושימושים שלהם, חתימה דיגיטלית ושימושיה PKI, חולשות בפתרונות הצפנה ונושאים אחרים.

נכתב על ידי , 8/1/2007 20:35   בקטגוריות אבטחת מידע כללי, כרטיסים חכמים, הצפנות ושמונצס, מושגי יסוד  
5 תגובות   הצג תגובות    הוסף תגובה   3 הפניות לכאן   קישור ישיר   שתף   המלץ   הצע ציטוט
 



מבוא להצפנה


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

ישנם הרבה מאוד אתרים שיסבירו לכם מהי הצפנה, כיצד היא עובדת ומדוע ורשימה זו אינה מהווה תחליף. מי שבאמת רוצה להעמיק מוזמן לקרוא בוויקיפדיה באנגלית (בתור התחלה זה מקור טוב מאוד). מה שאני אנסה לפרט כאן זה קצת נושאים יישומיים הקשורים להצפנה, קצת common sense הצפנתי וכדומה, מפרספקטיבה של שימוש יומיומי בהצפנות (כלומר בלי להכנס לאלגוריתמים, לשורות קוד וכדומה). רשימה זו מהווה מבוא להצפנה וברשימה הבאה אכנס להיבטים יותר יישומיים.

 

מהי הצפנה

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

 

 

סוגי הצפנות

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

 

פונקציות סימטריות:

בפונקציות הצפנה סימטריות יש למעשה מפתח הצפנה יחיד המשמש להצפנה ולפענוח. על מנת ששני צדדים יוכלו להעביר ביניהם נתונים בצורה מאובטחת, הם צריכים לחלוק את אותו המפתח ומכאן נובעת הבעיה המרכזית של אלגוריתמים סימטריים - כיצד מעבירים את המפתח. הרי לא סביר שאם נרצה לדבר עם מישהו באמריקה נצטרך לסוע עד אליו כדי להעביר לו את מפתח ההצפנה. מצד שני, מה נעשה? נשלח את מפתח ההצפנה במייל? בעיה נוספת קשורה לכמות המפתחות שצריך לנהל. בהצפנה סימטרית, כדי לשמור על סודיות הנתונים, כל זוג משתמשים צריך מפתח ייחודי (על מנת שאחרים לא יוכלו להאזין). התוצאה היא שכמות המפתחות היא למעשה (n(n-1)/2). בארגון של 100 איש המשמעות היא שצריך לנהל 4950 מפתחות. שזה די הרבה, בייחוד אם רוצים החלפה תדירה. כדי לפתור את הבעיה הראשונה (החלפת המפתחות) המציאו דיפי והלמן אלגוריתם שנקרא (הפתעה!!) דיפי-הלמן. זה אלגוריתם פשוט מבחינה מתמטית (כלומר פשוט להבנה) ומומלץ לקרוא עליו (סתם כי הוא נחמד). האלגוריתם מאפשר לשני צדדים להחליט על מפתח הצפנה סימטרי בצורה מאובטחת בסביבה לא מאובטחת. כדי לפתור את הבעיה השניה (וגם את הראשונה) הומצאה ההצפנה האסימטרית (שאלגוריתם דיפי-הלמן היה המתאבן שלה) וגולת הכותרת שלה הוא אלגוריתם RSA.

אלגוריתמים נפוצים: DES, 3DES, AES (Rijandael), Blowfish, Twofish, RC4, RC5.

 

פונקציות אסימטריות:

בפונקציות הצפנה אסימטריות יש שני מפתחות הקשורים זה בזה אך המסוגלים לבצע פעולות הופכיות. מפתח אחד נקרא מפתח פרטי והוא משויך לפרט. מפתח שני נקרא מפתח ציבורי והוא מופץ לציבור. כאשר מצפינים עם המפתח הפרטי ניתן לפענח רק באמצעות המפתח הציבורי. כאשר מצפינים עם המפתח הציבורי, ניתן לפענח רק עם המפתח הפרטי. המשמעות היא שכל זוג משתמשים הרוצים לתקשר ביניהם בצורה מאובטחת עושים שימוש בארבעה מפתחות - כל אחד מהצדדים עושה שימוש במפתח הציבורי של האחר על מנת להצפין עבורו, בעוד שאת המידע המוצפן שקיבל הוא מפענח עם המפתח הפרטי שלו. זה עשוי להשמע כאילו שיש פה הרבה מפתחות לנהל, אך המשמעות היא שכדי ששניים יצטרכו לדבר הם צריכים רק לשלוף את המפתח הציבורי של הצד השני וזהו. כך שכל אחד צריך להחזיק רק n+1 מפתחות (כל המפתחות הציבוריים והפרטי שלו) ובכל הארגון יש רק 2n מפתחות. בארגון של 100 איש זה 200 מפתחות, שזה הרבה יותר טוב מה-4950 הדרושים בהצפנה סימטרית. בנוסף, מאחר ואנחנו לעולם איננו צריכים להעביר את המפתח הפרטי שלנו, אלא רק את המפתח הציבורי, לא ניתן לפענח הודעות הנשלחות עבורנו (זה לא לגמרי מדויק, אך הסבר מפורט יגיע בחלק הבא).

אלגוריתמים נפוצים: RSA, DSS-DSA, ECC, El-Gamal.

 

פונקציות קיצוץ (hash):

פונקציות קיצוץ (hash) הן עוף מוזר. תכליתן להסתיר מידע, אך בלי יכולת לפענח אותו. פונקציות קיצוץ עושות שימוש אף הן באלגוריתמים קבועים, אך אינן עושות שימוש במפתח הצפנה. למעשה, פונקציות קיצוץ לוקחות נתון באורך משתנה (כלומר בכל גודל)  ומייצרות ייצוג חד חד ערכי שלו באורך קבוע (128bit, או 160bit בשני האלגוריתמים הכי נפוצים). הייצוג הזה נקרא בעברית גיבוב ובאנגלית digest.  יש מספר דרישות מפונקציית גיבוב:

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

למה צריך פונקציות קיצוץ בכלל? לדוגמא כדי לשמור סיסמאות בצורה כזו שלא ניתן יהיה לאחזר אותן.

אלגוריתמים נפוצים: MD5, SHA-1.

 

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

 

אפילוג

ולפני שניפרד, שני טקסטים מכוננים על הצפנה.

עקרון קרקהוף (קריפטוגרף בן המאה ה-19 שכתב מהן הדרישות ממערכת הצפנה):

  1. המערכת צריכה להיות בלתי ניתנת לפענוח מבחינה יישומית, גם אם לא מבחינה מתמטית.
  2. אין לדרוש כי המערכת תהיה סודית ונפילתה לידי האויב לא תגרום אי נוחות [משמעותית].
  3. ניתן יהיה לשנע ולאחזר את המפתח ללא שימוש בפתקים וניתן יהיה להחליף מפתחות ברצות המשתמשים בכך.
  4. המערכת צריכה להיות ישימה לתקשורת טלגרפית (טוב, בכל זאת מהמאה ה-19).
  5. המערכת צריכה להיות ניידת ותפעולה לא יצריך מספר אנשים.
  6. הפעלת המערכת לא תדרוש מומחיות יוצאת דופן או ידע רב.

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

 

 

נכתב על ידי , 4/1/2007 22:16   בקטגוריות אבטחת מידע כללי, כרטיסים חכמים, הצפנות ושמונצס, מושגי יסוד  
2 תגובות   הצג תגובות    הוסף תגובה   4 הפניות לכאן   קישור ישיר   שתף   המלץ   הצע ציטוט
 



כינוי: 

גיל: 48




65,156
הבלוג משוייך לקטגוריות: אינטרנט
© הזכויות לתכנים בעמוד זה שייכות לעומר טרן אלא אם צויין אחרת
האחריות לתכנים בעמוד זה חלה על עומר טרן ועליו/ה בלבד
כל הזכויות שמורות 2024 © עמותת ישראבלוג (ע"ר)