פרוטוקול אתגר-מענה

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

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

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

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

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

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

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

מנגנון האימות של GSM משתמש בפרוטוקול אתגר מענה בשלושה מהלכים, באמצעים סימטריים בלבד, לצורך אימות הלקוח בעת חיוג בטלפון הנייד. טיוטה הנקראת Salted Challenge Response Authentication Mechanism בקיצור SCRAM מפרטת את מנגנוני האימות מבוססי אתגר-מענה של שלד התוכנה SASL ו-GSS-API.

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

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

פרוטוקול אימות חד-צדדי עם חותם זמן:
{| border="0"
|-
| 1.
| <math>\ A \rarr B</math> 
| <math>\ E_K(t_A, B) \quad :</math> 
|}

הפרוטוקול מבוצע במהלך אחד, בו המוכיח A שולח למאמת B את <math>\ t_A</math> הקרוי חותם זמן, זהו ערך המכיל את הזמן שמקורו בשעון המקומי של המוכיח בעת משלוח הוכחת האימות. אותו הוא מצפין בעזרת <math>\ E_K</math> - פונקציית הצפנה סימטרית כלשהי המכילה מנגנון הבטחת שלמות, כאשר <math>\ K</math> הוא המפתח המשותף. במסר זה המוכיח כולל גם את זהותו של המאמת B, זאת כדי לייחד הודעה זו כדי למנוע שימוש חוזר בה מול A. כאן B מסוגל לאמת את זהותו של A על ידי פענוח המסר המוצפן באמצעות המפתח המשותף ובדיקת פרמטר הטריות <math>\ t_A</math> (מה שמחייב סנכרון הזמן בין המשתתפים), הוכחת הזהות מתקבלת אם וכאשר הזמן שמתקבל הוא בטווח המותר.

פרוטוקול אימות חד-צדדי עם מספר אקראי:
{| border="0"
|-
| 1.
| <math>\ A \larr B</math> 
| <math>\ r_B \quad :</math> 
|-
| 2.
| <math>\ A \rarr B</math> 
| <math>\ E_K(r_B,B) \quad :</math> 
|}

בפרוטוקול זה המאמת שולח תחילה מספר אקראי <math>\ r_A</math> כלשהו למוכיח, כאשר המוכיח משיב במסר המכיל את המספר שקיבל כשהוא מוצפן באמצעות פונקציית הצפנה E עם המפתח המשותף K. אולם כדי למנוע התקפה על הפרוטוקול (כאשר התוקף עלול לחזור ולשדר מסר זה מאוחר יותר כדי להתחזות ל-A), יש צורך להגביל את הפרוטוקול באופן שלא יאפשר שידור חוזר של אותם ערכים בטווח זמן כלשהו.

פרוטוקול אימות דו-צדדי עם מספר אקראי:
{| border="0"
|-
| 1.
| <math>\ A \larr B</math> 
| <math>\ r_B \quad :</math> 
|-
| 2.
| <math>\ A \rarr B</math> 
| <math>\ E_K(r_A,r_B,B) \quad :</math> 
|-
| 3.
| <math>\ A \larr B</math> 
| <math>\ E_K(r_B,r_A) \quad :</math> 
|}

פרוטוקול זה דומה לקודמו אך מכיל מסר שלישי שנועד לאמת את זהותו של B כלפי A. כאשר A מאמת את זהותו על ידי בדיקת התאמת הערכים המוצפנים <math>\ r_A,\,r_B</math> שקיבל לאלו שמצויים ברשותו קודם לכן. אפשר לבסס פרוטוקול אימות דומה על פונקציית גיבוב במקום על פונקציית הצפנה, כאשר את <math>\ E_K</math> מחליפים ב-<math>\ H_K</math> הנקראת MAC (קוד אימות מסרים) שהיא בעצם פונקציית גיבוב עם מפתח. ובשינוי קל של הפרוטוקול כדלהלן:

פרוטוקול אימות מבוסס MAC (פרוטוקול זה קרוי SKID):
{| border="0"
|-
| 1. 
| <math>\ A \larr B</math> 
| <math>\ r_B \quad :</math> 
|-
| 2.
| <math>\ A \rarr B</math> 
| <math>\ r_A,\,H_K(r_A,r_B,B) \quad :</math> 
|-
| 3.
| <math>\ A \larr B</math> 
| <math>\ H_K(r_B,r_A,A) \quad :</math> 
|}

במקום לפענח את המסר, המשתתפים מאמתים את זהות חבריהם על ידי הפעלת פונקציית הגיבוב על המסר הגלוי <math>\ r_A</math> ו-<math>\ r_B</math> בהתאמה (תוך שימוש במפתח המשותף) ואז השוואת התוצאה עם הערך המתקבל.

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

פרוטוקול אימות חד-צדדי מבוסס מפתח פומבי:
{| border="0"
|-
| 1.
| <math>\ A \larr B</math>
| <math>\ H(r),\, B, P_A(r,B) \quad :</math>
|-
| 2.
| <math>\ A \rarr B</math>
| <math>\ r \quad :</math>
|}

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

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

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

אימות חד-צדדי מבוסס חתימה דיגיטלית עם חותם זמן:
{| border="0"
|-
| 1.
| <math>\ A \rarr B</math>
| <math>\ t_A,\,B,\,S_A(t_A,B) \quad :</math>
|}

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

פרוטוקול אימות עם מספר אקראי המבוסס על חתימה דיגיטלית:
{| border="0"
|-
| 1.
| <math>\ A \larr B</math>
| <math>\ r_B \quad :</math>
|- 
| 2.
| <math>\ A \rarr B</math>
| <math>\ r_A,\,B,\,S_A(r_A,\,r_B,\,B) \quad :</math>
|}

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

== פרוטוקול CHAP ==
Challange-Handshake Authentication Protocol הוא פרוטוקול אימות המבוצע מעל פרוטוקול נקודה לנקודה (PPP) - תקן תקשורת להעברת חבילות מידע להתקשרות דו כיוונית. אלגוריתם CHAP משתמש בשיטת אתגר מענה המתוארת באמצעות תהליך הקרוי Handshake המתבצע בשלושה מהלכים לביצוע אימות זהויות המשתתפים בפרוטוקול. הפרוטוקול מבוצע בשכבת הקו של מודל ה-OSI בתחילת ההתקשרות וכן עשוי להתבצע פעמים נוספות במהלך ההתקשרות, על מנת לצמצם את הזמן בו הקשר חשוף לניסיונות התחזות מצד תוקף פוטנציאלי. 

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

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

== חומרה ==
פרוטוקול אתגר-מענה ניתן ליישום בעזרת כרטיס חכם המכיל שבב או מעגל אלקטרוני מתאים, אם המעגל המשולב או שבב הזיכרון שבו הם חסיני מגע (tamper resistant).

== קישורים חיצוניים ==
* 

קטגוריה:קריפטוגרפיה