בקריפטוגרפיה,אלגוריתם גיבוב בטוח (באנגלית: Secure Hashing Algorithm) הידוע בקיצור SHA הוא שם כולל למשפחה שלפונקציות גיבוב קריפטוגרפיות שהן חלק מתקן פדרלי שלממשלת ארצות הבריתFIPS (בעברית:תקןעיבוד מידע פדרלי) הנקרא SHS (קיצור שלפונקציית גיבוב בטוחה). התקן נועד לשימוש כחלק ממנגנוןאימות והבטחת שלמות מידע וחלק מתקןחתימה דיגיטלית והוא הכולל את הפונקציות: SHA-0 (במקור SHA),SHA-2, SHA-1 והחל מ-2012 גם אתSHA-3. הפונקציות ממשפחה זו משמשות ביישומים ופרוטוקולים מאובטחים רבים.
SHA היא פונקציה המפיקה מקלט בכל אורך רצוי "תמצית" קצרה באורך קבוע שהמאפיין העיקרי שלה שהיאחד-כיוונית במובן שלא ניתן לשחזר את הקלט המקורי בהינתן התמצית. המשמעות היא שיהיה קשה מאוד למצוא מסר אחר ממנו ניתן להפיק תמצית זהה. זו תכונה יסודית של פונקציית גיבוב המאפשרת להבטיח שאם המסר שונה אפילו במעט, התמצית שתופק ממנו תהיה שונה לגמרי בהסתברות מאוד גבוהה. האלגוריתמים ממשפחת SHA מפיקים את התמצית באמצעות סדרת פעולותאד הוק,פעולות על סיביות כמוהזזה מעגלית, פעולותאריתמטיות כמו חיבורמודולרי והמבנה שלהם למעט SHA-3 הוא בסגנוןדויס-מאייר לפישיטת מרקל-דמגרד. האלגוריתם מכיל זיכרון פנימי ו"פונקציית כיווץ" או "פונקציית תמצות". הקלט תחילה מחולק לבלוקים באורך קבוע לאחר שעבר הכנה וריפוד כראוי ואז הפונקציה הפנימית מופעלת באופןאיטרטיבי על הקלט כאשר פלט הפונקציה מוזן בחזרה כקלט מספר פעמים והפלט הסופי הוא תכולת הזיכרון הפנימי לאחר עיבוד כל הבלוקים של הקלט.
הפונקציות ממשפחת SHA פותחו, אושררו והוכנסו לתקן SHS של FIPS המנוהל על ידי NIST בשיתוף פעולה שלNSA. הן כוללות את:
כל הפונקציות ממשפחת SHA עוברות בדיקות בנושא ביטחון ומאושרות בתקן FIPS על ידי הארגוןCMVP, שיתוף פעולה של NIST האמריקאי ו-CSE (הסוכנות הקנדית הממשלתית בנושא קריפטולוגיה). תפקיד הארגון להעריך ולבדוק מודולים קריפטוגרפיים לצורך שימוש מסחרי (לא ממשלתי/צבאי). היא עומדת לרשות יצרנים וספקים בתחומי ארצות הברית וקנדה ומספקת תעודות המאשרות מוצרים קריפטוגרפיים שעברו בחינה ואישור של מומחיהצפנה (בעיקר מומחים של NSA).
אלגוריתם SHA פורסם במאי 1993 על ידי ה-NIST לצורך ייצוג תמציתי של הודעות בשימוש באלגוריתמי חתימות וכאשר נדרש ערך גיבוב קריפטוגרפי ביישומים פדרליים[2]. אלגוריתם SHA בנוי בשיטת מרקל-דמגרד. הקלט שלו הוא מחרוזת שאורכה עדסיביות והפלט שלה הוא תמצית באורך 160 סיביות. האלגוריתם מבוסס ברובו על הפונקציהMD4 תוך הגדלת המצב הפנימי ושינוי חלק מהפונקציות הפנימיות וערכי הקבועים שבשימוש.
בשנת 1995 פרסם ה-NIST אלגוריתם חדש שנקרא SHA-1 שמטרתו להחליף את אלגוריתם SHA הקודם (החל מהפרסום נהוג להתייחס לאלגוריתם הראשון כ-SHA-0). השוני היחיד בין האלגוריתמים כלל שינוי במנגנון הרחבת ההודעה של SHA-1 על פני SHA-0. לטענת ה-NIST מטרת התיקון הייתה לפתור חולשה שנמצאה באלגוריתם הקודם; ה-NIST לא פרסם את החולשה שהתיקון אמור לפתור[3].
בשנת 2002 הוסיף ה-NIST שלוש פונקציות נוספות לתקן SHA-256, SHA-384 ו-SHA-512[4]. הפונקציות החדשות נבדלו משמעותית באלגוריתמים שבבסיסן מ-SHA-1 ובכך הבטיחו שחולשות בה לא ישפיעו בהכרח על הפונקציות החדשות. הפונקציות גם איפשרו ליצור ערכי תמצית ארוכים יותר עבור הודעות ובכך להגביר את בטיחות הפרוטוקולים המשתמשים בהן. בשנת 2008 הוסיפה ה-NIST פונקציה נוספת, SHA-224[5].
בשנת 2007 יזמה ה-NIST תחרות לבחירת פונקציות שיצטרפו למשפחת ה-SHA. לתחרות הוגשו 64 הצעות שמתוכן עמדו 51 בתנאי הסף. ההצעות פורסמו והקהילה הקריפטוגרפית הבינלאומית הוזמנה לנתח ולנסות לשבור את כל המועמדים. 14 מועמדים עברו לשלב השני של התחרות כאשר חמשת המועמדים הסופיים הםBLAKE,Grøstl,JH,קצ'אק ו-Skein. בשנת 2012 פורסם הזוכה בתחרות לגיבוב SHA-3 והוא הצופן Keccak[6].
הפונקציה מורכבת מחמישה משתנים פנימיים בגודל 32 סיביות היוצרים מצב פנימי בגודל 160 סיביות. בכל איטרציה מופעלת פונקציית התמצות על המשתנים ליצירת הקלט לאיטרציה הבאה.
ראשית, המשתנים הפנימיים מקבלים את ערכיוקטור האתחול (IV)
לאחר מכן, קלט הפונקציה מחולק לבלוקים באורך 512 סיביות המכונים; לבלוק האחרון מוסיפים את אורך ההודעה. במידה ואורך ההודעה אינו כפולה של 512 מוסיפים לבלוק האחרון, אחרי ההודעה ולפני האורך שלה את הסיבית 1 ולאחריה 0 בכמות הנדרשת כדי להביא אותה לאורך של 512 סיביות.
בכל שלב של הפונקציה מועברים לפונקציית התמצות המשתנים הפנימיים מהסיבוב הקודם והבלוק הנוכחי לעיבוד. הפונקציה מחזירה את הערך החדש של המשתנים הפנימיים (). פונקציית הגיבוב אינה כוללת שלב סיום ולכן בסיום התהליך פלט פונקציית הגיבוב הוא הפלט של פונקציית התמצות מהשלב האחרון.
מנגנון הרחבת הודעות: הפונקציה מחלקת את הבלוק ל-16 חלקים באורך 32 סיביות המכונים. לאחר מכן, הפונקציה מרחיבה את 16 החלקים ל-80 באמצעות הפעלת ה-LFSR הבא 64 פעמים:
תמצות המסר: עבור כל אחד מ-80 החלקים של המסר, הפונקציה מפעילה את האלגוריתם הבא:
פלט: פונקציית התמצות מחזירה את הפלט:
הפונקציה והקבוע K מוגדרים כך:
הפונקציות SHA-0 ו-SHA-1 זהות באלגוריתמים שלהם פרט למנגנון הרחבת ההודעה ב-SHA-1 שמפעיל את ה-LFSR הבא 64 פעמים:
מספר התקפות על פונקציות ה-SHA-0 וה-SHA-1 נתגלו עד כה. טרם דווחו התקפות עלSHA-2, אולם מכיוון שהפונקציות הללו מבוססות על אלגוריתם דומה, קיים חשש שגם האחרונה תהיה בקרוב פגיעה להתקפות.
בשנת 2005 פרסמו צוות חוקרים מאוניברסיטת שאנדונג סין, התקפה על SHA-1 שמוצאתהתנגשות ב- פעולות ולאור זאת לא מומלץ לשימוש כיום. לגבי SHA-256 ומעלה לא דווח על חולשות מסוימות, כך שהם עדיין טובים לשימוש.
להלן טבלת האלגוריתמים ובטיחותם כפי שפורסם על ידי NIST:
האלגוריתם | גודל מסר מקסימלי בסיביות | גודל גוש בסיביות | גודל מילה (Word) | גודל תמצית המסר (בסיביות) | בטיחות* (בסיביות) |
---|---|---|---|---|---|
SHA-1 | |||||
SHA-256 | |||||
SHA-384 | |||||
SHA-512 |