קריפטואנליזה דיפרנציאלית

בקריפטואנליזה, קריפטואנליזה דִּיפֵרֶנְצִיָּלִית (באנגלית: Differential cryptanalysis) היא סוג של קריפטואנליזה גנרית המתאימה בעיקר לניתוח צופן בלוקים אך גם צופן זרם ופונקציות גיבוב. באופן תמציתי היא פועלת על ידי ניתוח השפעת דיפרנציאלים של קלט פונקציית הצפנה סימטרית על דיפרנציאלים של הפלט שלה. במקרה של צופן בלוקים קריפטואנליזה דיפרנציאלית מתייחסת לאוסף של טכניקות לגילוי דיפרנציאלים בעלי הסתברות גבוהה המלמדים על התנהגות לא ראנדומלית של הצופן שבהם אפשר להיעזר כדי לנחש את המפתח הסודי. דיפרנציאל בהקשר של קריפטוגרפיה פירושו הפרש או הבדל בין זוג קלטים אפשריים של הצופן בדרך כלל מעל פעולת XOR. 

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



==אטימולוגיה==
המילה "קריפטואנליזה" היא הלחם של המילים קריפטוגרפיה ואנליזה, שפירושה "נִתּוּחַ". המילה דיפרנציאל משמעותה "הֶפְרֵשׁ" או "הֶבְדֵּל".

==היסטוריה==
הראשונים לפרסם את הקריפטואנליזה הדיפרנציאלית היו עדי שמיר ואלי ביהם בסוף שנות ה-80 והיא נחשבת להתקפה הקריפטוגרפית הוותיקה ביותר הידועה. שמיר וביהם פרסמו מספר התקפות קריפטוגרפיות שהשתמשו בשיטה זו ובהן חולשה בפרוטוקול DES ששימש באותה תקופה כתקן ההצפנה של ממשלת ארצות הברית. בשנת 1994, פרסם דון קופרסמית', ממפתחי DES, מאמר בו טען שקריפטואנליזה דיפרנציאלית הייתה ידועה למפתחי DES ב-IBM כבר משנת 1974. לאחר שמדעני IBM גילו את הקריפטואנליזה דיפרנציאלית שנקראה בפיהם בשם הקוד "התקפת דיגדוג" (Tickle Attack), הם עידכנו את אנשי ה-NSA ובעצה אחת החליטו שני הגופים לשמור את דבר קיום השיטה בסוד כדי לשמור על היתרון הטכנולוגי של ארצות-הברית בתחום הקריפטואנליזה.

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

==השיטה==

קריפטואנליזה דיפרנציאלית בגרסה הבסיסית מנצלת את ההסתברות הגבוהה של מופעים מסוימים של דיפרנציאלים בין זוגות בלוקים בפלט הצופן (ליתר דיוק בקלט לסבב האחרון של הצופן) בהינתן דיפרנציאלים של בלוקים גלויים מסוימים בקלט הצופן. המושג דיפרנציאל פירושו שאם למשל נתונה פונקציה <math>F</math> המקבלת קלט <math>X</math> באורך <math>n</math> סיביות; <math>X=[X_1X_2...X_n]</math> ומפיקה פלט <math>Y=[Y_1Y_2...Y_n]</math>. אם נסמן שני קלטים אפשריים לפונקציה ב-<math>X'</math> ו-<math>X</math> בהתאמה וכן הפלטים המתאימים להם ב-<math>Y'</math> ו-<math>Y</math> בהתאמה, כלומר <math>Y'=F(X')</math> וכן <math>Y=F(X)</math>. אז הדיפרנציאל של הקלט (או ההפרש) הוא <math>\Delta X=X'\oplus X</math> כאשר הסימן <math>\oplus</math> מייצג חיבור XOR של וקטורים באורך <math>n</math> סיביות. לכן,
:<math>\Delta X=[\Delta X_1,\Delta X_2,...,\Delta X_n]</math>, כאשר <math>\Delta X_i=X_i'\oplus X_i</math>. 
האיברים <math>X_i'</math> ו-<math>X_i</math> מייצגים את הסיביות במיקום ה-<math>i</math> של <math>X'</math> ו-<math>X</math> בהתאמה. באופן דומה <math>\Delta Y=Y'\oplus Y</math> הוא הדיפרנציאל של הפלט ולכן 
:<math>\Delta Y=[\Delta Y_1,\Delta Y_2,...,\Delta Y_n]</math>, כאשר <math>\Delta Y_i=Y_i'\oplus Y_i</math>. 
בצופן אידיאלי המתנהג באופן אקראי לגמרי, ההסתברות שדיפרנציאל פלט מסוים <math>\Delta Y</math> יופיע בהינתן דיפרנציאל קלט מסוים <math>\Delta X</math> אמורה להיות <math>1/2^n</math> כאשר <math>n</math> מייצג את מספר הסיביות של <math>X</math>. אולם במציאות אין זה כך ולכן הקרפיטואנליזה הדיפרנציאלית מחפשת את המקרים בהם דיפרנציאל פלט מסוים מופיע בשכיחות גבוהה יותר בהינתן דיפרנציאל קלט מסוים. אם ההסתברות הדיפרנציאלית של הצופן שמקובל לסמנה ב-<math>p_D</math> גבוהה באופן משמעותי מ-<math>1/2^n</math> אפשר יהיה באמצעותה לפצח את הצופן. 

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

