1. אותו שם קובץ אינו מבטיח אותו תוכן
אם השם והגודל של קובץ התקנה שהורדתם תואמים לדף ההנחיות, קל להניח שההורדה תקינה. אבל אפשר לשנות שם, וקבצים בגודל זהה עשויים להכיל תוכן שונה. לעומת זאת, העתקת תמונה בשם אחר אינה משנה בהכרח את הבתים שבתוך הקובץ. גיבוב מסייע בהשוואה: תוכן הקובץ עובר חישוב מוגדר ומיוצג בערך קצר. השאלה אינה אם השם נראה משכנע, אלא אם הבתים שקיבלתם תואמים לייחוס אמין. אפשר לשאול זאת גם כשמעבירים קובץ גיבוי להתקן אחסון אחר.
SHA-256 הוא אלגוריתם שמפיק מהקלט ערך גיבוב של 256 סיביות. בדרך כלל מציגים אותו ב־64 ספרות הקסדצימליות, משום שכל ספרה כזו מייצגת 4 סיביות. אורך התוצאה אינו גדל ביחס לגודל הקובץ. אותם בתים באותו אלגוריתם נותנים אותה תוצאה. עם זאת, מספר הערכים באורך מוגבל הוא סופי, ולכן התנגשויות, שבהן קלטים שונים מקבלים אותו ערך, קיימות עקרונית. שימוש מעשי בהשוואה שונה מהקצאת שם ייחודי מבחינה מתמטית לכל קובץ. RFC 6234 מציג חישובי גיבוב, כולל SHA-256, וחומרי בדיקה.
2. גיבוב אינו הצפנה או עותק מוקטן של הקובץ
ידיעת ערך הגיבוב אינה מעניקה כפתור פענוח שמחזיר את המסמך או התצלום המקוריים. הצפנה מתוכננת לאפשר שחזור בעזרת מפתח מתאים, ואילו גיבוב קריפטוגרפי אינו פורמט אחסון לשחזור המקור. גם אין פירוש הדבר שפרסום הגיבוב בלבד שומר כל קלט בסוד. אם מספר הקלטים האפשריים קטן, אפשר לחשב גיבוב לכל אחד ולהשוות. לכן אין להפוך את ההסבר על SHA-256 לבדיקת קבצים לעצה שלפיה די בגיבוב ישיר לשמירת סיסמאות. בדיקת שלמות, סודיות ואחסון סיסמאות הם תפקידים בעלי דרישות שונות.
כשמחשבים גיבוב לכל הקובץ, לא משווים רק את התווים המוצגים במסך. גם משפט שנראה זהה עשוי להיות מורכב מבתים אחרים עקב סיומות שורה, קידוד תווים או מטא־נתונים פנימיים. קובץ שחולץ מארכיון והארכיון המקורי הם מושאי השוואה שונים. נרמול תווים או שינוי סיומות שורה לפני החישוב מפיקים גיבוב של הנתונים לאחר השינוי. אם המפיץ פרסם ערך עבור הארכיון המקורי, השוו תחילה את הארכיון שהורדתם עצמו. זו החלה מעשית של ההבדל בין תצוגה לבתים שהוסבר במאמר הקודם על Unicode ו־UTF-8.
3. משווים הורדה באותו אלגוריתם ועם ערך הייחוס המתאים
לפני הבדיקה בודקים בהוראות ההפצה הרשמיות של היצרן את הגרסה, מערכת ההפעלה, שם הקובץ ואלגוריתם הגיבוב יחד. ערך של גרסה אחרת או מתקין למערכת אחרת אינו בסיס השוואה מתאים. ב־PowerShell הפקודה Get-FileHash -LiteralPath '.\download.zip' -Algorithm SHA256 קוראת קובץ מקומי ומחשבת את הגיבוב. היא אינה מפעילה את התוכן בנתיב המצוין. התיעוד הרשמי של Microsoft מסביר שהערך מחושב מתוכן הקובץ ושינוי השם בלבד אינו משנה אותו. התאימו את השם והנתיב לקובץ שקיבלתם בפועל, ואל תשנו אותו בזמן החישוב.
בפלט משווים את כל 64 הספרות בשדה Hash לערך SHA-256 שפרסם המפיץ. התאמה של כמה ספרות בהתחלה או בסוף אינה התאמה מלאה. אותיות לטיניות גדולות וקטנות בייצוג הקסדצימלי מציינות אותם מספרים, אך אם הועתקו תווים זרים או חסרות ספרות, בודקים קודם את הערך המועתק. התאמה תומכת בעקביות בין הבתים שקיבלתם לייחוס שבו אתם בוטחים. היא אינה בדיקה של נכונות המסמך, איכות התוכנה או התנהגות זדונית. אם קובץ הייחוס עצמו בעייתי, גם עותק זהה שלו יקבל אותו גיבוב. הצלחת החישוב וההחלטה אם ראוי להשתמש בקובץ דורשות שיקול נפרד.
4. אי־התאמה היא סיבה לברר, ולא הוכחה למתקפה
נניח שקובץ הפצה שהורדתם אתמול שונה מהערך המופיע בהנחיות של היום. זו דוגמה להמחשה, ולא תיעוד של אירוע אמיתי. תחילה בודקים שההנחיות מתייחסות לאותה גרסה, שלא התקבל קובץ למכשיר אחר ושלא בוצע החישוב לפני סיום ההורדה. ייתכן שחושב גיבוב של קובץ שחולץ במקום של הארכיון, או שעורך שמר שוב את המסמך. יש להבחין בין שינוי מושא ההשוואה לשינוי התוכן בהעברה או באחסון. ההבדל בין הערכים לבדו אינו מגלה מי שינה מה ומתי.
אל תפעילו מיד קובץ התקנה שהגיבוב שלו אינו תואם כדי לבדוק אותו. בדקו שוב את הוראות ההפצה הרשמיות ואת ערך הייחוס, ואז השוו הורדה חדשה. אם ההבדל נמשך, רצוי לבדוק הודעת תיקון או ערוץ תמיכה של המפיץ ולתעד את התוצאה. כללו את זמן הבדיקה, כתובת המקור, גרסת הקובץ, האלגוריתם והערך שחושב. חישובים חוזרים בעלי תוצאה זהה מעידים שהקובץ המקומי הנוכחי נקרא באותה דרך, אך אינם מתקנים ערך שפורסם בטעות או בעיה בנתיב ההפצה. דריסת רישום הייחוס בערך הצפוי מאבדת את הבסיס לזיהוי שינוי בעתיד.
5. הבסיס לאמון בערך הייחוס ותפקיד החתימה הדיגיטלית
אם תוקף יכול לשנות הן את הקובץ והן את ערך הגיבוב המפורסם לצדו, הוא יכול לחשב את גיבוב הקובץ ששינה ולהציגו כייחוס חדש. NIST SP 800-175B מסביר מגבלה זו של שימוש בגיבוב בלבד ללא מפתח או חתימה. קבלת הערך מדף HTTPS בכתובת רשמית מסייעת לבדיקת המקור ונתיב ההעברה, אבל אינה מבטיחה שהשרת של המפיץ עצמו לא נפרץ. השאלה החשובה אינה אם מחרוזת הגיבוב ארוכה ומרשימה, אלא מהיכן התקבל הייחוס ובאיזה תהליך אמון. התאמה של שני ערכים שהועתקו מאותו מסך אינה מאמתת לבדה את זהות היצרן.
חתימה דיגיטלית מאפשרת לאמת את הקשר בין החתימה לנתונים, למשל בעזרת מפתח ציבורי שהושג באופן אמין. אם המפיץ מספק תהליך בדיקת חתימה, פעלו לפי ההנחיות הרשמיות, לרבות אימות בעל המפתח וטביעת האצבע שלו. אמון אוטומטי במפתח ציבורי שנראה לראשונה לצד קובץ ממקור לא ברור אינו פותר את שאלת תחילת האמון. גם HMAC, שמשתמש במפתח סודי משותף, הוא כלי אימות שונה מגיבוב רגיל; אין מדובר בתכונה שאפשר להוסיף כרצונכם לכל הורדה כדי לפתור את הבעיה. חתימה תקפה אינה מוכיחה שהתוכנה נקייה מפגמים או שתוכן המסמך נכון. התאמת בתים, אימות מקור והערכת תוכן קשורים זה בזה, אך לכל אחד נדרש בסיס משלו.
6. בגיבוי ובעבודה משותפת מתעדים גם את היקף ההשוואה
בגיבוי תצלומים אישיים, שמירת SHA-256 של המקור והשוואתו לעותק עשויות לסייע בזיהוי שינויים בזמן ההעברה. גם את רשימת ערכי הייחוס יש לשמור כך שלא תאבד או תידרס יחד עם המקור. אם תוכנת ניהול תמונות כתבה מחדש פרטי סיבוב או מטא־נתונים של הצילום, גיבוב הקובץ עשוי להשתנות גם כשהתמונה נראית דומה. לכן מבחינים תחילה בין שמירת הבתים בדיוק ובין שקילות המשמעות של תמונה ערוכה. בדיקת תיקייה שלמה דורשת יותר מגיבוב של קובץ יחיד: מנהלים יחד רשימת קבצים כלולים, נתיבים יחסיים וערך לכל קובץ.
בסקירת מסמכים משותפת, גיבוב יכול לסמן את הגרסה שנבדקה. אך התאמת גיבוב אינה תחליף לראיה שמישהו קרא את הטקסט כולו או השווה את התרגום. קודם מתעדים מה נבדק, מתי ובאיזו שיטה, ואז קושרים את הרישום לערך הקובץ. התמונה במאמר היא תרשים הסבר מקורי שמארגן השוואת בתים, מקור ייחוס והיקף בדיקה; היא אינה מדידה אמיתית או תעודה. בבדיקת קובץ, תעדו לפי הסדר את המושא והאלגוריתם, מקור הייחוס וגבולות המסקנה. כך יוכל אדם אחר לחזור על ההליך בלי להפריז במשמעות ההתאמה או אי־ההתאמה.