מה זה הצפנה סימטרית ואסימטרית, ולמה כמעט כל דבר מוצפן באינטרנט משתמש בשתיהן ביחד¶
מישהו שואל "האם זה מוצפן" ומקבל תשובה של כן או לא, אבל השאלה המעניינת באמת היא איך. יש שתי משפחות שלמות של הצפנה, הן פותרות בעיות שונות לגמרי, ורוב מערכות ההצפנה שאתם משתמשים בהן כל יום, כמו HTTPS ו-SSH, בכלל לא בוחרות באחת מהן. הן משתמשות בשתיהן, כל אחת בתפקיד שהיא הכי טובה בו.
הצפנה סימטרית - מפתח אחד לשני הצדדים¶
בהצפנה סימטרית יש מפתח יחיד, וכל מי שמחזיק בו יכול גם להצפין וגם לפענח. תחשבו על זה כמו על מנעול רגיל בבית - אותו מפתח פותח וגם סוגר. אם אתם ואני מסכימים מראש על מפתח סודי, אני יכול להצפין הודעה איתו, לשלוח לכם, ואתם מפענחים עם אותו מפתח בדיוק.
היתרון הגדול של הצפנה סימטרית הוא מהירות. אלגוריתמים כמו AES, שהם התקן המוביל כיום, מצפינים ומפענחים כמויות ענקיות של מידע במהירות גבוהה מאוד, כמעט בלי לפגוע בביצועים. זו הסיבה שכל הצפנת מידע בפועל, כלומר ההודעה עצמה שאתם שולחים, נעשית כמעט תמיד עם הצפנה סימטרית.
הבעיה שלה היא אחרת לגמרי - איך שני הצדדים בכלל מגיעים לאותו מפתח סודי מלכתחילה, בלי ששולחים אותו ברשת בטקסט גלוי שכל מי שמאזין יכול לקרוא. אם הייתם צריכים לשלוח את המפתח עצמו דרך אותה רשת פתוחה, כל היתרון של ההצפנה מתאפס.
הצפנה אסימטרית - שני מפתחות, תפקידים שונים¶
הצפנה אסימטרית פותרת בדיוק את הבעיה הזאת, בעזרת רעיון שונה לגמרי - זוג מפתחות קשורים מתמטית, אחד ציבורי שאפשר לחלוק עם כולם, ואחד פרטי ששומרים אצלכם בלבד. מה שמוצפן עם המפתח הציבורי אפשר לפענח רק עם המפתח הפרטי המתאים, ולהפך.
תחשבו על תיבת דואר עם חריץ - כל אחד יכול להכניס מכתב דרך החריץ (המפתח הציבורי פתוח לכולם), אבל רק מי שמחזיק במפתח של התיבה (המפתח הפרטי) יכול לפתוח אותה ולקרוא מה בפנים. אין צורך לתאם שום דבר מראש, ואין צורך להעביר סוד ברשת בכלל.
היתרון הזה עולה משהו - הצפנה אסימטרית איטית בהרבה מסימטרית, ולא מעשית להצפנת כמויות גדולות של מידע. היא מבוססת על בעיות מתמטיות קשות לפתרון, כמו פירוק מספרים גדולים לגורמים ראשוניים, וזה בדיוק מה שגורם לה לדרוש הרבה יותר משאבי חישוב.
איך זה עובד ביחד בפועל, ב-HTTPS¶
כשאתם נכנסים לאתר עם HTTPS, קורה בדיוק החיבור הזה בין שני העולמות. בשלב הראשון, הדפדפן והשרת משתמשים בהצפנה אסימטרית כדי להסכים בבטחה על מפתח סימטרי משותף, בלי ששום דבר רגיש עובר בגלוי ברשת. ברגע שיש להם מפתח סימטרי משותף, כל שאר השיחה, כלומר כל הדפים והתמונות והמידע שאתם שולחים ומקבלים, מוצפנים איתו, כי זה מהיר בהרבה.
זו בדיוק אותה תבנית ב-SSH כשאתם מתחברים לשרת מרוחק - שימוש בהצפנה אסימטרית כדי לזהות אתכם ולהסכים על מפתח, ואז מעבר להצפנה סימטרית מהירה לכל שאר החיבור.
למה זה משנה שתבינו את זה, לא רק שתדעו את המילים¶
ההבדל הזה הוא לא טריוויה אקדמית. הוא הבסיס להבנת כמעט כל מנגנון אבטחה שתפגשו - חתימות דיגיטליות, תעודות אתרים, ארנקי קריפטו, אימות דו-שלבי מבוסס מפתחות. כשמבינים שהצפנה אסימטרית פותרת בעיית זיהוי והסכמה, וסימטרית פותרת בעיית מהירות, כל אחד מהמנגנונים האלה הופך הרבה יותר מובן, כי רואים בדיוק איזו בעיה כל חלק פותר.
איך לומדים את זה נכון¶
הדרך הכי טובה להבין הצפנה היא לא רק לקרוא עליה, אלא לראות אותה בפעולה - לפתוח כלי כמו Wireshark ולראות את שלבי ההסכמה על מפתח ב-TLS handshake בעיניים, ולנסות בעצמכם ליצור זוג מפתחות ולהצפין איתם הודעה. זה בדיוק סוג התרגול שהופך את הרעיון מהגדרה יבשה להבנה שנשארת.
קורס הרשתות המלא נמצא כאן, חינם ובעברית, כולל הסבר מעמיק על הצפנה ותרגול מעשי עם תעבורה אמיתית.
יש לכם שאלה על הצפנה או על איך TLS בונה חיבור בטוח? שאלו בדיסקורד.
לסיכום¶
הצפנה סימטרית מהירה אבל דורשת מפתח משותף מראש, הצפנה אסימטרית פותרת את בעיית שיתוף המפתח אבל איטית מדי לכמויות מידע גדולות. כמעט כל מערכת אבטחה רצינית שתפגשו לא בוחרת ביניהן, היא משלבת את שתיהן, כל אחת בתפקיד שהיא הכי טובה בו.