בעיית הפצת מפתחות
פתרונות

קיימות שתי דרכים עיקריות לשיתוף מפתח.
צד שלישי נאמן (trusted third party). צד שלישי הנקרא בהקשר זה KDC - קיצור של key distribution center. הוא שרת ייעודי שתפקידו לייצר ולהפיץ מפתחות הצפנה סודיים עבור כל המשתמשים ברשת. תחילה המשתמשים משתפים מפתח הצפנה סודי עם שרת ה-KDC כל אחד מהם בנפרד והוא מצידו מנהל רשימה ארוכת טווח של מפתחות סודיים של כל המשתמשים הרשומים. לאחר מכן לפי דרישה, מפיק ושולח מפתח שיחה זמני וחד פעמי, כשהוא מוצפן תוך שימוש במפתחות ההצפנה המתאימים למשתמשים שמעוניינים להתקשר ביניהם ובגמר השימוש בו המפתח מושמד.
היתרונות בשיטה; כל משתמש נדרש לזכור רק מפתח סודי אחד ארוך טווח, אותו הוא משתף עם שרת המפתחות. הוספה או הסרה של משתמש מתבצעת מול שרת המפתחות בלבד. אין צורך ליצור קשר עם משתמשים אחרים.
חסרונות השיטה; במקרה ששרת המפתחות מותקף, כל המפתחות בסכנה. אם ההתקפה מצליחה כל המשתמשים חשופים לחלוטין. כאשר שרת המפתחות קורס מסיבה טכנית כלשהי התקשורת נעצרת לחלוטין.
דוגמה מעשית. פרוטוקול קרברוס הוא פרוטוקול העברת מפתח מעשי וחינמי שהומצא ב-MIT ונועד לשיתוף מפתחות הצפנה על ידי צד שלישי נאמן המשמש כשרת מפתחות. הפרוטוקול פופולרי מאוד והוא בשימוש נרחב במערכות ההפעלה חלונות ומקינטוש.
הצפנת מפתח ציבורי. ב-1976 פרסמו ויטפילד דיפי ומרטין הלמן מאמר מפורסם בשם "new directions in cryptography" בו הם הסבירו לראשונה אסטרטגיה שונה להפצת מפתחות שנקראה לאחר מכן בשם פרוטוקול דיפי-הלמן. השיטה מבוססת על פרדיגמה שנקראת "מפתח ציבורי" או "הצפנה א-סימטרית". כל משתמש מייצר שני מפתחות, האחד פרטי וסודי והשני ציבורי. ההצפנה מתבצעת עם המפתח הציבורי והפענוח עם המפתח הפרטי. לכל מפתח פרטי קיים מפתח ציבורי אחד ויחיד שמתאים לו. כך שאם מתבצעת ההצפנה במפתח הראשון, ניתן לפענח את התוצאה עם המפתח השני ולהפך. בדרך זו המשתמשים יכולים לפרסם ברבים את מפתחות ההצפנה הציבוריים שלהם, כך שיהיו נגישים לכל. כאשר אליס מעוניינת להתקשר עם בוב אף שמעולם לא פגשה בו, כל שעליה לעשות הוא להשיג את המפתח הציבורי של בוב מהרשימה הציבורית, להפיק מפתח שיחה חד פעמי ולהצפינו באמצעותו ולשולחו לבוב בערוץ הפתוח. רק בוב יכול לפענח את המסר, לחלץ ממנו את מפתח השיחה הסודי ואיתו להתקשר עם אליס בצורה בטוחה. קיימת הבחנה בין המפתחות הציבוריים הארעיים (ephemeral key) שנוצרים לצורך הפרוטוקול ומשמשים להכנת מפתח השיחה לבין המפתחות ארוכי-טווח שברשות המשתתפים שנועדו לאימות זהותם. בדרך כלל רצוי שהמשתתפים בפרוטוקול יאמתו את המפתחות הציבוריים ארוכי הטווח שלהם. ישנן שתי דרכים לכך, האחת אימות מוקדם באמצעות צד שלישי כמו רשות אישורים, זאת בטרם יחלו במהלכי הפרוטוקול. והשני שילוב חתימה דיגיטלית בכל מסרי הפרוטוקול.
יתרונות השיטה; המשתמשים אינם צריכים להפגש כלל ואין צורך בניהול והחזקה של מספר גדול של מפתחות. הצטרפות או הסרה של משתמש אינן דורשות מאמץ מיוחד, כל שיש לעשות הוא להוסיף או להסיר את המשתמש המתאים ברשימה הציבורית. כל שיחה מתבצעת עם מפתח טרי וחד פעמי אותו משמידים בגמר השיחה.
חסרונות השיטה; עדיין נדרש תהליך אימות כדי לוודא שמפתח ציבורי שייך למי שמתיימר להיות בעליו. כל ניסיון מוצלח להונות משתמשים אחרים באמצעות מפתחות מזויפים יכול להביא לפריצת הרשת לחלוטין.
דוגמה מעשית. RSA היא שיטת הצפנה א-סימטרית מעשית שנמצאת בשימוש נרחב בכל מערכת הצפנה מודרנית והיא מנוצלת בעיקר להעברת מפתחות הצפנה.
בשתי הדרכים האמורות קיימת בעיית אימות והבטחת שלמות (message authentication). גם אם המשתמשים מוצאים דרך בטוחה להעביר ביניהם מפתח סודי לצורך הצפנת תעבורת הרשת, אין הם יכולים להיות בטוחים שהמידע העובר ברשת אותנטי, כלומר שהוא מגיע מהמקור הנטען וכי לא בוצע בו שינוי במהלך ההעברה אם בגלל שגיאה טכנית או בשל מהלך זדוני (malicious) על מנת לפרוץ את המערכת. את בעיית האימות ניתן לפתור גם כן בשתי דרכים;
קוד אימות מסרים העושה שימוש בצופן בלוקים או פונקציית גיבוב כדי לייצר הצפנה מאומתת.
חתימה דיגיטלית.
פתרון נוסף שנותן מענה חלקי לבעיה הוא אלגוריתם חלוקת סוד. בשיטת חלוקת סוד, מפתח ההצפנה יכול להיות מוצפן ומחולק בין מספר משתתפים באופן כזה שרק בשיתוף פעולה של מספר מוגדר של משתמשים ניתן לשחזרו. ללא מספר החלקים הדרוש (או ה'שתפים' בהקשר של חלוקת סוד) אין דרך לשחזר את המפתח.