כדי לבנות מאפיין דיפרנציאלי של צופן שהוא גבוה ככל האפשר, צריך לבחון תחילה את המאפיינים של כל תיבות ההחלפה של הצופן בנפרד ואז לאסוף מספיק נתונים כדי לבנות את הדיפרנציאל של הצופן בכללותו. המתקיף בוחן את דיפרנציאל קלט/פלט של כל תיבת החלפה ומתמקד בעיקר בדיפרנציאלים בעלי הסתברות גבוהה (המופיעים בשכיחות גבוהה יותר מהאחרים באופן משמעותי) ואז משלב יחד את הדיפרנציאלים של תיבות ההחלפה מסבב לסבב כך שדיפרנציאל סיביות פלט שאינן אפס מסבב אחד מתאים לדיפרנציאל סיביות קלט שאינן אפס בסבב הבא. כתוצאה מכך נוצר מצב שסיביות תת-המפתחות המעורבות בהצפנה של זוגות אילו נעלמות מביטויי הדיפרנציאלים. הסיבה לכך נעוצה בפעולת XOR. היות שהמפתח קבוע בכל הזוגות, סיביות המפתחות שמופיעות פעמיים ייעלמו כי XOR של כל ערך בעצמו שווה אפס, למשל אם נתונים <math>x \oplus k</math> וכן <math>y \oplus k</math> אז אם נבצע XOR בין שניהם יתקבל <math>x\oplus y</math> ולא יישאר זכר מ-<math>k</math> כי
:<math>x\oplus k\oplus y\oplus k =x\oplus y\oplus k\oplus k=x\oplus y\oplus 0=x\oplus y</math>.

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

{| class="wikitable"
|-
| קלט || 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || A || B || C || D || E || F
|-
| פלט || E || 4 || D || 1 || 2 || F || B || 8 || 3 || A || 6 || C || 5 || 9 || 0 || 7
|}

