לדלג לתוכן

MQV

מתוך ויקיפדיה, האנציקלופדיה החופשית

MQV(קיצור של Menezes-Qu-Vanstone) הואפרוטוקול שיתוף מפתחקריפטוגרפיעםאימות,שפותח ב-1998 על ידיאלפרד מנזסוסקוט ונסטוןמאוניברסיטת ווטרלו,מינגהו קומחברתCerticom[1][2],בשיתוף עםלורי לאווג'רי סולינסמה-NSA.פרוטוקול MQV מבוסס עלפרוטוקול דיפי-הלמן,הוא היעיל ביותר מסוגו וניתן להפעילו בכלחבורה ציקליתסופית, במיוחד בחבורתעקום אליפטי(במקרה זה מסומן בקיצור ECMQV). כמו כן קיימות שתי וריאציות נוספות של הפרוטוקול; העברת מפתח מאומת במהלך יחיד, המתאים לסביבה בה רק צד אחד מקוון וכן העברת מפתח בשלושה מהלכים המספק אימות דו צדדי.

הפרוטוקול מפורט בתקן SEC 1[3]של איגוד SECG (שנוסד על ידי סרטיקום) ושולב בתקןIEEEP1363, בתקניםANSIX9.63, X9.42 וכן RFC-5656 שלIETF.כמו כן נכלל על ידי NSA בחבילה הקריפטוגרפיתSuit Bלפי המלצותNISTSP 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 מבצע אימות עקיף.

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

  • מפתח ידוע(known-key); הפרוטוקול ייוותר בטוח נוכח מצב שבו נחשפו לעיני התוקף מפתחות שיחה אחרים (שנוצרו בעבר על ידי הפרוטוקול).
  • שמירת סודיות קדימה(forward secrecy) אוסודיות מושלמת קדימה;גם אם מפתח ארוך-טווח של אחד המשתתפים נחשף, הדבר לא ישפיע על סודיות מפתחות שיחה שנוצרו לפני החשיפה.
  • מניעת התחזות(impersonation); במצב שבו המפתח הפרטי של אחד המשתתפים ידוע לתוקף לא יתאפשר לו לעשות בו שימוש כדי להתחזות לאחרים כלפי משתמש זה (ברור שבמקרה כזה התוקף מסוגל להתחזות למשתמש הלגיטימי הזה כלפי אחרים כיוון שהמפתח הפרטי מייצג בעצם את זהותו, אך ההפך אינו מחויב המציאות ואף רצוי למנוע).
  • שיתוף לא ידוע(unkown key-share); התוקף לא יצליח לגרום למשתתף אחד לשתף איתו מפתח סודי בעוד שהלה סבור בטעות ששיתף מפתח עם מישהו אחר (כלומר צד אחד מאמין נכון שהוא משתף מפתח עם מישהו שהוא מכיר בעוד שהצד השני למעשה משתף בלא ידיעתו מפתח עם התוקף וסבור שהוא מישהו אחר).
  • שליטה;אף אחד מהצדדים לא יוכל לאלץ את מפתח השיחה שיהיה ערך כלשהו לפי בחירתו.
  • יעילות;מספר המהלכים צריך להיות המינימלי האפשרי וכןתעבורת רשתנמוכה (סך כל הסיביות ששודרו).

אפשר לממש את פרוטוקול MQV בתת-חבורה של החבורה הציקליתמסדר ראשוני, למשל המפתח הפרטי הוא השלםוהציבורי הואכאשריוצרשל השדה. במקרה זה המפתחות צריכים להיות בגודל של מעל 2000 ספרות בינאריות לעומת זאת יש יתרון ביישום הפרוטוקול בעקום אליפטי מכיוון שהוא מציע ביטחון זהה עם מפתח קצר משמעותית (בין 160 ל-512 סיביות נכון לשנת 2015). מסיבה זו תיאור הפרוטוקול מתמקד בעקום אליפטי. מניחים שהפרמטרים הציבורייםשל העקום ידועים לכל המשתתפים. וכן כל מפתח ציבורי(שהוא נקודה בעקום) מאומת ונבדק שהוא עומד בהגדרות המערכת. בבדיקה מוודים ש:

