MD5 היא פונקציית גיבוב קריפטוגרפית (פונקציה שמקבלת נתון ומוציאה 'טביעת אצבע' קצרה וקבועה). היא מקבלת קלט באורך כלשהו ומייצרת תמצית בגודל 128 סיביות. התמצית נראית כמחרוזת הקסדצימלית ושימשה לאימות שלמות מסרים ולחתימות דיגיטליות.
MD5 פותחה על ידי רונלד ריבסט ב-1991 והחליפה את MD4. בעבר היא השתלבה בתקנים רבים והייתה נפוצה בתוכנות אבטחה. החל מ-1996 נמצאו בה פגמים, ובשנים הבאות התגלו חולשות קריטיות יותר. ב-2004 הוכח שהיא לא עמידה מפני 'התנגשויות', כלומר אפשר למצוא שני קלטים שונים שמניבים תמצית זהה. מנצלים חולשות אלה נוצרו התקפות מעשיות, כולל זיוף תעודות דיגיטליות (2008) ונוזקה שזייפה חתימות (2012). לכן מומחים ותקנים רבים המליצו לעבור ל-SHA ולאלגוריתמים מודרניים. עם זאת, MD5 עדיין משמשת במקרים מוגבלים בגלל פשטותה ומהירותה.
MD5 היא פונקציה איטרטיבית בסגנון מרקל-דמגרד: הקלט מחולק לבלוקים של 512 סיביות. כל בלוק מעובד בסדרה של שלבים שממקסעים ערבוב וקִומפְּּלִיצְיָה של הביטים.
לפני העיבוד הקלט מרופד: מוסיפים '1' ואז אפסים עד שאורך הבלוק האחרון יהיה 64 סיביות פחות ממכפלה של 512. בסוף הבלוק מוסיפים 64 סיביות שמייצגות את אורך הקלט המקורי (לפי סדר בתים קטן). זה מוודא שניתן לשחזר היכן הקלט הסתיים.
האורך המקורי מקודד ב-64 סיביות בסוף הבלוק. המשמעות הפרקטית היא שאפשר לעבד רק עד גודל שהולם 64 סיביות של ייצוג האורך.
המצב הפנימי מורכב מארבע מילים של 32 סיביות (A, B, C, D). הן מאותחלות בקבועים קבועים (בייצוג הקסדצימלי: 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476).
על כל בלוק מבצעים 64 פעולות המחולקות ל-4 סבבים. בכל פעולה משולבים:
- פונקציות עזר F, G, H, I (פעולות ביטיות כמו AND, OR, XOR, NOT), הן מייצרות ערבוב של המילים.
- מילת נתונים מהבלוק.
- קבועים T שמחושבים מהסינוס (קבועים מוכנים מראש).
- הזזות מעגליות בכמה בתים (מספר ההזזה משתנה לפי הסבב).
התוצאה מעודכנת על מצבו הפנימי, ובלוק הבא מתחיל מהמטרה המעודכנת.
בסיום כל הבלוקים מחברים את ארבע המילים הפנימיות לקבלת תמצית בגודל 128 סיביות (H1||H2||H3||H4), המוצגת בדרך כלל כהקסדצימל.
דוגמות ידועות של תמציות MD5 (בצורה הקסדצימלית):
- MD5("") = d41d8cd98f00b204e9800998ecf8427e
- MD5("abc") = 900150983cd24fb0d6963f7d28e17f72
קיים קוד פתוח בשפות כמו C/C++ שמממש את האלגוריתם. מימושים אלה משתמשים באופטימיזציות של XOR, AND, הזזות ומקרואים כדי להאיץ ביצועים.
בזכות הרגישות של הפלט לשינויים בקלט, MD5 שימשה ליצירת 'חתימות' לזיהוי שגיאות ושינויים. כיום נעשה בה שימוש מוגבל כ'סכום ביקורת' (checksum) או לתיקון שגיאות כאשר התקלות אינן זדוניות.
MD5 אינו בטוח לשימושים קריפטוגרפיים שדורשים עמידות מפני התנגשויות. נוסחו וניצולו הוביל להמלצות לעבור ל-SHA-2 ואלגוריתמים מודרניים אחרים. ישנן התקפות מהירות, כולל התקפות chosen-prefix שמייצרות התנגשויות עבור קלטים עם תחילית קבועה.
MD5 היא דרך להכין 'טביעת אצבע' קצרה לקובץ או להודעה. טביעת האצבע הזאת היא מחרוזת קבועה באורך 128 סיביות. היא עוזרת לבדוק אם משהו השתנה בקובץ.
MD5 נוצרה ב-1991 על ידי רונלד ריבסט. בתחילה השתמשו בה הרבה. אחרי שנים גילו שהיא לא בטוחה. זה אומר שאנשים יכולים למצוא שני קבצים שונים עם אותה טביעת אצבע. מאז ממליצים להשתמש בשיטות חדשות יותר.
MD5 חותכת את הנתונים לחלקים של 512 סיביות (בלוקים). אם חלק אחרון קצר מוסיפים '1' ואז אפסים. בסוף שמים את אורך ההודעה ב-64 סיביות.
מרחיבים את ההודעה כדי שיתאים לגודל הבלוק. זה מאפשר לדעת איפה סוף ההודעה.
בסוף מוסיפים את מספר הסיביות של ההודעה ב-64 סיביות.
האלגוריתם מתחיל עם ארבע מילים (A, B, C, D). הן מתחילות בערכים קבועים.
כל בלוק מעובד ב-64 צעדונים. בכל צעד מערבבים את המילים עם חלקי הבלוק וקבועים מיוחדים. אחרי כל הבלוקים מקבלים את הטביעת האצבע.
התוצאה היא ארבע מילים שמחוברות יחד. בדרך כלל מציגים את זה כמחרוזת הקסדצימלית.
כמה דוגמאות מוכרות:
- MD5("") = d41d8cd98f00b204e9800998ecf8427e
- MD5("a") = 0cc175b9c0f1b6a831c399e269772661
יש קוד בשפות תכנות שמממש את MD5. הקוד משתמש בהרבה פעולות ביטיות כדי לעבוד מהר.
MD5 שימשה לבדוק שלמות קבצים ולמצוא שגיאות. היום משתמשים בה פחות למטרות אבטחה.
MD5 אינה בטוחה נגד מתקפות. לכן לא משתמשים בה לחתימות דיגיטליות. מומלץ להשתמש בדרכים חדשות יותר.
תגובות גולשים