הצפנה היא תהליך שבו טקסט פשוט/טקסט בלתי מצופן("plaintext") הופך לטקסט
מוצפן/מקודד("cyphertext" ללא איבוד מידע. כלומר, בהנתן ידע מתאים(האלגוריתם
והססמה) ניתן לשחזר את התהליך ולקבל מהטקסט המקודד את הטקסט הפשוט.
האשינג הוא תהליך שבו מטקסט פשוט מקבלים ערך המכונה "מחרוזת האש"(Hash
String) עם איבוד מידע אחושילינג.
לא ניתן לקבל את הטקסט המקורי חזרה ממחרוזת
ההאש, גם אם ידוע אלגוריתם ההאשינג!
לעתים משתמשים בהאשינג לאימות מידע, לדוגמה, נותנים קובץ להורדה בצירוף מחרוזת
ההאש שלו לפי אלגוריתם מסויים. לאחר ההורדה מבצעים את ההאשינג על הקובץ
שהורדנו ובודקים האם מחרוזת ההאש שלנו זהה למחרוזת ההאש שהיינו אמורים לקבל.
כך ניתן לדעת האם לא היו טעויות במידע.
אלגוריתם האשינג יכול להיות פשוט כמו ספירת כמות האותיות בטקסט, או צירוף ערכי
האסקי שלהן, אבל אלגוריתם האשינג טוב הוא כזה שבו הסיכוי לקבל ערכים זהים עבור
קלטים שונים יהיה נמוך.
ניתן להשתמש בהאשינג גם למטרות אחרות. שתי דוגמות מהירות:
- במקום לשמור ססמה של לקוח במערכת, ניתן לשמור את מחרוזת ההאש התואמת
לה במסד הנתונים, ובזמן לוג-אין, לאמת את מחרוזת ההאש השמורה אל מול
מחרוזת ההאש של הססמה שאיתה מנסים להכנס למערכת.
היתרון הוא שכך לאיש אין גישה לססמה - גם למי שיש לו גישה מלאה למסד הנתונים.
vB, מערכת הפורומים של פרש, משתמשת בטכניקה כזו, למיטב ידיעתי. - ניתן להשתמש בהאשינג גם למטרות חיפוש מהיר באמצעות מנגנון המכנונה טבלות
האש(Hash Tables). לצערי, ההודעה הזו כבר התארכה יותר מדי, ואין לי כח להאריך,
אבל אל תשכח ש-google is your friend.
מהדוגמה הראשונה מבין השתיים ניתן לראות שיש תועלת בקטגוריה מיוחדת של פונקציות
האש, שבהן אי-אפשר לקבל ערך מקורי ממחרוזת ההאש, אלו הן פונקציות האש חד-כיווניות.
(שים לב שאיני מדבר על קבלת
הערך המקורי, כי כדי לפרוץ למערכת כזו מספיק לדעת
כל
ערך מקורי שהוא, שכן ברור שכאשר ממפים תחום גדול לטווח קטן, יהיו ערכים רבים בתחום
שממופים לערך יחיד בטווח. זה גם העניין שמתייחסים אליו כשמדברים על "פריצה" של
אלגוריתמי האש.)
ועכשיו, פשושון, תפסיק להביך את עצמך, רק מהעץ המגוחך שאליו טיפסת, פתח גוגל
ותתחיל לקרוא. אם תרצה, ואם לאו, האשינג והצפנה הם שני דברים שונים.