טבלה זו מייצגת פונקציה המקבלת קלט באורך 4 סיביות: <math>X=[X_1X_2X_3X_4]</math> ומחזירה פלט באורך 4 סיביות: <math>Y=[Y_1Y_2Y_3Y_4]</math> מתוך <math>2^n=16</math> ערכים אפשריים, לפי הטבלה. לדוגמה אם הקלט הוא <math>1100</math> או בבסיס הקסדצימלי <math>\text{0xC}</math> הפלט צריך להיות <math>0101</math> או <math>\text{0x5}</math>. אפשר לרשום זאת כסדרה של פונקציות: <math>F(\text{0xC})=\text{0x5}</math> או <math>F(\text{0x2})=\text{0xD}</math> וכן הלאה. אם רושמים את כל הדיפרנציאלים של זוגות אפשריים של קלט/פלט לתיבת ההחלפה הזו ההסתברות של <math>\Delta Y</math> בהינתן <math>\Delta X</math> עבור זוג מסוים <math>X',X</math> וכן <math>Y',Y</math> מתקבלת על ידי ספירת כל המופעים שלהם חלקי <math>2^n</math>. היות שהסדר אינו חשוב ויש רק 4 סיביות, במילים אחרות 16 אפשרויות לכן אפשר לרשום את כל 16 הערכים האפשריים של <math>X'</math> ולהגביל את <math>X</math> שיהיה <math>X=X'\oplus \Delta X</math>. ואז לחשב את ערכי <math>\Delta Y</math> עבור כל זוג קלט (<math>X',X=X'\oplus \Delta X</math>) אפשרי. את כל זה אפשר לסכם בטבלה, את הערכים הבינאריים של הקלט <math>X</math>, הפלט <math>Y</math> וכן ערכי <math>\Delta X</math> ו-<math>\Delta Y</math> עבור ערכי <math>X',X</math>. לדוגמה, הטבלה הבאה מכילה חלק מהנתונים הללו עבור תיבת ההחלפה המתוארת. אפשר לראות שאם <math>\Delta X=1011</math> אז <math>\Delta Y=0010</math> מופיע בשמונה מתוך 16 המקרים האפשריים, דהיינו בהסתברות של 8/16. כמו כן אם <math>\Delta X=1000</math> אז <math>\Delta Y=1011</math> בהסתברות של 4/16. כמו כן רואים שבמקרה ש- <math>\Delta X=0100</math> אז <math>\Delta Y=1010</math> לא מופיע אף פעם (הסתברות אפס). אילו תיבת ההחלפה הייתה אידיאלית אז כל הערכים בטבלה היו אמורים להופיע בהסתברות של <math>1/2^n=1/16</math> אולם מסתבר שמצב כזה בלתי אפשרי מבחינה מתמטית, כלומר לא קיימת תיבת החלפה באורך 4 סיביות שהדיפרנציאלים שלה הם <math>1/16</math> עבור כל המופעים.
{| class="wikitable" dir="ltr"
|-
! rowspan="2" | X !! rowspan="2" | Y !! colspan="3" | <math>\Delta Y</math>
|-
| <math>\Delta X</math>=1011 || <math>\Delta X</math>=1000 || <math>\Delta X</math>=0100
|-
| 0000 || 1110 || bgcolor="silver" | 0010 || 1101 || 1100
|-
| 0001 || 0100 || bgcolor="silver" | 0010 || 1110 || 1011
|-
| 0010 || 1101 || 0111 || 0101 || 0110
|-
| 0011 || 0001 || bgcolor="silver" | 0010 || bgcolor="silver" | 1011 || 1001
|-
| 0100 || 0010 || 0101 || 0111 || 1100
|-
| 0101 || 1111 || 1111 || 0110 || 1011
|-
| 0110 || 1011 || bgcolor="silver" | 0010 || bgcolor="silver" | 1011 || 0110
|-
| 0111 || 1000 || 1101 || 1111 || 1001
|-
| 1000 || 0011 || bgcolor="silver" | 0010 || 1101 || 0110
|-
| 1001 || 1010 || 0111 || 1110 || 0011
|-
| 1010 || 0110 || bgcolor="silver" | 0010 || 0101 || 0110
|-
| 1011 || 1100 || bgcolor="silver" | 0010 || bgcolor="silver" | 1011 || 1011
|-
| 1100 || 0101 || 1101 || 0111 || 0110
|-
| 1101 || 1001 || bgcolor="silver" | 0010 || 0110 || 0011
|-
| 1110 || 0000 || 1111 || bgcolor="silver" | 1011 || 0110
|-
| 1111 || 0111 || 0101 || 1111 || 1011
|}

