אבטחה · 3 דקות קריאה ·

MD5, SHA-1 או SHA-256: באיזה גיבוב להשתמש?

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

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

"hello"  MD5      5d41402abc4b2a76b9719d911017c592
"hello"  SHA-256  2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

MD5 ו-SHA-1: שבורים לצורכי אבטחה

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

SHA-256: ברירת המחדל הבטוחה

לבדיקת שלמות, לאימות הורדות, לחתימות דיגיטליות ולזיהוי תוכן לפי גיבוב, SHA-256 ממשפחת SHA-2 הוא הבחירה הסטנדרטית. SHA-3 ו-BLAKE2 הם חלופות מודרניות ברמת אבטחה דומה.

CRC32: לתקלות, לא למתקפות

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

לעולם לא לשמור סיסמאות עם גיבוב מהיר

זו הטעות הנפוצה ביותר. מהירות היא בדיוק מה שלא רוצים בסיסמאות: כרטיס גרפי יכול לנסות מיליארדי ניחושי SHA-256 בשנייה. השתמשו באלגוריתם איטי עם salt שנועד לסיסמאות, כמו Argon2, ‏bcrypt או scrypt, דרך ספריית הסיסמאות של ה-framework שלכם.

גיבוב, הצפנה וקידוד הם דברים שונים

קידוד   Base64, hex, קידוד URL   הפיך לכל אחד, בלי מפתח
הצפנה   AES, RSA                 הפיך רק עם המפתח
גיבוב   SHA-256, MD5             חד-כיווני, אי אפשר להפוך

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

אימות של קובץ שהורדתם

פרויקטים רבים מפרסמים checksum של SHA-256 ליד קובצי ההורדה. חשבו את הגיבוב של הקובץ שקיבלתם והשוו בין שני הערכים; אם תו אחד שונה, הקובץ פגום או שהוא לא הקובץ שהמפרסם שחרר. בכל מערכת הפעלה יש פקודה מובנית:

Linux        sha256sum file.iso
macOS        shasum -a 256 file.iso
Windows      certutil -hashfile file.iso SHA256
PowerShell   Get-FileHash file.iso -Algorithm SHA256

אורכי גיבוב

MD5 מפיק 128 ביט (32 תווי hex), SHA-1 מפיק 160 ביט (40), SHA-256 מפיק 256 ביט (64) ו-SHA-512 מפיק 512 ביט (128). אם צריך להוכיח מי יצר הודעה, ולא רק שהיא לא השתנתה, השתמשו ב-HMAC או בחתימה דיגיטלית: כל מי שמשנה את התוכן יכול לחשב מחדש גיבוב רגיל.

מה לבחור, בשורה אחת

  • בדיקת קובץ שהורד או גיבוי: SHA-256.
  • חתימות, תעודות וכל דבר שקשור לאבטחה: SHA-256 או חזק יותר, אף פעם לא MD5 או SHA-1.
  • איתור קבצים כפולים או בניית מפתחות מטמון: MD5 או SHA-1 בסדר גמור, והם מהירים.
  • זיהוי שגיאות העברה בפרוטוקול או בארכיון: CRC32.
  • שמירת סיסמאות: אף אחד מאלה; השתמשו ב-Argon2, ב-bcrypt או ב-scrypt.

למה הגיבובים לא תואמים

אם שני כלים נותנים גיבובים שונים לאותו טקסט, הקלט כמעט אף פעם לא באמת זהה: שורה חדשה בסוף, סיומות שורה של Windows או קידוד טקסט אחר משנים את כל התוצאה. מחולל הגיבובים של 4Dev מגבב טקסט כבתים של UTF-8, כמו md5sum, ‏sha256sum ו-hashlib של Python, ותומך ב-17 אלגוריתמים, בהם MD5, ‏SHA-1, ‏SHA-2, ‏SHA-3, ‏BLAKE2 ו-CRC32.

למחולל הגיבובים

LinkedInXFacebook