הסכנות בשימוש md5 כסיסמה

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

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

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

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

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

במידה אתם מעוניינים לבצע שמירה של סיסמאות, ישנם כ3 אלגוריתמים מומלצים כיום:

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

2 מחשבות על “הסכנות בשימוש md5 כסיסמה

  1. א

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

    הסיבה לחשיבות היות פונקצית האש חד ערכית, ולא חד חד ערכית, בהצפנת סיסמאות, היא שכמעט לא ניתן להפיק מהערך H את הסיסמה. פונקציית ההאש עצמה מקשה על העבודה בכיוון הזה, אך בתוספת המלחה – זה כבר יהיה בלתי אפשרי. שכן, גם אם מצאתי ערך Z כלשהו שתוצאת ההאש שלו היא H, לא בטוח (או קרוב לודאי שלא…) שהוא מתאים בכלל לפונקציית ההמלחה. לדוג' (שהיא בעייתית בפני עצמה, אך היא מדגימה את העיקרון): אם פונקציית ההמלחה שלי היא להוסיף את המחרוזת "123" בסוף הסיסמה, וערך ההאש שיצא לי הוא "ABC", ומצאתי ערך Z שנותן את הערך הנ"ל והוא: "ZXY", הרי שאי אפשר להפעיל עליו את ההמלחה לאחור, מפני שהוא לא מסתיים ב "123"!

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

כתיבת תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s