אינו שווה(הנקודה באין סוף).
הקואורדינטותהם אלמנטים של השדה.
מקיים את משוואת העקום.

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

פרוטוקול דיפי-הלמן הבסיסי בעקום אליפטי (ללא אימות)

[עריכת קוד מקור|עריכה]

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

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

היות שמתקיים,הסוד המשותף הוא הנקודה.

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

פרוטוקול 1 - שיתוף מפתח עם אימות בשני מהלכים

[עריכת קוד מקור|עריכה]

תיאור המהלכים

[עריכת קוד מקור|עריכה]
  1. מייצרת מספר אקראיבטווחומחשבת אתאת התוצאה משדרת ל-.
  2. מייצר מספר אקראיבטווחומחשב אתושולח את התוצאה ל-.
  3. מוודה את תקפות הערכים ומחשבת אתואת.
  4. אם אחד הערכים אינו תקף או ש-אזמסיימת את הפרוטוקול בכישלון.
  5. בודק תקפות באופן דומה, מחשב אתואת.
  6. הסוד המשותף הוא.

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

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

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

פרוטוקול 2 - שיתוף מפתח עם אימות במהלך אחד

[עריכת קוד מקור|עריכה]

המטרה היא ש-ו-ישתפו מפתח סודי על ידי מהלך יחיד מ-ל-.מצב זה רצוי במקרה שרק משתמש אחד מקוון כמו ביישומידואר אלקטרוני.הפרוטוקול הוא כדלהלן:

פירוט המהלכים

[עריכת קוד מקור|עריכה]
  1. מייצרת מספר אקראיבטווחומחשבת אתושולחת את התוצאה ל-.
  2. מחשבת אתואת.
  3. מוודה תקפות ערכים ומחשב אתואת.
  4. המפתח המשותף הוא.

מטבע הדברים היות ש-אינו תורם למהלכי הפרוטוקול בערך אקראי משלו, חסרים בפרוטוקול הגנה מפני התקפת מפתח ידוע ושמירת סודיות קדימה.

פרוטוקול 3 - שיתוף מפתח מאומת עם אישור דו צדדי

[עריכת קוד מקור|עריכה]

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

פירוט המהלכים

[עריכת קוד מקור|עריכה]
  1. מייצרת מספר אקראיבטווחומחשבת אתושולחת את התוצאה ל-.
  2. מייצר מספר אקראיבטווח,מחשב אתושולח את התוצאה ל-.
  3. מחשב אתואת.
  4. מחלץ את הערךשהוא הקואורדינטהשל הנקודהומחשב אתואת.
  5. מחשב אתושולח את תג האימות יחד עםל-.
  6. מחשבת אתואתובודקת שהנקודהתקינה.
  7. מחלצת את הערךשהוא פונקציה של הקואורדינטהשל הנקודהומחשבת את הערכים,.
  8. מחשבת אתושולחת את התג ל-.
  9. מחשב אתומוודה שהתוצאה זהה לתג שקיבל מ-.
  10. מפתח השיחה הוא.

כאמור ביטחון הפרוטוקול היוריסטי בלבד, כולל את כל התכונות המצוינות לעיל ויעיל במיוחד.

פרוטוקול HMQV

[עריכת קוד מקור|עריכה]

ב-2005 פרסםהוגו קרווציקמאמר[4]שבו הוא מבקר את ביטחון MQV תחת מודלים של ביטחון ידועים ומציין שהתגלו על ידו כמה חולשות בפרוטוקול. אף על פי שהפרוטוקול זכה לפופולריות רבה וה-NSA הכליל אותו ברשימה הנבחרת שלאלגוריתמיםשעברו בדיקה של קריפטאנליסטים מקצועיים, הרי שלא ניתנה הוכחה פורמלית לביטחונו במונחים שלביטחון סמנטילפי מודלסיבוכיותסטנדרטי או במסגרתמודל אורקל אקראי.הוגו הציע לתקן את הליקויים שמצא על ידי אלגוריתם משופר משלו שנקרא HMQV שפועל עם פונקציית גיבוב ומציע יעילות דומה למקורי ועם ביטחון מוכח. אלפרד מנזס ביקר את ממצאיו של הוגו וטען כי HMQV אינו בטוח יותר ומציג התקפה ריאליסטית במודל קנטי-קרווציק שבה אפשר לחשוף את המפתח הפרטי של המשתתפים. וכן מצא לדבריו שגיאות קריטיות בהוכחות המתמטיות שהובאו על ידי קרווציק. התיקון שהציע מנזס נקרא HMQV-1 והוא גרסה מתוקנת שעמידה בפני ההתקפה המצוינת (אולם בשל התיקון אינה מהירה יותר מהמקורית). קרווציק הגיב על טענות מנזס במאמר משלו וסתר חלק מהן.

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