שמאל
את כל המידע האמור מסכמים בטבלת התפלגות דיפרנציאלית שבה השורות מייצגות את <math>\Delta X</math> והעמודות את <math>\Delta Y</math>. להמחשה מובאת טבלת ההתפלגות הדיפרנציאלית של תיבת ההחלפה של DES מהדוגמה לעיל. אפשר לראות שלמעט המקרה יוצא הדופן של <math>\Delta X=0,\Delta Y=0</math> הערך הגבוה ביותר הוא 8 המתאים ל-<math>\Delta X=B</math> ו-<math>\Delta Y=2</math>. לכן ההסתברות של הדיפרנציאל <math>\Delta Y=2</math> בהינתן כל זוג אפשרי של קלט המקיים <math>\Delta X=B</math> היא 8/16. הערך הנמוך ביותר הוא 0 שמתאים לכל המקרים בהם <math>\Delta Y</math> אינו מופיע אף פעם בהינתן <math>\Delta X</math>. סכום כל האיברים בכל שורה בטבלה הוא <math>2^n=16</math> וכן בכל העמודות. כמו כן רואים שכל הערכים זוגיים, הסיבה היא היות שהסדר אינו חשוב לכן הדיפרנציאל של <math>(X',X)</math> שווה לדפירנציאל של <math>(X,X')</math>. כמו כן הערך בפינה הימנית העליונה הוא תמיד <math>2^n=16</math> וכל הערכים האחרים בשורה זו ובעמודה זו הם 0 כנדרש.

{| class="wikitable"
|-
! !! 0 !! 1 !! 2 !! 3 !! 4 !! 5 !! 6 !! 7 !! 8 !! 9 !! A !! B !! C !! D !! E !! F
|-
| 0 || 16 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0
|-
| 1 || 0 || 0 || 0 || 2 || 0 || 0 || 0 || 2 || 0 || 2 || 4 || 0 || 4 || 2 || 0 || 0
|-
| 2 || 0 || 0 || 0 || 2 || 0 || 6 || 2 || 2 || 0 || 2 || 0 || 0 || 0 || 0 || 2 || 0
|-
| 3 || 0 || 0 || 2 || 0 || 2 || 0 || 0 || 0 || 0 || 4 || 2 || 0 || 2 || 0 || 0 || 4
|-
| 4 || 0 || 0 || 0 || 2 || 0 || 0 || 6 || 0 || 0 || 2 || 0 || 4 || 2 || 0 || 0 || 0
|-
| 5 || 0 || 4 || 0 || 0 || 0 || 2 || 2 || 0 || 0 || 0 || 4 || 0 || 2 || 0 || 0 || 2
|-
| 6 || 0 || 0 || 0 || 4 || 0 || 4 || 0 || 0 || 0 || 0 || 0 || 0 || 2 || 2 || 2 || 2
|-
| 7 || 0 || 0 || 2 || 2 || 2 || 0 || 2 || 0 || 0 || 2 || 2 || 0 || 0 || 0 || 0 || 4
|-
| 8 || 0 || 0 || 0 || 0 || 0 || 0 || 2 || 2 || 0 || 0 || 0 || 4 || 0 || 4 || 2 || 2
|-
| 9 || 0 || 2 || 0 || 0 || 2 || 0 || 0 || 4 || 2 || 0 || 2 || 2 || 2 || 0 || 0 || 0
|-
| A || 0 || 2 || 2 || 0 || 0 || 0 || 0 || 0 || 6 || 0 || 0 || 2 || 0 || 0 || 4 || 0
|-
| B || 0 || 0 || bgcolor="silver" |8 || 0 || 0 || 2 || 0 || 2 || 0 || 0 || 0 || 0 || 0 || 2 || 0 || 2
|-
| C || 0 || 2 || 0 || 0 || 2 || 2 || 2 || 0 || 0 || 0 || 0 || 2 || 0 || 6 || 0 || 0
|-
| D || 0 || 4 || 0 || 0 || 0 || 0 || 0 || 4 || 2 || 0 || 2 || 0 || 2 || 0 || 2 || 0
|-
| E || 0 || 0 || 2 || 4 || 2 || 0 || 0 || 0 || 6 || 0 || 0 || 0 || 0 || 0 || 2 || 0
|-
| F || 0 || 2 || 0 || 0 || 6 || 0 || 0 || 0 || 0 || 4 || 0 || 2 || 0 || 0 || 2 || 0
|}

