הצפנה, גיבוב וקידוד: מה באמת שומר על סיסמאות?
שלוש פעולות יכולות להפוך מילה מוכרת לרצף שלא מבינים במבט ראשון. רק אחת נועדה לפענוח עם מפתח, אחת להשוואה, ואחת להעברת מידע בין מערכות. ההבדל ביניהן הוא הבסיס להבנת סיסמאות ואבטחת מידע.
שלושה פלטים, שלוש מטרות שונות
רצף לא קריא אינו הוכחה לאבטחה. כדי לזהות מה קרה למידע, לא בוחנים רק איך הפלט נראה. בודקים מה הייתה המטרה, האם קיים מפתח והאם מצפים לחזור לטקסט המקורי.
7F A2 19 C8 4D...
אולי מידע מוצפן — צריך לדעת כיצד נוצר ואם יש מפתח.
2cf24dba5fb0a30e...
תחילתה של טביעת Hash לדוגמה עבור קלט.
aGVsbG8=
המילה hello בקידוד Base64 — ללא סוד וללא מפתח.
מתחילים מהמטרה, לא מהצורה
ההבדל במשפט אחד — ואז עוד שכבה
שלושת המנגנונים משנים ייצוג של מידע, אבל הם אינם תחליפים. בחירה נכונה מתחילה בשאלה מה המערכת צריכה לעשות אחר כך.
הצפנה
- המטרה
- להסתיר תוכן ממי שאין לו מפתח מתאים.
- הדרך חזרה
- המידע אמור לחזור למקור באמצעות מפתח ופענוח.
- שימוש טיפוסי
- הודעה שנשלחת בערוץ מאובטח או קובץ סודי.
גיבוב
- המטרה
- ליצור טביעת אצבע קבועת־מבנה שאפשר להשוות.
- הדרך חזרה
- הפעולה מתוכננת להיות חד־כיוונית, בלי פענוח למקור.
- שימוש טיפוסי
- בדיקת סיסמה או זיהוי שינוי בקובץ.
קידוד
- המטרה
- לייצג מידע בצורה שמערכת אחרת יכולה להעביר או לקרוא.
- הדרך חזרה
- כל מי שמכיר את שיטת הקידוד יכול להחזיר את המקור.
- שימוש טיפוסי
- ייצוג טקסט כ-Base64 לצורך העברה, לא לצורך סודיות.
כך בודקים סיסמה בלי לשמור אותה לקריאה
מערכת אחראית לא אמורה להזדקק לטקסט המקורי כדי לדעת אם ההקלדה נכונה. היא שומרת מידע שמאפשר לבצע את אותה פעולת גיבוב ולהשוות תוצאות.
לא משתמשים בפונקציית Hash מהירה וכללית לבדה. אחסון סיסמאות דורש מנגנון ייעודי, איטי ומכוון למשימה, יחד עם Salt והגדרות מתאימות.
שלב 1
הקלדת סיסמה
הסיסמה נכנסת לבדיקה ברגע ההתחברות; מערכת תקינה אינה צריכה לשמור או להציג למפעיל עותק קריא שלה.
שלב 2
צירוף Salt
ערך אקראי וייחודי מצורף לפני הגיבוב. הוא לא חייב להיות סודי, והמטרה שלו היא להבדיל בין פלטים של סיסמאות זהות.
שלב 3
חישוב פלט חדש
המערכת מפעילה אלגוריתם ייעודי לסיסמאות ומפיקה תוצאה שאפשר להשוות לתוצאה השמורה.
שלב 4
השוואה
אם הפלט החדש זהה לפלט השמור, הסיסמה תואמת. אין צורך לפענח את הסיסמה הישנה כדי לקבל החלטה.
למה שתי סיסמאות זהות לא צריכות להיראות זהות
בלי Salt, אותו קלט באותה שיטה יפיק אותו פלט. מאגר דולף עלול לחשוף מיד אילו משתמשים בחרו אותה סיסמה, וגם לאפשר שימוש בחישובים שהוכנו מראש.
Salt ייחודי משנה את הקלט לפני החישוב. לכן גם אם דנה ויואב בחרו במקרה אותה סיסמה, התוצאות השמורות שלהן אמורות להיות שונות. ה-Salt אינו הופך סיסמה חלשה לחזקה; הוא פותר בעיה אחרת באחסון.
מיתוס מול בדיקה
ארבעה משפטים שכדאי לעצור בהם
״אם הטקסט לא קריא, הוא מוצפן״
הבדיקה: שואלים אם יש מפתח סודי. Base64 נראה משונה, אך הוא קידוד מוכר שאפשר להפוך בלי סוד.
״Hash חזק אומר שסיסמה חלשה בטוחה״
הבדיקה: תוקף יכול לנחש מילים נפוצות, לחשב להן פלט ולהשוות. הגנה טובה מתחילה בסיסמה ארוכה וייחודית וממשיכה באחסון נכון.
״Salt הוא כמו מפתח הצפנה״
הבדיקה: מפתח חייב להישמר בסוד כדי לפענח. Salt יכול להישמר לצד הפלט ותפקידו לגרום לסיסמאות זהות להיראות שונות.
״שכחתי סיסמה? האתר פשוט שולח לי אותה״
הבדיקה: שירות שמתכנן אחסון נכון אמור לאפס סיסמה באמצעות תהליך אימות, לא לשלוף ולשלוח את הסיסמה המקורית.
תרגול בטוח: ממיינים לפי צורך
לא צריך מאגר סיסמאות ולא מנסים לפרוץ שירות. לוקחים שלושה תרחישים דמיוניים ומכריעים איזו פעולה מתאימה לכל אחד. לכל תשובה מוסיפים שתי שאלות: האם צריך לחזור למקור, והאם נדרש סוד.
אפשר לבדוק קידוד או Hash רק עם טקסט שהמצאתם לצורך התרגיל. לא מזינים סיסמה אמיתית, מידע אישי או סוד משפחתי לכלי מקוון.
- יומן פרטי שצריך לקרוא שוב
- הצפנה: צריך לשמור סוד וגם לשחזר את התוכן בעזרת מפתח.
- בדיקה אם שתי סיסמאות תואמות
- גיבוב ייעודי לסיסמאות: צריך להשוות בלי לשמור עותק קריא של הסיסמה.
- העברת נתונים בפורמט טקסטואלי
- קידוד: צריך תאימות בין מערכות, לא להסתיר מידע.
כרטיס החלטה לפרויקט הבא
כתבו את מטרת ההגנה לפני שבוחרים מנגנון
השלימו משפט אחד: ״המערכת צריכה לשמור את המידע כדי ש___״. אם צריך לקרוא אותו שוב — בודקים הצפנה וניהול מפתחות. אם צריך רק להשוות — בודקים גיבוב מתאים. אם צריך לשנות ייצוג — בודקים קידוד. ההרגל הזה מונע מהמילה ״מאובטח״ להחליף החלטה טכנית ברורה.
במסמכי הלימוד שסופקו לפרוגיקס מופיעים חוזק סיסמאות, יסודות הצפנה ותרגיל הצפנה פשוט ב-Python. התוכן והכלים בכל מסלול עשויים להשתנות; המושגים והתרגול במאמר עומדים בפני עצמם.
