התקפת מוצפן-נבחר
מבוא והגדרות > דוגמאות מעשיות

אם נתונה מערכת הצפנה סימטרית כדלהלן:  {\text{Enc}}_{k}(m)=\langle r,s=F_{k}(r)\oplus m\rangle  כאשר  F_{k} היא פונקציית הצפנה כמו DES. המערכת מקבלת את  m ומחזירה ערך אקראי כלשהו  r ואת המסר כשהוא מוצפן ב-XOR עם מפתח שהופק על ידי פונקציית ההצפנה   s=F_{k}(r)\oplus m, בדומה להצפנה במצב הפעלה מונה. הוכח שמערכת זו נקראת בטוחה לפי מודל התקפת גלוי-נבחר. אפשר להמחיש בקלות מדוע מערכת זו לא תהיה בטוחה במסגרת מודל התקפת מוצפן-נבחר, כדלהלן. המתקיף יכול לשלוח לאורקל את  m_{0}=0^{n} (מחרוזת של  n אפסים) וכן  m_{1}=1^{n} (מחרוזת של  n אחדים). כעת, כאשר הוא מקבל את האתגר  c=\langle r,s\rangle , הוא יכול להפוך את הסיבית הראשונה של  s ואז לבקש מהאורקל לפענח את הטקסט המוצפן  c' לאחר השינוי.  c\neq c' לכן השאילתה הזו מותרת. תשובת האורקל לאחר הפענוח של  c' יכולה להיות אחד מהשנים, או  10^{n-1} במקרה של  b=0 או  01^{n-1} במקרה של  b=1. בגלל ה-XOR השינוי בסיבית הראשונה משפיע על תוצאת הפענוח רק בסיבית הראשונה, לכן התוצאה תהיה יכולה להיות רק '0' שלאחריו מחרוזת של  n-1 אחדים או להפך '1' שלאחריו מחרוזת של  n-1 אפסים. ברור שהמתקיף יכול כעת להבחין בבירור מה פוענח או במילים אחרות  b=b' בהסתברות של '1'. דוגמה זו ממחישה היטב מדוע מודל התקפת מוצפן-נבחר נחשבת למודל המחמיר ביותר. כל מערכת הצפנה שבה המתקיף רשאי לבצע מניפולציה לוגית של סיביות מבלי שהדבר יתקל בחשיפה ודחייה על ידי המערכת, אינה נחשבת לבטוחה תחת מודל התקפת מוצפן-נבחר. למעשה הגדרה זו מקבילה להגדרת החשילות. באופן כללי רעיון החשילות הוא שצופן אינו חשיל אם יריב המנסה לשנות טקסט מוצפן כלשהו נתקל בתוצאה שהיא אחת מהשתיים, טקסט "בלתי חוקי" או טקסט מוצפן כזה שלטקסט הגלוי המתקבל לאחר פענוחו אין קשר סטטיסטי כלשהו לטקסט הגלוי המקורי.
ידוע שהצפנת RSA וכן כל שיטת הצפנה דטרמיניסטית חשופה מעצם טבעה להתקפת מוצפן-נבחר. אף על פי שצופן אל-גמאל והצפנת בלום-גולדווסר מוגדרות כבטוחות סמנטית, זוהי הגדרה חלשה כיוון שניתן לפרוץ אותן בהתקפת CCA. למשל ב-RSA כדי לחלץ את  m=c^{d}{\mbox{ (mod }}n) אפשר להערים על המערכת המצפינה והמפענחת על ידי ניסיון לפענח את  c'\equiv cs^{e}{\mbox{ mod }}n אם התוצאה היא  m' כלשהו קל מאוד לחלץ את  m ממנה פשוט על ידי הכפלה בהופכי הכפלי של  s כי  m\equiv m's^{-1}{\mbox{ (mod }}n).
יתרה מזו כיוון שהוכח שבהצפנת RSA חשיפת הסיבית הנמוכה ביותר שקולה לפענוח המסר כולו. לכן אפשר לבסס את ההתקפה על תשובה פשוטה; אמת או שקר. כלומר האם הפענוח הצליח או נכשל עקב אי תאימות לתקן כגון אם התוצאה אינה בפורמט הנכון או בטווח הערכים המותר על פי התקן. דוגמה טובה להתקפה כזו היא התקפת מוצפן-נבחר של דניאל בלייכבכר ממעבדות בל כנגד PKCS הגרסה הראשונה, שיישם את RSA עם שיטת ריפוד הכוללת שני בתים קבועים ומחרוזת ריפוד רנדומלית המשורשרת למסר לפני ההצפנה. פרוטקול PKCS#1 שהיווה חלק חשוב מ-SSL היה פגיע להתקפה זו שאיפשרה שחזור מפתח השיחה על ידי בחירה מושכלת של  s^{e} ו- 2^{20} ניסיונות פענוח בקירוב.
הלקח החשוב למפתחי חומרת הצפנה שצריך לנקוט משנה זהירות ביישום המערכת באופן שלא תספק מידע כלשהו שיכול להיות מנוצל להתקפה זו. במיוחד במכשירים ניידים או כרטיס חכם שבהם אפשר לבצע אנליזה של כמות גדולה של טקסטים מוצפנים ללא הפרעה. קשה למנוע התקפה כזו לחלוטין אולם ישנן סכימות המשתלבות כחלק ממנגנוני הצפנה ומספקות הגנה אקטיבית מפני התקפות CCA. ביניהן ניתן למנות שיטות הצפנה מאומתת וכן גרסת RSA עם סכמת הריפוד של בלייר ורוגווי שנקראת RSA-OAEP כפי שמובא בתקן PKCS, הצפנת קריימר-שופ ועוד. הרעיון הכללי הוא לאלץ פורמט מסוים של המידע לפני העברתו לפענוח או הצפנה, תוך שימוש במספרים אקראיים המיוצרים באמצעות מחולל קריפטוגרפי ופונקציות גיבוב בטוחות והשילוב שביניהם באופן שמנטרל כמעט לחלוטין את התקפת CCA.
כמו כן אופן הטיפול בשגיאות מחייב משנה זהירות. רצוי לוודא שבתהליך החזרת השגיאה לא ניתן ללמוד מידע מועיל כלשהו על המבנה או המצב הפנימי של המערכת. במיוחד כאשר מתרחשת שגיאה בתחילת פרוצדורה ארוכה, זמן התגובה של התוכנית מתקצר משמעותית ועקב כך מידע מסוים זולג.