היות שהצופן מכיל בדרך כלל מספר תיבות החלפה שונות וכן מספר סבבים כאשר בכל סבב מופעלות תיבות החלפה אחרות, יש צורך לסכם את הדיפרנציאלים של כל תיבות ההחלפה הפעילות באותה דרך ואז לשלב את הדיפרנצאלים של הזוגות בכולן כדי לקבל את "המאפיין הדיפרנציאלי" של הצופן. כשאומרים תיבת החלפה פעילה מתכוונים לתיבת החלפה שדיפרנציאל הפלט שלה אינו בהסתברות אפס. למרות שמפתח ההצפנה שונה מתיבה לתיבה ומסבב לסבב אפשר להוכיח באופן ישיר שכאשר הדיפרנציאל הוא מעל XOR אין למפתח כל השפעה על דיפרנציאלים של הזוגות, בגלל התכונה המהותית של פעולה זו שהיא הופכית של עצמה ולכן אם ערך מסוים מופיע פעמיים הוא מתבטל. כדי להדגים את חישוב המאפיין הדיפרנציאלי של הצופן נניח למען הפשטות שקיימות 4 תיבות החלפה וישנם ארבעה סבבים בסך הכול וקלט הצופן הוא בלוק באורך 16 סיביות (כל תיבה מקבלת 4 סיביות ממנו). למען הנוחות כל תיבה מסומנת במספר מ-1 עד 4 וכל סבב מסומן בהתאם מ-1 עד 4 לכן התיבה <math>S_{31}</math> פירושה תיבת ההחלפה הראשונה בסבב השלישי של הצופן. נבחן לצורך ההמחשה (כמתואר בתרשים משמאל) את מסלול הדיפרנציאלים של הסיביות במיקומים 5, 7 ו-8 של הקלט במעבר בתיבות המסומנות ב-<math>S_{12},S_{23},S_{32},S_{33}</math> (התיבה השנייה בסבב הראשון, השלישית בסבב השני והתיבות השנייה והשלישית בסבב השלישי) וכן במעבר דרך התמורות הבאות אחריהן. יש לשים לב שהמאפיין הדיפרנציאלי המתקבל כאן הוא של שלושה סבבים בלבד ולא של מלוא ארבעת הסבבים של הצופן. כיוון שאילו תיבות ההחלפה הפעילות היחידות עבור פוזיציות אילו של הקלט, הדיפרנציאל בכל התיבות האחרות יהיה 0. נניח שהדיפרנציאלים של תיבות ההחלפה התקבלו לפי הפירוט הבא:

:<math>S_{12}: \Delta X = B \rightarrow \Delta Y = 2</math> בהסתברות של <math>8/16</math>,
:<math>S_{23}: \Delta X = 4 \rightarrow \Delta Y = 6</math> בהסתברות של <math>6/16</math>,
:<math>S_{32}: \Delta X = 2 \rightarrow \Delta Y = 5</math> בהסתברות של <math>6/16</math>,
:<math>S_{33}: \Delta X = 2 \rightarrow \Delta Y = 5</math> בהסתברות של <math>6/16</math>.

