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

יומן אבטחה

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

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

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

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


1/2007

מבוא להצפנה - פונקציות 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 הפניות לכאן   קישור ישיר   שתף   המלץ   הצע ציטוט



כינוי: 

גיל: 50




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