התקפת מוצפן-נבחר

בקריפטואנליזה, התקפת מוצפן-נבחר או תְּקִיפַת תַּמְלִיל מֻצְפָּן נִבְחָר (באנגלית: Chosen-ciphertext attack) בקיצור CCA, היא מודל התקפה שבו המתקיף או מנתח הצופן מסוגל להשיג פענוח של כמות מוגבלת של טקסטים מוצפנים לפי בחירתו, שהוצפנו באמצעות האלגוריתם אותו הוא מנתח. עם מידע זה הוא מנסה לפענח את הטקסט המוצפן המותקף או מנסה לשחזר את מפתח ההצפנה הסודי ששימש להצפנתו. בגרסה החזקה ביותר של מודל זה המתקיף יכול או רשאי למטב את התקפתו על ידי בחירה מושכלת של טקסטים מוצפנים בהתאם לתוצאות קודמות. 
בניגוד להתקפת גלוי-נבחר, בהתקפת מוצפן-נבחר מוקנת ליריב או מנתח הצופן היכולת לא רק "להצפין" טקסטים גלויים כרצונו אלא אף היכולת "לפענח" כל טקסט מוצפן שיבקש בהסתייגות אחת, הוא אינו רשאי לבקש פענוח של הטקסט המוצפן המותקף, אחרת ההתקפה תהיה טריוויאלית.

דוגמאות מעשיות

אם נתונה מערכת הצפנה סימטרית כדלהלן:  כאשר  היא פונקציית הצפנה כמו DES. המערכת מקבלת את  ומחזירה ערך אקראי כלשהו  ואת המסר כשהוא מוצפן ב-XOR עם מפתח שהופק על ידי פונקציית ההצפנה  , בדומה להצפנה במצב הפעלה מונה. הוכח שמערכת זו נקראת בטוחה לפי מודל התקפת גלוי-נבחר. אפשר להמחיש בקלות מדוע מערכת זו לא תהיה בטוחה במסגרת מודל התקפת מוצפן-נבחר, כדלהלן. המתקיף יכול לשלוח לאורקל את  (מחרוזת של  אפסים) וכן  (מחרוזת של  אחדים). כעת, כאשר הוא מקבל את האתגר , הוא יכול להפוך את הסיבית הראשונה של  ואז לבקש מהאורקל לפענח את הטקסט המוצפן  לאחר השינוי.  לכן השאילתה הזו מותרת. תשובת האורקל לאחר הפענוח של  יכולה להיות אחד מהשנים, או  במקרה של  או  במקרה של . בגלל ה-XOR השינוי בסיבית הראשונה משפיע על תוצאת הפענוח רק בסיבית הראשונה, לכן התוצאה תהיה יכולה להיות רק '0' שלאחריו מחרוזת של  אחדים או להפך '1' שלאחריו מחרוזת של  אפסים. ברור שהמתקיף יכול כעת להבחין בבירור מה פוענח או במילים אחרות  בהסתברות של '1'. דוגמה זו ממחישה היטב מדוע מודל התקפת מוצפן-נבחר נחשבת למודל המחמיר ביותר. כל מערכת הצפנה שבה המתקיף רשאי לבצע מניפולציה לוגית של סיביות מבלי שהדבר יתקל בחשיפה ודחייה על ידי המערכת, אינה נחשבת לבטוחה תחת מודל התקפת מוצפן-נבחר. למעשה הגדרה זו מקבילה להגדרת החשילות. באופן כללי רעיון החשילות הוא שצופן אינו חשיל אם יריב המנסה לשנות טקסט מוצפן כלשהו נתקל בתוצאה שהיא אחת מהשתיים, טקסט "בלתי חוקי" או טקסט מוצפן כזה שלטקסט הגלוי המתקבל לאחר פענוחו אין קשר סטטיסטי כלשהו לטקסט הגלוי המקורי.
ידוע שהצפנת RSA וכן כל שיטת הצפנה דטרמיניסטית חשופה מעצם טבעה להתקפת מוצפן-נבחר. אף על פי שצופן אל-גמאל והצפנת בלום-גולדווסר מוגדרות כבטוחות סמנטית, זוהי הגדרה חלשה כיוון שניתן לפרוץ אותן בהתקפת CCA. למשל ב-RSA כדי לחלץ את  אפשר להערים על המערכת המצפינה והמפענחת על ידי ניסיון לפענח את  אם התוצאה היא  כלשהו קל מאוד לחלץ את  ממנה פשוט על ידי הכפלה בהופכי הכפלי של  כי . 
יתרה מזו כיוון שהוכח שבהצפנת RSA חשיפת הסיבית הנמוכה ביותר שקולה לפענוח המסר כולו. לכן אפשר לבסס את ההתקפה על תשובה פשוטה; אמת או שקר. כלומר האם הפענוח הצליח או נכשל עקב אי תאימות לתקן כגון אם התוצאה אינה בפורמט הנכון או בטווח הערכים המותר על פי התקן. דוגמה טובה להתקפה כזו היא התקפת מוצפן-נבחר של דניאל בלייכבכר ממעבדות בל כנגד PKCS הגרסה הראשונה, שיישם את RSA עם שיטת ריפוד הכוללת שני בתים קבועים ומחרוזת ריפוד רנדומאלית המשורשרת למסר לפני ההצפנה. פרוטקול PKCS#1 שהיווה חלק חשוב מ-SSL היה פגיע להתקפה זו שאיפשרה שחזור מפתח השיחה על ידי בחירה מושכלת של  ו- ניסיונות פענוח בקירוב.
הלקח החשוב למפתחי חומרת הצפנה שצריך לנקוט משנה זהירות ביישום המערכת באופן שלא תספק מידע כלשהו שיכול להיות מנוצל להתקפה זו. במיוחד במכשירים ניידים או כרטיס חכם שבהם אפשר לבצע אנליזה של כמות גדולה של טקסטים מוצפנים ללא הפרעה. קשה למנוע התקפה כזו לחלוטין אולם ישנן סכימות המשתלבות כחלק ממנגנוני הצפנה ומספקות הגנה אקטיבית מפני התקפות CCA. ביניהן ניתן למנות שיטות הצפנה מאומתת וכן גרסת RSA עם סכמת הריפוד של בלייר ורוגווי שנקראת RSA-OAEP כפי שמובא בתקן PKCS, הצפנת קריימר-שופ ועוד. הרעיון הכללי הוא לאלץ פורמט מסוים של המידע לפני העברתו לפענוח או הצפנה, תוך שימוש במספרים אקראיים המיוצרים באמצעות מחולל קריפטוגרפי ופונקציות גיבוב בטוחות והשילוב שביניהם באופן שמנטרל כמעט לחלוטין את התקפת CCA. 
כמו כן אופן הטיפול בשגיאות מחייב משנה זהירות. רצוי לוודא שבתהליך החזרת השגיאה לא ניתן ללמוד מידע מועיל כלשהו על המבנה או המצב הפנימי של המערכת. במיוחד כאשר מתרחשת שגיאה בתחילת פרוצדורה ארוכה, זמן התגובה של התוכנית מתקצר משמעותית ועקב כך מידע מסוים זולג.

גרסאות של מתקפת מוצפן-נבחר

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

התקפת "ארוחת צהרים"

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

התקפת מוצפן-נבחר מותאמת

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