דיפרנציאל הקלט של הצופן הוא הדיפרנציאל של הקלט בסבב הראשון של הצופן לפני הכניסה לתיבת ההחלפה הראשונה. בהסתמך על ניתוח הדיפרנציאלים של תיבת ההחלפה המתוארת מתקבל:
:<math>\Delta P=\Delta U_1=[0000\ 1011\ 0000\ 0000]</math>
שהוא הדיפרנציאל הכי שכיח. <math>U_i</math> מייצג את הקלט של תיבות ההחלפה בסבב ה-<math>i</math>. כמו כן <math>V_i</math> מייצג את הפלט של תיבות ההחלפה בסבב ה-<math>i</math> בהתאמה. לכן <math>\Delta U_i</math> ו-<math>\Delta V_i</math> מייצגים את הדיפרנציאלים שלהם בהתאמה. כתוצאה מכך <math>\Delta V_1=[0000\ 0010\ 0000\ 0000]</math>. אם ממשיכים בסגנון זה בונים את הדיפרנציאלים של כל סבב וסבב כך ש-<math>\Delta V_i=\Delta U_{i-1}</math>. כמובן שיש להביא בחשבון גם את התמורה המבוצעת בכל סבב של רשת ההחלפה תמורה (היות שהתמורה ליניארית היא משפיעה רק על מיקום הסיביות המושפעות). אם בודקים את הדיפרנציאל עבור התיבה <math>S_{12}</math> והתמורה שאחריה מגיעים ל:
:<math>\Delta U_2=[0000\ 0000\ 0100\ 0000]</math>
בהסתברות של <math>8/16</math> או <math>1/2</math> בהינתן <math>\Delta P</math>. בסבב השני הדיפרנציאל עבור התיבה <math>S_{23}</math> הוא
:<math>\Delta V_2=[0000\ 0000\ 0110\ 0000]</math>
ואחרי התמורה של הסבב השני מתקבל:
:<math>\Delta U_3=[0000\ 0010\ 0010\ 0000]</math>
בהסתברות של <math>6/16</math> בהינתן <math>\Delta U_2</math> או בהסתברות של <math>1/2\times 6/16=3/16</math> בהינתן <math>\Delta P</math>. שוב, בהנחה שהדיפרנציאלים בלתי תלוים. באותה דרך אפשר לחשב את הדיפרנציאל עבור הסבב השלישי בתיבות ההחלפה <math>S_{32}</math> ו-<math>S_{33}</math> ולאחר התמורה השלישית ומתקבל:
:<math>\Delta V_3=[0000\ 0101\ 0101\ 0000]</math>
וכן
:<math>\Delta U_4=[0000\ 0110\ 0000\ 0110]</math>
בהסתברות של <math>(6/16)^2</math> בהינתן <math>\Delta U_3</math>. אם מכפילים את כל ההסתברויות מתקבל המאפיין הדיפרנציאלי של הצופן עד נקודה זו, במקרה זה <math>8/16\times 6/16\times (6/16)^2=27/1024</math> (בהינתן <math>\Delta P</math>). וזהו המאפיין הדיפרנציאלי של הצופן לאחר <math>R-1</math> מתוך <math>R</math> סבבים (בדוגמה זו <math>R=4</math>). כשההנחה בכל הדרך היא שהדיפרנציאלים של כל תיבות ההחלפה בכל הסבבים הם בלתי תלויים זה בזה. בשלב זה של ההתקפה על הצופן מצפינים בלוקים רבים שלהם הדיפרנציאל <math>\Delta P=[0000\ 1011\ 0000\ 0000]</math> ואז בהסתברות גבוהה, במקרה זה <math>27/1024</math> המאפיין הדיפרנציאלי יופיע. כל זוג שאיתו מתקבל <math>\Delta P</math> נקרא זוג נכון וכל זוג אחר שבו המאפיין האמור אינו מתקבל נקרא זוג לא נכון.

בשלב הבא של ההתקפה מנסים לנחש את המפתח ששימש להצפנת הנתונים בסבב האחרון של הצופן. הרעיון הוא שבמקום לנסות לנחש את כל סיביות המפתח שזה לא מעשי מנסים לנחש רק את הסיביות שהושפעו מהדיפרנציאלים של פלט תיבות ההחלפה הפעילות של הסבב האחרון הנקראות בקיצור TPS (מפתח יעד חלקי). מפענחים חלקית (רק סבב אחד של הצופן) את זוגות הטקסטים המוצפנים המתאימים לזוגות הגלויים שהוצפנו (עם הדיפרנציאל <math>\Delta P</math>) עבור כל סיביות היעד (TPS) האפשריות ומנהלים מונה עבור כל זוג כזה שמקודם כאשר הדיפרנציאל של הקלט לסבב האחרון קרוב לערך הצפוי (שהוא המאפיין הדיפרנציאלי של הצופן). סיביות היעד של המפתח האחרון אשר מניבות דיפרנציאל גבוה הן בסבירות גבוהה חלק מהמפתח הסודי. היות שההנחה היא שהסיביות הנכונות אמורות להניב דיפרנציאל (של הקלט לסבב האחרון) קרוב מאוד לערך הצפוי. היות שהמאפיין הדיפרנציאלי הוא בעל הסתברות גבוהה, כל זוג ערכים שאינו נכון אמור להניב תוצאה אקראית פחות או יותר ולכן הדיפרנציאל שלה אמור להיות נמוך מאוד. המאפיין הדיפרנציאלי נקרא גם מבחין, כי בעזרתו ניתן להבחין אם נבחר זוג נכון או לא ובכך מתאפשר להבחין אם ניחוש סיביות המפתח הצליח. כי בניחוש נכון יתקבל דיפרנציאל בעל הסתברות גבוהה שהיא קרובה מאוד למאפיין הדיפרנציאלי של הצופן עד נקודה זו ואילו אם הניחוש אינו נכון יתקבל דיפרנציאל בעל הסתברות מאוד נמוכה.

