סודיות מושלמת קדימה

בקריפטוגרפיה, סודיות מושלמת קָדימה (באנגלית: Perfect forward secrecy, ובקיצור PFS), וכן סודיות מושלמת לפנים, מתייחס למאפיין חשוב של פרוטוקול שיתוף מפתח שבו חשיפה של מפתחות סודיים ארוכי טווח שבהם נעשה שימוש לצורך שיתוף מפתחות השיחה, אין בה כדי לסכן את סודיות מפתחות השיחה שנוצרו בעבר על ידי הפרוטוקול. אמנם חשיפה של מפתח פרטי מאפשרת למתקיף להתחזות לקורבן בכל התקשרות עתידית, אך רצוי שחשיפה זו לא תאפשר לו לגלות מפתחות שיחה שנוצרו בעבר ונמחקו מהזיכרון בגמר השימוש בהם.

היסטוריה

המושג סודיות מושלמת קדימה הועלה לראשונה בשת 1990 במאמר חלוצי של כריסטוף גונתר "פרוטוקול שיתוף מפתח מבוסס זהות", בהמשך הנושא הורחב בספר לקריפטוגרפיה יישומית של מנזס וואן אורשוט. כמו כן המקבילה של סודיות מושלמת קדימה לפרוטוקול מבוסס סיסמה הוגדרה ב-1996 על ידי ג'בולין. בספח D.5.1 של תקן IEEE להצפנת מפתח ציבורי 1363-2000 נכלל דיון במאפיינים של סודיות מושלמת קדימה חד-כיוונית ודו-כיוונית שנקראת בקיצור 2WIPFS.

יישום

הדרך המקובלת ביותר להשיג סודיות מושלמת קדימה היא על ידי פרוטוקול דיפי-הלמן שבו קיימים שני סטים של מפתחות סודיים, הראשונים מפתחות סודיים ארוכי טווח (כמו מפתחות חתימה דיגיטלית) שמשמשים את המשתתפים בפרוטוקול רק כדי להבטיח את זהותם ואימות חילופי המסרים ביניהם והאחרים הם מעריכים ארעיים (באנגלית Ephemeral exponents) שאיתם מכינים את מפתח השיחה המשותף והם חד-פעמיים. ברגע שמפתח השיחה נוצר ושותף בין הצדדים משמידים את המעריכים. אם לא חוזרים להשתמש בהם בשום צורה ואם הם נמחקו כליל אין דרך למתקיף לשחזר אותם מלבד באמצעות קריפטואנליזה של פרוטוקול דיפי-הלמן (כגון פתרון בעיית דיפי-הלמן). במילים אחרות, יש הפרדה בין המפתחות הסודיים ארוכי הטווח של המשתמשים לבין המפתחות שאיתם מיצרים מפתח שיחה משותף. ליתר ביטחון רצוי למחוק את כל הערכים הנלווים שהיו בזיכרון בעת הרצת הפרוטוקול כמו המצב הפנימי של המחולל הפסאודו אקראי שבו הם השתמשו כדי לייצר את המספרים הללו או זיכרון מטמון. 
בהשוואה לפרוטוקולים אחרים לשיתוף והעברת מפתחות, למשל פרוטוקול PGP שמסתיר את העברת המפתח על ידי הצפנה שלו עם המפתח הציבורי של הצדדים המתקשרים. אם המתקיף מצליח לנחש מפתח פרטי 
של אחד הצדדים הדבר מהווה שבירה מוחלטת של הפרוטוקול, כי עם מידע זה המתקיף יכול לשחזר את כל המפתחות שהועברו גם כאלו שנמחקו מהזיכרון. זהו נטל ביטחוני כבד שהופך את המפתחות הפרטיים ליעד אטרקטיבי להתקפה מצד האקרים. 
המאפיין של סודיות מושלמת הכרחי בסיטואציות בהם סודיות המפתח נחוצה מעבר לתוחלת החיים שלו, כמו מפתח שיחה שאיתו הוצפן מידע חסוי. כל עוד סודיות המידע המוצפן רלוונטית, יש להגן על סודיות המפתח אפילו זמן רב לאחר שהסתיים השימוש בו. מאידך אם נעשה במפתח שימוש רק לצורך אימות, סודיותו אינה נחוצה יותר לאחר שהמשימה הושלמה ואין צורך בסודיות מושלמת קדימה. ברוב המקרים, גילוי של מפתח אימות שפג תוקפו אינו אמור להשפיע על סודיות המידע שעבר ברשת ואין בו כל שימוש למתקיף.
אפשר להשתמש בכל מערכת מפתח ציבורי כדי לבנות פרוטוקול שיתוף מפתח עם סודיות מושלמת קדימה. כל מה שנחוץ הוא שהמפתחות הפרטיים והציבוריים שאיתם השתמשו הצדדים יהיו חד-פעמיים עבור כל שיחה. מהיבט מעשי יש צורך שתהליך הכנת המפתחות יהיה מהיר, עובדה שמצמצמת את האפשרויות, למשל RSA אינו מתאים כי הוא דורש יצירה של שני מספרים ראשוניים ארוכים מאוד ופעולות העלאה בחזקה מודולרית. שהם פעולות מכבידות במונחי מחשוב במיוחד במערכות משובצות או מערכות מחשוב זעירות עם משאבים דלים.

סודיות קדימה חלשה

סודיות מושלמת קדימה חלשה בקיצור wPFS היא הגדרה חלשה יותר של מאפיין סודיות מושלמת קדימה. חשיפה של המפתחות הסודיים ארוכי הטווח של המשתמשים אינה מסכנת את סודיות מפתחות שיחה ארעיים שנוצרו בעבר על ידי הפרוטוקול, אבל רק שיחות כאלו שבהן המתקיף לא התערב או לא היה נוכח. הגדרה זו נוספה על ידי הוגו קרוציק ב-2005 והיא נועדה להדגיש שהשגת סודיות מושלמת קדימה מלאה חייבת להביא בחשבון נוכחות מתקיף פעיל, שמנסה להתערב או לרמות את הצדדים על ידי התקפת אדם באמצע.

ביטחון

פרוטוקול שיתוף מפתח עם סודיות מושלמת קדימה אינו מגן על הצופן שבשימוש אלא רק על מהלכי הפרוטוקול. במילים אחרות גם אם הפרוטוקול מכיל סודיות מושלמת קדימה, אין זה אומר שלא ניתן לשבור את הצופן איתו הצדדים משתמשים כחלק מהפרוטוקול. יתרה מזו, מתקיף עם אורך רוח ומשאבים מרובים, יכול להקליט את כל השיחות שנעשו בעבר ולהמתין בסבלנות עד שתמצא דרך לפרוץ את הצופן שבבסיס הפרוטוקול, או עד שמחשב קוונטי בקנה מידה גדול יהיה מעשי ואז יהיה אפשרי לפתור את בעיית דיפי-הלמן או בעיות אחרות מתחום ההצפנה האסימטרית (ראו הצפנה פוסט קוונטית).