MQV (קיצור של Menezes-Qu-Vanstone) הוא פרוטוקול שיתוף מפתח קריפטוגרפי עם אימות, שפותח ב-1998 על ידי אלפרד מנזס וסקוט ונסטון מאוניברסיטת ווטרלו, מינגהו קו מחברת Certicom, בשיתוף עם לורי לאו וג'רי סולינס מה-NSA. פרוטוקול MQV מבוסס על פרוטוקול דיפי-הלמן, הוא היעיל ביותר מסוגו וניתן להפעילו בכל חבורה ציקלית סופית, במיוחד בחבורת עקום אליפטי (במקרה זה מסומן בקיצור ECMQV). כמו כן קיימות שתי וריאציות נוספות של הפרוטוקול; העברת מפתח מאומת במהלך יחיד, המתאים לסביבה בה רק צד אחד מקוון וכן העברת מפתח בשלושה מהלכים המספק אימות דו צדדי.
הפרוטוקול מפורט בתקן SEC 1 של איגוד SECG (שנוסד על ידי סרטיקום) ושולב בתקן IEEE P1363, בתקנים ANSI X9.63, X9.42 וכן RFC-5656 של IETF. כמו כן נכלל על ידי NSA בחבילה הקריפטוגרפית Suit B לפי המלצות NIST SP 800-56A. ייתכן שכמה מגרסאות הפרוטוקול מוגנות בפטנט. גרסאות מתקדמות של הפרוטוקול אטרקטיביות במיוחד להצפנת תקשורת אלחוטית ברשתות מקומיות כמו IEEE 802.11 או לטווחים בינוניים כמו WiMAX, כאשר משתמשי הקצה הם בדרך כלל מכשירים המוגבלים במשאבים וברוחב פס.
רקע.
פרוטוקול שיתוף מפתח.
מאז המצאת המפתח הציבורי על ידי דיפי והלמן ופתרון בעיית הפצת המפתחות פותחו מספר פרוטוקולים קריפטוגרפיים להעברת מפתח סודי. כללית קיימים שני סוגים של שיתוף או הקמה (Key establishment) של מפתחות הצפנה; פרוטוקול שיתוף מפתח (Key agreement) שבו שני משתתפים או יותר מסכמים ביניהם על מפתח סודי כך שכל אחד מהם תורם את חלקו להקמתו במידה שווה, לעומת "העברת מפתח" (Key transport) שבו צד אחד מייצר ומעביר מפתח סודי למשתתפים האחרים, בעוד שהם אינם בהכרח תורמים להקמתו ואין להם שליטה עליו.
החסרון בפרוטוקול דיפי הלמן במתכונתו המקורית שהוא אינו מספק אימות זהויות ולכן חשוף להתקפת אדם באמצע. אפשר להוסיף מרכיב אימות על ידי חתימה דיגיטלית או תעודת מפתח ציבורי החתומה על ידי רשות מאשרת. משיקולי יעילות נעשו מאמצים לפתח פרוטוקולים המספקים אימות עקיף כחלק אינטרגלי ללא צורך בתהליכים נפרדים ובהתערבות צד שלישי. אפשר לחלק את מרכיב האימות לשני סוגים, שיתוף מפתח מאומת שבו צד אחד משתף ומאמת מפתח עם צד אחר, כך שהוא מקבל אישור לזהותו של המשתתף האחר (כיוון אחד) ונקרא בקיצור AK וכן "שיתוף מפתח מאומת עם אישור", שבנוסף מאשר את זהות השרת כלפי הלקוח (דו כיווני) שנקרא בקיצור AKC (קיצור של Authenticated Key agreement with Confirmation).
בסיום הפרוטוקול יכולים המשתתפים הלגיטימיים להיות סמוכים ובטוחים שמלבדם אין איש יודע מהו המפתח הסודי המשותף. בעיקרון אפשר להשתמש בו כמפתח הצפנה להצפנת ההתקשרות ביניהם. מטעמי ביטחון מומלץ לא להשתמש בו ישירות אלא לגזור ממנו מפתח אחר באמצעות פונקציית גזירת מפתח (Key derivation function) בקיצור KDF. המפתח הסודי המשותף שנגזר בסופו של דבר נקרא מפתח שיחה, כשמו הוא נועד להתקשרות אחת או מספר התקשרויות מוגבל כשלאחריהן מושמד.
יש לשים לב שקיימת הבחנה בין המפתחות הציבוריים הארעיים (ephemeral key) שנוצרים באקראי בכל ריצת הפרוטוקול, לבין המפתחות ארוכי-הטווח שברשות המשתתפים. גם במסגרת פרוטוקול MQV ההנחה היא שהמשתתפים בפרוטוקול אימתו את המפתחות הציבוריים ארוכי הטווח שלהם בדרך מוסכמת לפני ריצת הפרוטוקול. לעומת זאת אין צורך באימות המפתחות הארעיים כיוון ש-MQV מבצע אימות עקיף.
מאפיינים.
פרוטוקול שיתוף מפתח קריפטוגרפי בטוח אמור להתמודד עם התקפות פסיביות, שבהן התוקף מנסה לנחש את המידע הסודי על ידי התבוננות בחילופי המהלכים. ההנחה היא שמסרי הפרוטוקול מועברים בערוץ הפתוח שניתן לציתות על ידי כל גורם עם ציוד מתאים. וכן נגד התקפות אקטיביות בהן התוקף יכול גם ל'הזריק', ליירט, למחוק, לשנות ואו לשכפל מסרים. ביתר פירוט הפרוטוקול אמור לסכל את ההתקפות הבאות:
אפשר לממש את פרוטוקול MQV בתת-חבורה של החבורה הציקלית formula_1 מסדר ראשוני, למשל המפתח הפרטי הוא השלם formula_2 והציבורי הוא formula_3 כאשר formula_4 יוצר של השדה. במקרה זה המפתחות צריכים להיות בגודל של מעל 2000 ספרות בינאריות לעומת זאת יש יתרון ביישום הפרוטוקול בעקום אליפטי מכיוון שהוא מציע ביטחון זהה עם מפתח קצר משמעותית (בין 160 ל-512 סיביות נכון לשנת 2015). מסיבה זו תיאור הפרוטוקול מתמקד בעקום אליפטי. מניחים שהפרמטרים הציבוריים של העקום ידועים לכל המשתתפים. וכן כל מפתח ציבורי formula_5 (שהוא נקודה בעקום) מאומת ונבדק שהוא עומד בהגדרות המערכת. בבדיקה מוודים ש:
הבדיקה האחרונה יקרה במונחי מיחשוב ולכן נוטים בדרך כלל להימנע ממנה. אפשר במקום זאת לוודא שהמפתח המשותף formula_12 שהופק בסיום הפרוטוקול הוא נקודה בתת-חבורה הנוצרת על ידי formula_13 כלומר formula_14.
פרוטוקול דיפי-הלמן הבסיסי בעקום אליפטי (ללא אימות).
פרוטוקול דיפי-הלמן בעקום אליפטי ללא אימות (נקרא בקיצור ECDH) אנלוגי לפרוטוקול דיפי הלמן בחבורה רגילה. נתונים פרמטרי התחום של העקום לפי הגדרות התקן: formula_15, העקום האליפטי הוא formula_16 כאשר formula_17 הסדר של השדה formula_9 וכן formula_19 מקדמים של משוואת העקום, formula_13 היא נקודת הבסיס, formula_21 הסדר הראשוני של נקודת הבסיס, formula_22 פקטור משלים כך שמתקיים formula_23 ו-formula_24 מייצג את מספר הנקודות בעקום formula_25.
המשתתפת formula_26 עם מפתח סודי שהוא שלם אקראי formula_27 והמפתח הציבורי formula_28 (תוצאת כפל סקלארי של נקודת הבסיס formula_13 ב-formula_27) מסומנת בקיצור formula_31 והמשתתף formula_32 עם מפתחות formula_33 בהתאמה, רוצים לשתף ביניהם סוד formula_12, תחילה הם מחליפים ביניהם מפתחות ציבוריים ואז מחלצים את הסוד המשותף כדלהלן:
היות שמתקיים formula_35, הסוד המשותף הוא הנקודה formula_12.
פרוטוקול MQV.
במקור הוצעו שלוש וריאציות של הפרוטוקול; שיתוף במהלך יחיד כך שרק צד אחד מקוון, בשני מהלכים עם אימות חד כיווני ובשלושה מהלכים עם אימות דו כיווני. יהי formula_37 פרמטר ביטחון של הפרוטוקול (אורך formula_21 בסיביות), כלומר formula_39. אם formula_40 נקודה כלשהי בעקום formula_41 הוא פונקציה שממפה נקודה בעקום למספר שלם כדלהלן; formula_42 כאשר formula_43 הוא השלם המייצג את הקואורדינטה formula_2 של הנקודה formula_40. כדי לטשטש אינטראקציה אפשרית בין הפונקציה לבין העקום האליפטי (שעלולה לפתוח פתח להתקפת התנגשות) יש כאלו שממליצים להשתמש בפונקציית גיבוב.
פרוטוקול 1 - שיתוף מפתח עם אימות בשני מהלכים.
תיאור המהלכים.
כאמור לפי הצעה של מספר מומחים כדי למנוע את התקפת שיתוף לא ידוע (להלן) כדאי להשתמש בפונקציית KDF מוסכמת על formula_12 עם מידע משותף כלשהו שמכיל את זהות המשתתפים בפרוטוקול ולהשתמש בתוצאה האחרונה כמפתח שיחה. וכן מומלץ לכלול בכל המסרים של הפרוטוקול את זהות המשתתפים.
הפרוטוקול לא הוכח באופן פורמלי כבטוח אך לטענת המפתחים קיימת סברה היוריסטית שהוא מספק אימות הדדי של המפתח באופן עקיף וכן שהוא עמיד כנגד ההתקפות המתוארות לעיל; מפתח שיחה ידוע, שמירת סודיות קדימה, מניעת התחזות ושליטה. חשיפת המפתחות הזמניים אינה מסכנת את חשיפת המפתחות הפרטיים ארוכי הטווח של המשתתפים ולא את מפתח השיחה formula_12. הערכים formula_67 ו-formula_68 משמשים למעשה כחתימה עקיפה של המשתתפים על המפתחות הציבוריים הזמניים שלהם formula_69 ו-formula_70 בהתאמה. אפשר לראות שהפרוטוקול נכון כי:
לעומת פרוטוקול דיפי הלמן הבסיסי שבו formula_72. כמו כן כדי לשפר יעילות הביטוי formula_41 מנצל רק מחצית מסיביות הקואורדינטה formula_2 של הנקודה, זאת כדי להקל על פעולות הכפל הסקלארי בסעיפים 3 ו-5 והכפל ב-formula_22 נועד להבטיח שהסוד המשותף formula_12 יהיה נקודה בתת-חבורה מסדר formula_21 בעקום האליפטי. כמו כן היות שאת formula_78 אפשר לחשב מראש יוצא שכל צד מבצע רק 1.5 פעולות כפל סקלארי און ליין.
פרוטוקול 2 - שיתוף מפתח עם אימות במהלך אחד.
המטרה היא ש-formula_26 ו-formula_32 ישתפו מפתח סודי על ידי מהלך יחיד מ-formula_26 ל-formula_32. מצב זה רצוי במקרה שרק משתמש אחד מקוון כמו ביישומי דואר אלקטרוני. הפרוטוקול הוא כדלהלן:
פירוט המהלכים.
מטבע הדברים היות ש-formula_32 אינו תורם למהלכי הפרוטוקול בערך אקראי משלו, חסרים בפרוטוקול הגנה מפני התקפת מפתח ידוע ושמירת סודיות קדימה.
פרוטוקול 3 - שיתוף מפתח מאומת עם אישור דו צדדי.
הגרסה הזו של פרוטוקול 1 מנצלת פרימיטיב קריפטוגרפי נוסף שמספק אימות כמו MAC כדי לבצע אימות ואישור דו צדדי. וכן בפרוטוקול הבא הערכים formula_96 ו-formula_97 הם פונקציית לגזירת מפתח. למשל אם הערך הוא formula_98 אפשר לממש פונקציית גיבוב בטוחה כמו SHA-2 של formula_98 כשהוא משורשר עם ערך נוסף, כך formula_100 וכן formula_101.
פירוט המהלכים.
כאמור ביטחון הפרוטוקול היוריסטי בלבד, כולל את כל התכונות המצוינות לעיל ויעיל במיוחד.
פרוטוקול HMQV.