קריפטוגרפיה
הצפנה, קידוד וגיבוב: מה כל אחד מהם עושה
הפרדה בין קידוד, הצפנה וגיבוב במעבדות עם Base64, SHA-256 ו-OpenSSL. למה Base64 אינו הגנה ולמה hash הוא חד־כיווני.
קריפטוגרפיה מאפס: הצפנה, מפתחות, hashes, חתימות, ולמה צופן קיסר מלמד רעיונות אבל לא מגן על כלום.
קריפטוגרפיה היא אוסף השיטות המתמטיות שמגינות על מידע. השיטות האלה שומרות על נתונים פרטיים, מראות מתי נתונים שונו, מאשרות מי שלח הודעה ומאפשרות לשני צדדים לסמוך זה על זה ברשת שאינם שולטים בה. משתמשים בה בכל פעם שדפדפן פותח אתר HTTPS, כשעדכון תוכנה נחתם, או כשאתר בודק את הסיסמה שלך בלי לשמור אותה כטקסט גלוי.
הצפנה היא כלי אחד בתוך הקריפטוגרפיה, והתחום רחב ממנה.
הצפנה לוקחת טקסט גלוי ומפתח, מעבירה אותם דרך אלגוריתם ומפיקה טקסט מוצפן. מי שמחזיק במפתח הנכון יכול להפוך את התהליך. מי שלא מחזיק בו לא אמור להפיק מהטקסט המוצפן שום דבר שימושי.
מנעול הוא השוואה טובה. המנגנון הוא האלגוריתם, והמפתח הוא החפץ היחיד שפותח אותו. ההשוואה מתפרקת מהר, כי מפתח בתוכנה הוא מספר ולא פיסת מתכת. ובכל זאת היא מפרידה בין שני דברים שאנשים מבלבלים לעיתים קרובות: השיטה, שיכולה להיות ציבורית, והערך הסודי, שחייב להישאר פרטי.
העיקרון של קרקהופס, שנוסח במאה התשע־עשרה, אומר שמערכת צריכה להישאר מאובטחת גם כשכל מה שקשור אליה ידוע, מלבד המפתח. תכנונים קריפטוגרפיים מודרניים פועלים לפי הכלל הזה. אם תכנון עובד רק כל עוד האלגוריתם נסתר, יש סיבה לחשוד בו.
בהצפנה סימטרית מפתח סודי אחד גם מצפין וגם מפענח. AES הוא צופן הבלוקים הסימטרי הסטנדרטי, ש-NIST הגדיר ב-FIPS 197. הצפנה סימטרית מהירה, ולכן היא מטפלת ברוב נפח הנתונים במערכת. החלק הקשה הוא לדאוג ששני הצדדים יחזיקו באותו מפתח בלי שתוקף יראה אותו.
הבחירה ב-AES היא רק ההחלטה הראשונה. מצב הפעולה, הטיפול ב-nonces והשאלה אם הטקסט המוצפן מאומת קובעים כולם אם התכנון בטוח. "אנחנו משתמשים ב-AES" זו נקודת התחלה, והיא עדיין לא הסבר.
בקריפטוגרפיה א־סימטרית לכל צד יש זוג מפתחות: מפתח ציבורי שכל אחד רשאי לראות ומפתח פרטי שנשאר אצל בעליו. שיטות א־סימטריות מאפשרות לשני צדדים להסכים על סוד משותף בערוץ פתוח, ומאפשרות לחותם להוכיח שהמפתח הפרטי נמצא אצלו. TLS 1.3 משתמש בפעולות א־סימטריות בלחיצת היד שלו כדי להסכים על מפתחות ולבדוק את זהות השרת, ואז עובר להצפנה סימטרית עבור הנתונים. RFC 8446 מתאר את התכנון הזה.
פונקציית hash קריפטוגרפית מקבלת קלט בכל אורך ומחזירה digest באורך קבוע. SHA-256, שמוגדר ב-FIPS 180-4, מחזיר תמיד 256 ביט. hash טוב הופך את מציאת שני קלטים עם אותו digest לבלתי אפשרית מעשית, וכך גם את שחזור הקלט מה-digest. אין מפתח ואין שלב פענוח.
hashes שימושיים לבדיקות שלמות. אם ה-digest של קובץ שהורד תואם לערך שהספק פרסם, סביר מאוד שזה הקובץ שהספק פרסם. hashes מופיעים גם בתוך חתימות ובפרוטוקולים רבים אחרים.
סיסמאות צריכות יותר מ-hash רגיל. פונקציה מהירה כמו SHA-256 מאפשרת לתוקף לבדוק מספר עצום של ניחושים בשנייה על חומרה מתאימה. OWASP Password Storage Cheat Sheet ממליץ על פונקציה איטית בכוונה ודורשת זיכרון כמו Argon2id, עם salt ייחודי לכל סיסמה ופרמטרים שמותאמים לחומרה שלך. RFC 9106 מגדיר את Argon2.
Base64 הופך נתונים בינאריים לתווי טקסט כדי שיוכלו לעבור דרך מערכות שמצפות לטקסט. ההמרה לא דורשת סוד, ולכן כל אחד יכול להפוך אותה. קידוד קיים כדי שנתונים יהיו ניידים, ולא כדי להסתיר אותם. שלושת הרעיונות פותרים בעיות שונות:
צופן קיסר מזיז כל אות באותו מספר מקומות. בהזזה של שלושה, A הופכת ל-D, H הופכת ל-K וכן הלאה. זה צופן החלפה, והוא כבר מכיל את אוצר המילים הבסיסי: טקסט גלוי, מפתח, טקסט מוצפן ואלגוריתם.
על נתונים אמיתיים הוא נכשל מסיבה פשוטה. באלפבית יש 26 אותיות, ולכן רק 25 הזזות משנות את הטקסט. מחשב מנסה את כולן מיד, ואדם יכול לבדוק אותן על נייר. שכיחות האותיות בהודעה ארוכה חושפת את ההזזה עוד יותר מהר. לכן הצופן הוא תרגיל לכיתה ולא הגנה.
הפקודות בהמשך הורצו ב-Git Bash על Windows 11, עם tr, sha256sum וגם base64 שלו. כדאי להריץ אותן בעצמך על המחשב שלך. אין להדביק סיסמאות אמיתיות או טקסט סודי באף אתר כדי לבדוק אותן.
printf 'HELLO' | tr 'A-Z' 'D-ZA-C'פלט:
KHOORהיפוך ההזזה:
printf 'KHOOR' | tr 'D-ZA-C' 'A-Z'פלט:
HELLOprintf 'HELLO' | sha256sum | cut -d' ' -f1
printf 'HELLP' | sha256sum | cut -d' ' -f1פלט:
3733cd977ff8eb18b987357e22ced99f46097f31ecb239e878ae63760e83e4d5
d37f1f826f924dcd23aacbdc875edd4808b9e118d35adb9dce1c80cb23c4a9c1שינוי של אות אחת משנה את כל ה-digest. שום דבר בפלט לא מאפשר לשחזר את HELLO. כדי לבדוק ניחוש, מחשבים hash של הניחוש ומשווים את התוצאה.
printf 'HELLO' | base64פלט:
SEVMTE8=כל מי שרואה את SEVMTE8= יכול לפענח אותו. זה פורמט ולא סוד.
מתחילים מהיעדים הבסיסיים של אבטחה, סודיות, שלמות וזמינות, במאמר על יסודות אבטחת הסייבר. אחר כך קוראים את המאמר על צופן קיסר, שנכנס לעומק ההחלפה וניתוח השכיחויות. לאחר מכן לומדים hashing, מפתחות סימטריים ו-TLS, מתוך המקורות הראשוניים שמצורפים למאמר הזה ולא מתוך סיכומים.
מתאמנים על המחשב שלך, עם נתונים סינתטיים, או במעבדה בבעלותך או כזאת שיש לך הרשאה בכתב לבדוק.
קריפטוגרפיה
הפרדה בין קידוד, הצפנה וגיבוב במעבדות עם Base64, SHA-256 ו-OpenSSL. למה Base64 אינו הגנה ולמה hash הוא חד־כיווני.
קריפטוגרפיה
למה hashes מהירים נכשלים בסיסמאות, מה salt ו-work factor עושים, ואיך מחשבים ומאמתים Argon2id ב-Python עם argon2-cffi.
קריפטוגרפיה
מפתחות ציבוריים ופרטיים מאפס: מה חתימה מוכיחה, למה המפתח הפרטי נשאר סודי, ומעבדת Ed25519 שבה קובץ ששונה נכשל באימות.