הסבר על Secure Hash Algorithm – SHA
נתחיל תחילה מ Hash
Hash
אשר אנחנו רוצים להעביר קובץ דרך האינטרנט אנחנו רוצים לוודא שאף אחד לא "התעסק" עם הקובץ, שינה אותו, הכניס ווירוס אליו וכו' הHash הוא אלגוריתם הוא מספר מספר ארוך 32ביט 64ביט 128ביט והוא בנוי מ Hexa Decimal, הוא בעצם חתימה של הקובץ, כל קובץ יש לו הHash שמייחד אותו, כך בעצם אנחנו יכולים לוודא שאכן הקובץ הזה שהעברנו דרך האינטרנט לא "התעסקו איתו".
ההמרה של הקובץ לאותו מספר לא אומרת שאפשר מאותו המספר להמיר בחזרה אל הקובץ שכן זה אינו כיווץ, ההמרה צריכה להיות מהירה, אבל לא מהירה מידי שכן המרה מהירה מידי גורמת לכך שניתן "לחקות" את המספר, זאת אומרת שאם לקחנו קובץ ששוקל 50GB ובצענו לו המרה לHash וקיבלנו לדוגמה J4H53K9D…. והוספנו לו קבצים נוספים בנפח 1GB הHash שנקבל יהיה שונה לגמרי ולא יהיה ניתן לקבל את אותו הHash כמו מקודם, אפילו שינוי של ביט אחד יגרום לנו לקבל מספר אחר לגמרי.
יכול להיות מצב בו לשני קבצים שונים לחלוטין יש את אותו הHash, אז אך זה אפשרי? בעולם המתמטיקה יש את "עקרון שובך היונים" עקרון זה מתאר חפץ,אדם,חיה שאם תגדירו אותם על פי קריטריון תמיד יהיה אחד שהוא זהה, לדוגמה בקבוצה של 13 אנשים לזוג אחד יהיה את אותו תאריך יום הולדת, אם יש 10 תאים בשובך של יונים ויש לכם 15 יונים, יהיה 5 תאים שיחלקו 2 יונים או הפוך, אם יש 10 תאים ויש לכם 9 יונים, תא מסוים אחד ישאר ריק.
על פי הקבלה הזו ניתן להסיק שקיים באינטרנט כולו 2 או יותר קבצים עם אותו הHash.
הבעיה הזו נקראת Hash Collisions, התנגשות של Hashes ועוד יותר יכול להיות מצב בו ניתן לשנות באופן מלאכותי יהיה ניתן ליצור שני קבצים שונים בגודלם עם אותו הHash אחד מהם הוא MD5 שהוא Hash נפוץ שנחשב "לשבור" שניתן להזין "סיסמא" או קובץ ולקבל את ה הHash שלו והפוך,
דוגמה: נלך לאתר שמבצע Encrypt ו Decrypt ל Hash מסוג md5
הזינו את 3056979ae58b0293b592fb96fae7bdfc ותקבלו תוצאה, התוצאה היא שה Hash שבור וניתן לקבל ממנו דיי במהירות את ההיפוך לאותה הסיסמא
המחשבון הזה לא "שובר" את MD5, אלא בגלל שכל כך הרבה שנים השתמשו בו, כמעט לכל סיסמא יש את הHash שלה.
בדוגמה הזו זה סיסמה אבל ניתן לקחת קובץ שהMD5 שלו לדוגמה 7cc6def586ec99332a95379d3a99c8df ולשנות את הקובץ, לדוגמה להכניס בו ווירוס ועל ידי הגדרה מלאכותית נקבל את אותו הHash
אז במה משתמשים היום? SHA1 הוא הנפוץ ביותר, אך גם הוא כמעט שבור ולא בטיחותי כלל, אפילו גוגל הודיעו שיפסיקו לתמוך בו בתעודות אבטחה של אתרים, ומודיעים בפוסט הבא על Google SHA1 Collision Problem
שכן בדיוק כמו MD5 יש התנגשויות של SHA ולכן כולם עוברים כבר עכשיו ל SHA2 ול SHA256, הרבה תוכנות מגיעות או מוצג באתר בדיוק לפני ההורדה הHash שלהן, דוגמה היא הבדיקה הבאה
הורדתי KALI ועל ידי התוכנה ComputeHash ניתן לבדוק מה ה Hash של הקובץ
טענתי את Kali לתוכנה והמתנתי לבדוק מה ה Hash שלה,
ניתן להבחין ב SHA256, וכאשר פתחתי את הקובץ שבו כתוב ה Hash של Kali ולבדוק שאף אחד לא "התעסק" עם הקובץ, ה Hash תואם
SHA
הוא קיצור של Secure Hash Algorithm פותח על ידי ה NSA על מנת לתת מענה ל MD5, הוא אלגוריתם ליצירת String של מספרים ואותיות על ידי הכנסה של "מידע" והמרה שלו לאותו ה String, לדוגמה ניקח את המילה " Shushan" -> ונקבל 7cc6def586 לפעולה זו קוראים Hash Function אבל אם נשנה את המידע אפילו קצת נקבל Hash Function שונה לחלוטין אורכו של SHA1 הוא 160Bit, זאת אומרת 40 תווים, שכן ב HEXADeciml כל תו הוא 4 Bits ולכן
40 * 4 = 160Bit
והשימוש הכי נפוץ שלו זה לוודא שהודעה שנשלחה לא שונתה, לוודא תעודת אבטחה כך שלא שונתה, ה SHA ממיר את הקובץ \ ההודעה הבנוי מבינארי לHexa Deciml על ידי כך שהוא לוקח את ההודעה מההתחלה ועד סופה וממיר את המידע ל Hash, זה נעשה על ידי לקיחה של חלק מהמידע ומחלק אותו כך:
H0 H1 H2 H3 H4
10100110 10100110 10100110 10110110 10000110
10110110 10110110 00111110 10110110 10100110
00111011 00111011 00110110 10010110 101110110
11110000 11111000 00110110 10110110 10000100
4 שורות שבכל שורה 8 Bit
4*8 = 32
בכל "ריבוע" 32 Bit כפול 5 ריבועים
32 * 5 = 160Bits
בעולם מדעי המחשב קיים ה one-way compression function , בתצורה זו, ה compression function יקח חלק מהמידע של ההודעה \ הקובץ וחלק מה SHA ויציג לנו את ה Hash הוא יקח את ההודעה ויבצע 80 Loops לכל 512 bits של ההודעה.
זאת אומרת שלכל הודעה של 512 Bits כל הH יתווספו להודעה ויבוצע ערבוב כפול 80 פעם כמספר ה Loop והערבוב הזה יוצר לנו את ה Hash
גם ה 80 פעם שהוא חוזר על הפעולה, לא מספיקה ולכן SHA1 נחשב היום ל"שבור"