בנוסף אפשר לייעל את ההתקפה אם לא כל תיבות ההחלפה משפיעות על הקלט. למשל בדוגמה המובאת רק שתי תיבות משפיעות על הנתונים של הצופן בסבב השלישי, לכן, היות שהדיפרנציאל של הקלט לסבב האחרון עבור זוג נכון הוא אפס בשתי התיבות האחרות (הלא פעילות), אפשר לפשוט להתעלם מכל הזוגות שבהן לא מופיעים אפסים בדיפרנציאל המתאים לפוזיציות בתיבות אילו. בדוגמה המובאת אפשר לפצח את הצופן בעזרת התהליך המתואר על ידי 5000 זוגות של קלט/פלט נבחרים, דהיינו 10000 הצפנות עם זוגות קלט שהדיפרנציאל שלהם הוא <math>\Delta P=[0000\ 1011\ 0000\ 0000]</math>. וסיביות היעד הנכונות הן במקרה זה <math>[K_{5,5}...K_{5,8}, K_{5,13}...K_{5,16}]=[0010,0100]=[\text{0x2},\text{0x4}]</math>. בדוגמה זו המאפיין הדיפרנציאלי של הצופן הוא <math>27/1024=0.0264</math> ובניסוי ותהיה התגלה שסיביות היעד הנכונות הניבו תוצאה של <math>0.0244</math> שזה די קרוב.

===יעילות===
קשה להעריך בדיוק את סיבוכיות ההתקפה המתוארת. בעיקרון ככל שההסתברות הדיפרנציאלית של תיבות ההחלפה הפעילות גבוהה יותר וככל שיש פחות תיבות החלפה פעילות כך המאפיין הדיפרנציאלי של הצופן יהיה גבוה יותר בהתאם. באופן כללי מספר זוגות הטקסטים הגלויים שצריך לבחור כדי להגיע ליכולת להבחין בין זוגות נכונים לזוגות לא נכונים הוא:
:<math>N_D\approx c / p_D</math>.
כאשר <math>p_D</math> הוא המאפיין הדיפרנציאלי של הצופן אחרי <math>R-1</math> סבבים ו-<math>c</math> הוא קבוע קטן. בהנחה שהדיפרנציאלים של תיבות ההחלפה בלתי תלויים זה בזה, הסתברות המאפיין הדיפרנציאלי של הצופן נתונה על ידי:
:<math>p_D=\prod_{i=1}^\gamma \beta_i</math>
<math>\gamma</math> מייצג את מספר התיבות הפעילות והסתברות הדיפרנציאל של זוג מסוים בתיבה הפעילה ה-<math>i</math> מיוצגת על ידי <math>\beta_i</math>. הביטוי האחרון מעיד על כך שמספר מועט של מופעים של זוגות נכונים מספיק כדי לתת מונה גבוה של סיביות יעד וכן מונה זה גבוה הרבה יותר מהמונה עבור זוגות לא נכונים. זוג נכון אמור להופיע בהסתברות של <math>1/p_D</math> זוגות. לכן בפועל מספיקה כפולה קטנה של <math>1/p_D</math> כדי להצליח בהתקפה הדיפרנציאלית על הצופן.

