מהי פונקציית Hash קריפטוגרפית?
תשובה קצרה: פונקציית hash קריפטוגרפית היא אלגוריתם מתמטי חד-כיווני שלוקח מחרוזת בכל אורך וממפה אותה למחרוזת באורך קבוע (checksum). אי אפשר לשחזר את הטקסט המקורי מה-hash.
פונקציות hash הן אבני הבניין של אבטחת האינטרנט: חתימות דיגיטליות, תעודות HTTPS, בלוקצ'יין ואחסון סיסמאות בבסיסי נתונים.
בניגוד להצפנה, שנועדה לפענוח עם מפתח, גיבוב הוא כיוון אחד. גם מחשב-על לא יכול להפוך SHA-256 חזרה לטקסט המקורי.
בנוסף יש "אפקט מפולת": שינוי אות גדולה אחת או רווח אחד בקלט משנה את הפלט באופן קיצוני. לכן hash מתאים לאימות שלמות נתונים.
למה אסור לגבב סיסמאות בשרתי ענן
תשובה קצרה: אם מדביקים סיסמה או מפתח API במחולל hash בענן, המחרוזת עוברת ברשת ועלולה להירשם בטקסט גלוי בשרת של צד שלישי. Utiliome מחשב hash מקומית בזיכרון הדפדפן.
מפתחים צריכים לעיתים SHA-256 של סיסמת מסד, סוד חתימת Webhook או מטען JWT לבדיקות. באתרי כלים כלליים המחרוזת הסודיה נשלחת בבקשת POST לשרת שלהם.
זו פרצת אבטחה חמורה. אין דרך לדעת אם השרת רושם את הקלט יחד עם כתובת ה-IP.
Utiliome בנוי בארכיטקטורת אפס-אמון. מחולל ה-hash משתמש ב-API המובנה window.crypto. הטקסט שאתם מקלידים לא יוצא מארגז החול של המכשיר.
SHA-256 מול SHA-512: במה לבחור?
תשובה קצרה: SHA-256 הוא הסטנדרט לשלמות נתונים ולבלוקצ'יין (למשל Bitcoin). SHA-512 נותן מרחב ביטים גדול יותר וחזק יותר מתמטית, ולעיתים אף מחושב מהר יותר במעבדי 64 סיביות.
שני האלגוריתמים שייכים למשפחת SHA-2 שפרסמה ה-NSA, אבל הם נבדלים בארכיטקטורת הביטים ובאורך הפלט.
- SHA-256: פלט הקסדצימלי של 64 תווים. נתמך בכל שפות התכנות ובמכשירי IoT. נשאר עמיד מול התקפות כוח גס והתנגשויות ידועות.
- SHA-512: פלט הקסדצימלי של 128 תווים. הוא עובד על מילים של 64 סיביות (לעומת 32 ב-SHA-256), ולכן רץ מהר יותר במעבדי דסקטופ ושרת מודרניים של 64 סיביות.
למה SHA-1 לא בטוח לסיסמאות?
תשובה קצרה: SHA-1 הוא אלגוריתם מיושן שנשבר מתמטית ב-2017 על ידי חוקרי Google בהתקפת התנגשות. אסור להשתמש בו לאחסון סיסמאות או לתעודות דיגיטליות, אבל הוא עדיין שימושי למשימות לא-אבטחתיות כמו קומיטים ב-Git.
"התנגשות hash" מתרחשת כששני קלטים שונים לגמרי מניבים את אותו פלט. פונקציית hash חזקה חייבת להפוך התנגשויות לבלתי מעשיות.
ב-2017 חוקרים יצרו את התנגשות ה-SHA-1 הראשונה (התקפת SHAttered). עם כוח החישוב של היום זיוף חתימות SHA-1 זול כלכלית.
Utiliome כולל SHA-1 רק לאימות מיושן ולהתאמת checksum (הורדות קבצים או hash של מאגר Git). לפיתוח אבטחתי חדש עברו ל-SHA-256 או SHA-512.
האצת חומרה ב-Web Crypto API
תשובה קצרה: במקום ספריות מתמטיקה איטיות ב-JavaScript, Utiliome משתמש ב-Web Crypto API (crypto.subtle) שמתחבר ישירות לחומרה של המכשיר, ומחשב באלפיות שנייה בלי להקפיא את הדפדפן.
מחוללי hash מוקדמים באינטרנט נשענו על polyfill מורכב (כמו CryptoJS). JavaScript הוא חד-תהליכי, וגיבוב מטען גדול ב-polyfill הקפיא את הממשק.
עם crypto.subtle.digest() Utiliome מעביר את המתמטיקה הכבדה לספריות הקריפטו המובנות של מערכת ההפעלה (ולעיתים ישירות למעבד). כך SHA-512 מחושב מיד תוך כדי הקלדה.
מהו Salt ולמה הוא נחוץ?
תשובה קצרה: גיבוב המילה 'password' מניב את אותו SHA-256 בכל העולם, ולכן פגיע להתקפות מילון מסוג Rainbow Table. Salt הוא מחרוזת אקראית שמוסיפים לסיסמה לפני הגיבוב, כדי שהפלט יהיה ייחודי.
הכלי מצוין ליצירת hash מיידי, אבל בבסיס אימות של משתמשים אסור לאחסן SHA-256 גולמי.
מכיוון שפונקציות hash דטרמיניסטיות, תוקפים מחשבים מראש בסיסים ענקיים של hash למיליארדי סיסמאות נפוצות (Rainbow Tables). כדי לסכל זאת מוסיפים מחרוזת אקראית (Salt) לפני הגיבוב. לאחסון סיסמאות אמיתי מומלץ אלגוריתמים אדפטיביים כמו Argon2 או Bcrypt.