איך אפשר לתאם מפתח הצפנה סודי בלי שאף אחד יגלה אותו? הכתבה הזאת חושפת את הקסם מאחורי פרוטוקול דיפי-הלמן, המאפשר לשני אנשים לתאם מפתח סודי מבלי להיפגש! בואו לגלות איך זה עובד ולמה זה כל כך גאוני.
דמיינו שאתם שולחים אימייל לחבר, אבל פתאום מישהו זר מצליח לקרוא אותו… או אפילו גרוע יותר – אתם רוכשים משהו באינטרנט באמצעות כרטיס אשראי, ופרטי הכרטיס שלכם נחשפים לעיני כל. במצבים כאלה חשוב שתהיה לנו דרך להגן על המידע שלנו, כדי שרק האנשים שבחרנו יוכלו לגשת אליו. בדיוק לשם כך נוצרו צפנים.
צופן הוא מנגנון שמשנה את המידע והופך אותו למשהו שאי אפשר להבין בלי סוד שנקרא מפתח. רק מי שמחזיק את המפתח יכול להיחשף למידע המוגן. צופן קיסר, שהומצא על ידי יוליוס קיסר, הוא דוגמה פשוטה לצופן שבו כל אות מוחלפת באות אחרת הנמצאת במרחק קבוע ממנה לפי סדר הא'-ב'. המרחק הזה הוא בעצם המפתח הסודי. לדוגמה, אם המפתח הוא 3, האות א' תוחלף באות ד', ב' תוחלף ב-ה', ג' תוחלף ב-ו', והמילה "קיסר" תהפוך להיות "תמצא".
היום צפנים משמשים אותנו בכל מקום – בהודעות שאנחנו שולחים, בקניות באינטרנט, בכניסה לחשבון הבנק ועוד. הצפנים עוזרים לשמור על הפרטיות שלנו ועל המידע החשוב שלנו. כששני גורמים רוצים לתקשר בצורה בטוחה ומוצפנת, הם צריכים קודם כל לתאם ביניהם מפתח סודי. באמצעות המפתח הם יוכלו להצפין ולפענח את ההודעות שישלחו זה לזה. הבעיה היא, שאם המפתח ייפול לידיים הלא נכונות, כל מי שיגיע אליו יוכל לפענח את ההודעות ולקרוא אותן.
בעבר, כאשר הצפנה שימשה בעיקר צבאות, דיפלומטים ומרגלים, תיאום המפתח הסודי נעשה במפגש אישי או באמצעות שליח. אבל היום, כשכולם קונים באינטרנט, שולחים הודעות ומשלמים חשבונות דרך הרשת, השיטה הזו אינה מעשית. האם יש דרך לתאם מפתח או סיסמה סודית גם בלי להיפגש?
בואו נראה איך אריאל ועמית עושים זאת!
אריאל ועמית רוצים לתאם ביניהם צבע סודי. הם משתמשים בצבע בסיס שאינו סודי וכולם יכולים לדעת אותו (💙).
אריאל בוחרת צבע סודי משלה (💛), מערבבת אותו עם צבע הבסיס (💛 + 💙 = 💚), ושולחת את הצבע שנוצר (💚) לעמית.
כל מי שרואה את הצבע שאריאל שלחה לעמית, לא יכול להסיק ממנו את הצבע הסודי של אריאל, גם אם הוא יודע את צבע הבסיס (אפשר אולי להסיק שהוא צהוב, אבל איזה צהוב בדיוק? יש הרבה גוונים של צהוב…). הסיבה לכך היא שבהינתן צבע שנוצר מערבוב של שני צבעים, אי אפשר לגלות בצורה פשוטה מערבוב של אילו צבעים נוצר, אפילו אם יודעים את אחד הצבעים.
עמית בוחר צבע סודי משלו (❤️), מערבב אותו עם צבע הבסיס (❤️ + 💙 = 💜), ושולח את הצבע שנוצר (💜) לאריאל.
אריאל מערבבת את הצבע הסודי שלה עם הצבע שקיבלה מעמית (💛 + 💜 = 🤎), ושומרת את הצבע שנוצר (🤎) בסוד.
עמית מערבב את הצבע הסודי שלו עם הצבע שקיבל מאריאל (❤️ + 💚 = 🤎), ושומר את הצבע שנוצר (🤎) בסוד.
אריאל ועמית מחזיקים צבע משותף שנוצר מערבוב של שלושה צבעים: צבע הבסיס, הצבע הסודי של אריאל והצבע הסודי של עמית (💙 + 💛 + ❤️ = 🤎). שניהם מחזיקים באותו הצבע בדיוק! ורק הם יודעים אותו. כעת, הם יכולים להשתמש בצבע שנוצר (🤎) בתור מפתח סודי, שבאמצעותו הם יוכלו להצפין ולפענח את ההודעות שישלחו זה לזה!
עכשיו, אריאל שרוצה לשלוח קובץ לעמית, יכולה לנעול את הקובץ באמצעות סיסמה. במחשב, כל צבע מיוצג באמצעות מספר, ולכן בתור סיסמה, אריאל תשתמש במספר שמייצג את הצבע המשותף שלה ושל עמית (🤎). כעת, את הקובץ הנעול בסיסמה אריאל יכולה לשלוח אל עמית. היא יכולה להיות בטוחה שאף אחד אחר מלבד עמית לא יודע את הסיסמה, ולכן לא יכול לפתוח את הקובץ. מנגד, כשעמית יקבל את הקובץ מאריאל, הוא יוכל להקיש בתור סיסמה את המספר המייצג את הצבע המשותף שלו ושל אריאל (🤎) ובכך לפתוח את הקובץ.
הרעיון שהוצג מבוסס על פרוטוקול דיפי-הלמן - פרוטוקול שיתוף המפתח הראשון, שהוצע על ידי ויטפילד דיפי ומרטין הלמן ב-1976 כדי לפתור את בעיית הפצת המפתחות.
כאשר אנחנו קונים באינטרנט, כדי להגן על פרטי כרטיס האשראי שלנו, האתר משתמש בפרוטוקול Https, המבוסס על פרוטוקול דיפי הלמן. כך זה עובד:
- כאשר אנחנו מתחברים לאתר, הדפדפן שלנו והשרת של החנות משתפים פרמטרים ציבוריים - ממש כמו צבע הבסיס (💙).
- הדפדפן שלנו יוצר פרמטר סודי אקראי, ובאותו האופן השרת של החנות יוצר פרמטר סודי אקראי - ממש כמו הצבעים הסודיים של אריאל (💛) ושל עמית (❤️).
- הדפדפן מבצע חישוב על בסיס הפרמטר הסודי שלנו והפרמטר הציבורי ושולח את התוצאה לשרת - בדומה לערבוב הצבע הסודי של אריאל עם צבע הבסיס (💛 + 💙 = 💚).
- השרת מבצע חישוב על בסיס הפרמטר הסודי שלו והפרמטר הציבורי ושולח את התוצאה לדפדפן - בדומה לערבוב הצבע הסודי של עמית עם צבע הבסיס (❤️ + 💙 = 💜).
- הדפדפן והשרת מחשבים במקביל מפתח משותף. החישוב מבוסס על הפרמטר הציבורי, הפרמטר הסודי של הדפדפן והפרמטר הסודי של השרת - ממש כמו הצבע המשותף של אריאל ועמית (💙 + 💛 + ❤️ = 🤎).
- הדפדפן והשרת משתמשים במפתח המשותף כדי להצפין את כל התקשורת ביניהם, כולל פרטי כרטיס האשראי שלנו.
פרוטוקול דיפי-הלמן מתמודד עם בעיית הפצת המפתחות באמצעות שימוש בפונקציה חד-כיוונית. פונקציה חד-כיוונית היא פונקציה שקל לחשב את הפלט שלה לכל קלט נתון, אך קשה מאוד להפוך אותה, כלומר בהינתן פלט, קשה מאוד למצוא את הקלט שהפונקציה חושבה עליו.
כך גם במקרה של ערבוב צבעים: בהינתן שני צבעים, קל לחשב איזה צבע נוצר מערבוב של שניהם, אך בהינתן צבע שנוצר מערבוב של שני צבעים קשה מאוד להגיד מערבוב של אילו צבעים נוצר (אפילו אם יודעים את אחד הצבעים).
הקסם של פרוטוקול דיפי-הלמן טמון ביכולתו ליצור סוד משותף, ללא צורך בשיתוף מידע מראש, וזה ממצב אותו כבסיס איתן לתקשורת מאובטחת בעולם הדיגיטלי.
עריכה: שיר רוזנבלום-מן
מקורות
[1] סודות ההצפנה לילדים - ד"ר סתיו אלבר
[3] פרוטוקול שיתוף מפתח - מכון דוידסון
[4] שיטת ההצפנה RSA - מדע גדול בקטנה