==וריאציות==
מאז המצאת הקריפטואנליזה הדפירנציאלית הראשונה על ידי ביהם ושמיר, פותחו מספר וריאציות והרחבות שלה. ב-1993 הציע אלי ביהם קריפטואנליזה דיפרנציאלית חדשה המבוססת על מפתחות קשורים. כלומר התקפה שמניחה כי קיים בין מספר מפתחות הצפנה קשר או יחס כלשהו. ב-1994 המציא לארס קנודסן את הדיפרנציאלים החתוכים וכן דיפרנציאלים מסדר גבוה. קנודסן ודויד וגנר המציאו את הקריפטואנליזה האינטגרלית וב-1998 פיתחו ביהם, אלקס בריוקוב ושמיר את קריפטואנליזה של דיפרנציאלים בלתי אפשריים. ב-1999 פיתחו וגנר וקנודסן את התקפת בומרנג ששונתה ב-2001 על ידי ביהם, נתן קלר ואור דונקלמן להתקפת מלבן. התקפות מפתחות קשורים המנצלות חולשות בתהליך הכנת המפתח ניתנות לשילוב עם סוגים אחרים של התקפות דיפרנציאליות. להלן רשימה של התקפות דיפרנציאליות ידועות:
* קריפטואנליזה של דיפרנציאלים חתוכים. בהתקפה זו בדומה לקריפטואנליזה דיפרנציאלית רגילה משווים את ההסתברות של דיפרנציאלים של קלט/פלט אך בניגוד אליה רק של חלק מהדיפרנציאל נבדק.
*קריפטואנליזת דיפרנציאלים בלתי אפשריים. בשיטה זו מתמקדים בדיפרנציאלים שלא מופיעים בכלל. כלומר בתהליך ניפוי שוללים את כל המפתחות האפשריים אם הם מניבים בהצפנת טקסט מסוים דיפרנציאלים שלא אמורים להופיע לפי התחזיות.
*קריפטואנליזה אינטגרלית (או התקפת ריבוע). זוהי סוג של התקפה דיפרנציאלית שמתאימה במיוחד לצופן בלוקים שהוא פונקציה חד-חד-ערכית ועל כמו AES והיא פועלת על זוגות קלט פלט שחלק מהם קבוע וחלק משתנה.
*קריפטואנליזה דיפרנציאלית מסדר גבוה. זוהי קריפטואנליזה הישימה נגד צפנים שניתנים לביטוי על ידי פונקציות בוליאניות עם משתנים מרובים.
*התקפת בומברנג (התקפת מלבן). התקפה זו קוראת תיגר על ההנחה שאם הצופן אינו מכיל דיפרנציאלים גבוהים מאוד או נמוכים מאוד הוא נחשב בטוח. ההתקפה מתייחסת אל הצופן כאל שני צפנים המחוברים בקסקדה (כמו הצפנה מרובה) ומחפשת דיפרנציאלים בהסתברות גבוהה של שני תתי-הצפנים ואז מנסה לאחד בין שני הדיפרנציאלים במבנה כלשהו. בגרסה המשופרת של ההתקפה הנקראת התקפת מלבן מנסים לאחד בין מספר דיפרנציאלים בכל תת-צופן.
*התקפת מפתחות קשורים. קריפטואנליזה שבה באפשרות המתקיף לבדוק את התנהגות הצופן בהינתן מספר מפתחות שונים שאינם ידועים לו, אך יש ביניהם קשר מתמטי כלשהו.

==עמידות של צפנים==
קריפטואנליזה דיפרנציאלית הייתה ידועה למדעני IBM בעת פיתוח צופן ה-DES ועמידות בפני השיטה הייתה אחת ממטרות התכנון של האלגוריתם. משום כך, צופן זה עמיד באופן יחסי בפני התקפת זו. למרות זאת, באמצעות שימוש בקריפטואנליזה דיפרנציאלית ניתן להפחית את טווח המפתחות לחיפוש מ-<math>2^{55}</math> ל-<math>2^{47}</math>. הרחבה של הצופן DES-X מגדילה את מספר הפעולות הדרוש ל-<math>2^{61}</math>. AES וצפנים מודרניים שפורסמו לאחר פרסום השיטה נדרשו להוכיח עמידות בפני השיטה.

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

==ראו גם==
*קריפטואנליזה ליניארית

==לקריאה נוספת==
<div class="mw-content-ltr">
* Eli Biham, Adi Shamir, Differential Cryptanalysis of the Data Encryption Standard, Springer Verlag, 1993. , .
* Eli Biham, Adi Shamir,"[https://web.archive.org/web/20050405183302/http://www.cs.technion.ac.il/users/wwwb/cgi-bin/tr-get.cgi/1991/CS/CS0708.ps Differential Cryptanalysis of the Full 16-Round DES]", Proceedings of CRYPTO '92, Volume 740 of Lecture Notes in Computer Science, December 1991.
</div>

==הערות שוליים==

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