בקריפטואנליזה, התקפת מוצפן-נבחר או תְּקִיפַת תַּמְלִיל מֻצְפָּן נִבְחָר (באנגלית: Chosen-ciphertext attack) בקיצור CCA, היא מודל התקפה שבו המתקיף או מנתח הצופן מסוגל להשיג פענוח של כמות מוגבלת של טקסטים מוצפנים לפי בחירתו, שהוצפנו באמצעות האלגוריתם אותו הוא מנתח. עם מידע זה הוא מנסה לפענח את הטקסט המוצפן המותקף או מנסה לשחזר את מפתח ההצפנה הסודי ששימש להצפנתו. בגרסה החזקה ביותר של מודל זה המתקיף יכול או רשאי למטב את התקפתו על ידי בחירה מושכלת של טקסטים מוצפנים בהתאם לתוצאות קודמות.
בניגוד להתקפת גלוי-נבחר, בהתקפת מוצפן-נבחר מוקנת ליריב או מנתח הצופן היכולת לא רק "להצפין" טקסטים גלויים כרצונו אלא אף היכולת "לפענח" כל טקסט מוצפן שיבקש בהסתייגות אחת, הוא אינו רשאי לבקש פענוח של הטקסט המוצפן המותקף, אחרת ההתקפה תהיה טריוויאלית.
מבוא והגדרות.
נתונה מערכת הצפנה סימטרית formula_1 הכוללת שלושה אלגוריתמים, אלגוריתם הכנת מפתח, אלגוריתם הצפנה ואלגוריתם פענוח בהתאמה. נתון יריב formula_2 המעוניין לשבור את formula_3 וכן נתון פרמטר ביטחון formula_4.
מהיבט תאורטי היכולת המוקנת ל-formula_2 מבוטאת באמצעות אורקל היפותטי שהוא מעין קופסה שחורה שבאמצעות פרוטוקול הפעלה חיצוני הוא יכול להצפין או לפענח איתה כל קלט שיחפוץ ולראות את התוצאה, איך אין לו אפשרות לראות את מפתח ההצפנה או מפתח הפענוח. האורקל מורכב למעשה משני אורקלים "אורקל הצפנה" ו"אורקל פענוח". להלן מתואר "ניסוי הבחנה" הנקרא formula_6 המתנהל כך:
חשוב להדגיש כי הגישה של היריב לאורקל הפענוח בלתי מוגבלת למעט הסתייגות אחת. בסעיף 4 היריב אינו רשאי לבקש פענוח של האתגר formula_19 עצמו. המשמעות של הצלחת הניסוי היא שהיריב או מנתח הצופן הצליח לזהות בבירור האם ההצפנה הייתה של formula_20 או formula_21. יכולת כזו כאמור אם קיימת, יכולה להביא לשבירתו המוחלטת של אלגוריתם ההצפנה ולכן כל אלגוריתם שלא יעמוד במבחן זה אינו מוגדר בטוח תחת מודל זה. כאן אין הכוונה שהוא אינו בטוח לשימוש כלל, אלא רק שהוא אינו מתאים לשימוש במסגרת מודל זה.
ביטחון הצפנה סימטרית נגד התקפת מוצפן-נבחר.
מערכת ההצפנה formula_3 תקרא בלתי ניתנת להבחנה תחת התקפת מוצפן-נבחר (בקיצור CCA-IND) אם עבור כל יריב פולינומי הסתברותי formula_2 קיימת פונקציית זניחות formula_24 כך שמתקיים:
כאשר ההסתברות היא מעל הטלות מטבע אקראיות שהן חלק מהניסוי (סעיף 3). אומרים שהמערכת בטוחה אם היתרון של היריב בשבירתה גדול מחצי בשיעור זניח שאפשר להתעלם ממנו. אילו היה מדובר בפונקציה אקראית אמיתית ברור שההסתברות להצלחה היא חצי. אולם כאשר מדובר בפונקציה פסאודו-אקראית, באופן תאורטי המתקיף יכול לנסות את כל האפשרויות של המפתח עד שימצא את המפתח המתאים. להתקפה כזו קוראים כוח גס והיא אפשרית מהיבט תאורטי, אך אם המפתח גדול, היא אינה מעשית כי אין ליריב מספיק זמן כדי להשלים את ההתקפה.
אפשר לתהות איך זה שליריב מוענקת עוצמה רבה שכזו והאם סיטואציה כזו בכלל אפשרית בעולם האמיתי. נכון שלא מצפים ממשתתף הגון לפענח עבור המתקיף כל טקסט מוצפן שיבקש, למרות זאת במצבים מסוימים ייתכן שהיריב יוכל לפתות את הקורבן לפענח עבורו טקסט מוצפן אפילו אם בכמות מוגבלת. דוגמאות מעשיות:
דוגמאות מעשיות.
אם נתונה מערכת הצפנה סימטרית כדלהלן: formula_26 כאשר formula_27 היא פונקציית הצפנה כמו DES. המערכת מקבלת את formula_28 ומחזירה ערך אקראי כלשהו formula_29 ואת המסר כשהוא מוצפן ב-XOR עם מפתח שהופק על ידי פונקציית ההצפנה formula_30, בדומה להצפנה במצב הפעלה מונה. הוכח שמערכת זו נקראת בטוחה לפי מודל התקפת גלוי-נבחר. אפשר להמחיש בקלות מדוע מערכת זו לא תהיה בטוחה במסגרת מודל התקפת מוצפן-נבחר, כדלהלן. המתקיף יכול לשלוח לאורקל את formula_31 (מחרוזת של formula_4 אפסים) וכן formula_33 (מחרוזת של formula_4 אחדים). כעת, כאשר הוא מקבל את האתגר formula_35, הוא יכול להפוך את הסיבית הראשונה של formula_36 ואז לבקש מהאורקל לפענח את הטקסט המוצפן formula_37 לאחר השינוי. formula_38 לכן השאילתה הזו מותרת. תשובת האורקל לאחר הפענוח של formula_37 יכולה להיות אחד מהשנים, או formula_40 במקרה של formula_41 או formula_42 במקרה של formula_43. בגלל ה-XOR השינוי בסיבית הראשונה משפיע על תוצאת הפענוח רק בסיבית הראשונה, לכן התוצאה תהיה יכולה להיות רק '0' שלאחריו מחרוזת של formula_44 אחדים או להפך '1' שלאחריו מחרוזת של formula_44 אפסים. ברור שהמתקיף יכול כעת להבחין בבירור מה פוענח או במילים אחרות formula_46 בהסתברות של '1'. דוגמה זו ממחישה היטב מדוע מודל התקפת מוצפן-נבחר נחשבת למודל המחמיר ביותר. כל מערכת הצפנה שבה המתקיף רשאי לבצע מניפולציה לוגית של סיביות מבלי שהדבר יתקל בחשיפה ודחייה על ידי המערכת, אינה נחשבת לבטוחה תחת מודל התקפת מוצפן-נבחר. למעשה הגדרה זו מקבילה להגדרת החשילות. באופן כללי רעיון החשילות הוא שצופן אינו חשיל אם יריב המנסה לשנות טקסט מוצפן כלשהו נתקל בתוצאה שהיא אחת מהשתיים, טקסט "בלתי חוקי" או טקסט מוצפן כזה שלטקסט הגלוי המתקבל לאחר פענוחו אין קשר סטטיסטי כלשהו לטקסט הגלוי המקורי.
ידוע שהצפנת RSA וכן כל שיטת הצפנה דטרמיניסטית חשופה מעצם טבעה להתקפת מוצפן-נבחר. אף על פי שצופן אל-גמאל והצפנת בלום-גולדווסר מוגדרות כבטוחות סמנטית, זוהי הגדרה חלשה כיוון שניתן לפרוץ אותן בהתקפת CCA. למשל ב-RSA כדי לחלץ את formula_47 אפשר להערים על המערכת המצפינה והמפענחת על ידי ניסיון לפענח את formula_48 אם התוצאה היא formula_49 כלשהו קל מאוד לחלץ את formula_28 ממנה פשוט על ידי הכפלה בהופכי הכפלי של formula_36 כי formula_52.
יתרה מזו כיוון שהוכח שבהצפנת RSA חשיפת הסיבית הנמוכה ביותר שקולה לפענוח המסר כולו. לכן אפשר לבסס את ההתקפה על תשובה פשוטה; אמת או שקר. כלומר האם הפענוח הצליח או נכשל עקב אי תאימות לתקן כגון אם התוצאה אינה בפורמט הנכון או בטווח הערכים המותר על פי התקן. דוגמה טובה להתקפה כזו היא התקפת מוצפן-נבחר של דניאל בלייכבכר ממעבדות בל כנגד PKCS הגרסה הראשונה, שיישם את RSA עם שיטת ריפוד הכוללת שני בתים קבועים ומחרוזת ריפוד רנדומלית המשורשרת למסר לפני ההצפנה. פרוטקול PKCS#1 שהיווה חלק חשוב מ-SSL היה פגיע להתקפה זו שאיפשרה שחזור מפתח השיחה על ידי בחירה מושכלת של formula_53 ו-formula_54 ניסיונות פענוח בקירוב.
הלקח החשוב למפתחי חומרת הצפנה שצריך לנקוט משנה זהירות ביישום המערכת באופן שלא תספק מידע כלשהו שיכול להיות מנוצל להתקפה זו. במיוחד במכשירים ניידים או כרטיס חכם שבהם אפשר לבצע אנליזה של כמות גדולה של טקסטים מוצפנים ללא הפרעה. קשה למנוע התקפה כזו לחלוטין אולם ישנן סכימות המשתלבות כחלק ממנגנוני הצפנה ומספקות הגנה אקטיבית מפני התקפות CCA. ביניהן ניתן למנות שיטות הצפנה מאומתת וכן גרסת RSA עם סכמת הריפוד של בלייר ורוגווי שנקראת RSA-OAEP כפי שמובא בתקן PKCS, הצפנת קריימר-שופ ועוד. הרעיון הכללי הוא לאלץ פורמט מסוים של המידע לפני העברתו לפענוח או הצפנה, תוך שימוש במספרים אקראיים המיוצרים באמצעות מחולל קריפטוגרפי ופונקציות גיבוב בטוחות והשילוב שביניהם באופן שמנטרל כמעט לחלוטין את התקפת CCA.
כמו כן אופן הטיפול בשגיאות מחייב משנה זהירות. רצוי לוודא שבתהליך החזרת השגיאה לא ניתן ללמוד מידע מועיל כלשהו על המבנה או המצב הפנימי של המערכת. במיוחד כאשר מתרחשת שגיאה בתחילת פרוצדורה ארוכה, זמן התגובה של התוכנית מתקצר משמעותית ועקב כך מידע מסוים זולג.
גרסאות של מתקפת מוצפן-נבחר.
התקפת מוצפן-נבחר יכולה להיות ניתנת להתאמה (Adaptive) כלומר התוקף מסוגל לשפר את ההתקפה על פי תוצאות התקפה קודמת, ככל שיחפוץ. או בלתי ניתנת להתאמה (Non-Adaptive), שבהן התוקף מסוגל לבצע התקפה אחת או מספר מוגבל מאוד של התקפות שלאחריהן עליו לנתח את המידע שהושג לגילוי המפתח או הטקסט הקריא. במציאות ניתן להשוות מצבים אילו למתקנים חכמים שהוספו להם מגבלות כאמצעי הגנה נוספת, כגון הגבלת קצב הפענוח או מספר הפעמים שניתן לבצע פעולת פענוח/הצפנה בתוך פרק זמן נתון.
התקפת "ארוחת צהרים".
גרסה אחת של התקפת צופן-נבחר מותאמת היא שקיים חלון זמן מוגבל לביצוע ההתקפה. הביטוי נגזר מהרעיון שבזמן שהמשתמש הלגיטימי אינו נמצא (כגון אם יצא לארוחת צהרים) והכרטיס או המכשיר נגיש לתוקף לפרק זמן קצר זה. ברור שלפחות כל עוד המכשיר נגיש לתוקף מפתח ההצפנה במצב פגיע גם אם נעשה שימוש בסכימה בטוחה. לכן במקרה כזה הזמן שבו המכשיר נחשף להתקפה קריטי. התקפה זו מסומנת בדרך כלל בקיצור CCA1. באופן כללי התקפה זו חלשה במידה מסוימת בשל העובדה שהיא מוגבלת בזמן. הגדרה אחרת של התקפה זו היא מצב שבו האורקל זמין לפרק זמן מסוים שבו יכול התוקף להגיש שאילתות ולקבל תשובות לגבי טקסטים מוצפנים כלשהם לפי בחירתו, אולם מרגע שניתן האתגר, התוקף אינו יכול או אינו רשאי לפנות לאורקל ועליו להתבסס על השאלתות שהגיש לפני כן.
התקפת מוצפן-נבחר מותאמת.