השוואת פרוטוקול HMQV לעומת MQV (בחבורה ציקלית רגילה)

[עריכת קוד מקור|עריכה]

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

מחשבת את,
מחשב את.

כעת שני המשתתפים מחלצים את הסוד המשותף

פרוטוקול MQV פרוטוקול HMQV
,

,

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

ב-2001 ביקרו רוגווי, בלייר ובונה[5]את הפרוטוקול כפי שהתקבל לתקן SEC-1 והעלו כמה נקודות שראוי להיזהר בהן, תיארו כמה התקפות אפשריות כנגד הפרוטוקול וציינו שהאיומים אינם פטאליים והפרוטוקול טוב לדעתם אם כי יש צורך להגדיר במדויק את יעדי הפרוטוקול באופן שיאפשר להעריך את ביטחונו, מה שלא נעשה בתקן למעט כמה הערות כלליות. כמו כן מציינים שהפרוטוקול יכול להיות בטוח רק במסגרת שבה כל משתמש מחזיק במפתחות הצפנה ארוכי טווח ובמפתחות ארעיים חד פעמיים, מסיבה זו פרוטוקול 2 לא בטוח.

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

התקפת שיתוף לא ידוע

[עריכת קוד מקור|עריכה]

פרוטוקול MQV (פרוטוקול 1) אינו פתור את בעיית "שיתוף לא ידוע" לעיל, כלומר אפשר לבצע התקפה של קליסקי[7]כדלהלן: המצותתמיירטת את מפתח הציבוריהמיועד ל-ומחליפה אותו ב-מחשבת אתוכן אתואז רושמת את המפתחות הללו אצל הרשות המאשרת כדי שיהיו תקפים ושולחת אתל-.המשתמשמגיב במשלוחל-והיא מעבירה אותו הלאה ל-ללא שינוי. כעתו-שיתפו אתבזמן ש-משוכנע כל העת שהוא משתף מפתח עםבעוד שלמעשה הוא שיתף מפתח עם.ישנן שתי דרכים לפתור בעיה זו, האחת להוסיף את זהות המשתתפים לכל מהלכי הפרוטוקול והשנייה להוסיף מהלך שלישי כמו בפרוטוקול 3.

הערות שוליים

[עריכת קוד מקור|עריכה]
  1. ^An Efficient Protocol for Authenticated Key Agreement
  2. ^Law, L.; Menezes, A.; Qu, M.; Solinas, J.; Vanstone, S. (2003). "An Efficient Protocol for Authenticated Key Agreement". Des. Codes Cryptography 28 (2): 119–134
  3. ^SEC 1: Elliptic Curve Cryptography
  4. ^HMQV: A High-Performance Secure Diffie-Hellman Protocol
  5. ^Evaluation of Security Level of Cryptography ECMQVS (from SEC 1)
  6. ^Leadbitter, P. J.; Smart, N. P. (2003). "Analysis of the Insecurity of ECMQV with Partially Known Nonces". Information Security. 6th International Conference, ISC 2003, Bristol, UK, October 1–3, 2003. Proceedings. Lecture Notes in Computer Science 2851. pp. 240–251
  7. ^B. Kaliski. An unknown key-share attack on the MQV key agreement protocol. Manuscript. Proceedings version appeared in RSA 17 Conference 2000 Europe, Munich, April 2000. Work based on earlier communication to IEEE P1363a and ANSI X9F1 working groups, June 1998.