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

בקריפטואנליזה, קריפטואנליזה לִינֵאָרִית (באנגלית: Linear cryptanalysis) היא צורה כללית של קריפטואנליזה המבוססת על ניתוח קירובים ליניאריים ואפיניים הכוללים שילוב סיביות מקלט פונקציית הצפנה סימטרית, מהפלט שלה וממפתח ההצפנה. קריפטואנליזה ליניארית פועלת בדרך כלל לפי מודל התקפת גלוי-ידוע שהיא מודל התקפה שבו מניחים שליריב או מנתח הצופן גישה למספר מוגבל של זוגות קלט/פלט, שהם בהקשר של צופן בלוקים, מספר רב של בלוקים של טקסט-קריא ובלוקים של טקסט-מוצפן המתאימים להם שהוצפנו עם אותו מפתח סודי ועם מידע זה הוא מנסה לפצח את הצופן. אך בניגוד להתקפת גלוי-נבחר, למתקיף אין שליטה על תוכן הנתונים שהשיג. הקריפטואנליזה הליניארית מיוחסת למיצורו מצואי, שפרסם אותה לראשונה ב-1992 יחד עם ימאגישי לפיצוח הצופן FEAL וכן נוסתה נגד צופן DES והייתה להתקפה הפומבית הראשונה על הצופן, אך היא דורשת מספר עצום של בלוקים ידועים ( 2 43 {\displaystyle 2^{43}} זוגות במקרה של DES). קריפטואנליזה ליניארית מתאימה במיוחד נגד צופן בלוקים ואף נגד צופן זרם. ההתקפה הליניארית יחד עם הדיפרנציאלית הן שתי ההתקפות הקריפטוגרפיות המפורסמות והמוצלחות ביותר נגד צפני בלוקים מודרניים והביאו לשבירתם המוחלטת של לא מעט צפנים. כיום ההתקפה הליניארית משמשת כאבן בוחן וכלי שימושי לבדיקת ביטחון כל צופן בלוקים מודרני. כיום מצפים מכל צופן שיוכיח עמידות נגד התקפה זו אפילו אם היא תאורטית ביסודה אם היא יעילה מכוח גס באופן ניכר. למרות האמור, למרבה ההפתעה אפילו לאחר שנים של קריפטואנליזה, ההתקפה הליניארית נגד צופן DES התגלתה כלא יעילה במיוחד באופן מעשי. ועד היום DES שרד את שתי ההתקפות המתוארות, הליניארית והדיפרנציאלית כאחד. במשך השנים פותחו מספר וריאציות של הקריפטואנליזה הליניארית ביניהן: קריפטואנליזת קירובים ליניאריים מרובים. קריפטואנליזת מתאם אפס. קריפטואנליזת חציצה (Partitioning). הקריפטואנליזה הליניארית מנסה לנצל קיום מופעים בהסתברות גבוהה של משוואות ליניאריות המערבות סיביות מבלוק הקלט, בלוק הפלט (ליתר דיוק מפלט הסבב האחד לפני אחרון של הצופן) ומפתח ההצפנה. הרעיון הבסיסי הוא לבצע קירוב של חלק מפעולת הצופן עם משוואה ליניארית מעל חיבור XOR (חיבור מודולו 2). משוואה ליניארית כזו יכולה להיות למשל: X i 1 ⊕ X i 2 ⊕ . . . ⊕ X i u ⊕ Y j 1 ⊕ Y j 2 ⊕ . . . ⊕ Y j v = 0 {\displaystyle {\boldsymbol {X_{i_{1}}\oplus X_{i_{2}}\oplus ...\oplus X_{i_{u}}\oplus Y_{j_{1}}\oplus Y_{j_{2}}\oplus ...\oplus Y_{j_{v}}=0}}} כאשר X i {\displaystyle X_{i}} מייצג את הסיבית במיקום ה- i {\displaystyle i} של בלוק הקלט X = [ X 1 , X 2 , . . . , X n ] {\displaystyle X=[X_{1},X_{2},...,X_{n}]} המכיל n {\displaystyle n} סיביות וכן Y j {\displaystyle Y_{j}} מייצג את הסיבית במיקום ה- j {\displaystyle j} של בלוק הפלט Y = [ Y 1 , Y 2 , . . . , Y n ] {\displaystyle Y=[Y_{1},Y_{2},...,Y_{n}]} . המשוואה המתוארת מחברת תת-קבוצה באורך u {\displaystyle u} סיביות של X {\displaystyle X} עם תת-קבוצה באורך v {\displaystyle v} סיביות של Y {\displaystyle Y} . המטרה היא למצוא סיביות קלט/פלט שמקיימות את המשוואה האמורה בהסתברות גבוהה באופן משמעותי או בהסתברות נמוכה באופן משמעותי. באופן כללי אסור שלינאריות כזו תתרחש בצופן, אחרת הוא יהיה חלש מאוד כי היא הוכחה לכך שהצופן מכיל אקראיות ירודה. באופן אידיאלי אם ננסה להזין v + u {\displaystyle v+u} סיביות קלט/פלט שונות במשוואה המתוארת ההסתברות שהמשוואה תתקיים צריכה להיות 1 / 2 {\displaystyle 1/2} . ככל שהסטייה או הנטאי בתוצאות גדולה מחצי כך קל יותר למנתח הצופן לשבור אותו. ההטיה בהקשר זה נקראת הטיה ליניארית הסתברותית אותה מסמנים ב- p L {\displaystyle p_{L}} . ככל ששיעור ההטיה ההסתברותית | p L − 1 / 2 | {\displaystyle |p_{L}-1/2|} גדלה משמעותית כך קל יותר ליישם את ההתקפה הליניארית על הצופן. ישנן מגוון דרכים לביצוע הקריפטואנליזה הליניארית. לצורך התיאור כאן נתייחס למה שמיצורו מצואי מכנה במאמר שלו אלגוריתם 1. למרות שבמשוואה הליניארית לעיל לא מופיעות סיביות ממפתח ההצפנה המותקף, האגף הימני במשוואה "0" כולל באופן עקיף סיביות מהמפתח שמיקומן ידוע אך לא ערכן. אם סכום הסיביות מהמפתח המשתתפות במשוואה הוא אפס, ההטיה תהיה עם סימן (פלוס או מינוס) זהה אילו המשוואה כללה סיביות מהמפתח (אם ההסתברות p L {\displaystyle p_{L}} התקבלה). אם p L = 1 {\displaystyle p_{L}=1} פירושו של דבר שהמשוואה המתוארת מייצגת את התנהגות הצופן בשלמות ולכן הצופן כנראה מכיל פגם חמור. אם p L = 0 {\displaystyle p_{L}=0} פירושו של דבר שהמשוואה המתוארת מייצגת פונקציה אפינית של הצופן, שגם זו אינדיקציה לתקלה חמורה. במקרה של XOR פונקציה אפינית היא בעצם המשלים של הפונקציה הליניארית, כך שבשני המקרים הצופן יהיה חשוף להתקפה ליניארית. לצורך המחשת הקריפטואנליזה הליניארית, נניח שנתון צופן בלוקים פשוט המורכב מרשת החלפה-תמורה. הוא מקבל בלוק קלט באורך 16 סיבות (שני בתים), מעבד את הבלוק על ידי חזרה ארבע פעמים על פונקציה פנימית הכוללת בדומה ל-AES, שלוש שכבות; החלפה, תמורה וערבוב מפתח, כמתואר בתרשים משמאל. למרות שהצופן פשוט והוא מובא כאן להמחשה בלבד, ההתקפה הליניארית על צופן זה מספקת תובנה די טובה לגבי פעולתה נגד צפנים מודרניים מורכבים יותר. לצורך הדיון נניח ששלב ההחלפה בצופן הצעצוע האמור כולל ארבע תיבות החלפה המקבלות 4 סיביות ומחזירות 4 סיביות. כל תיבת החלפה אפשר ליישם באמצעות טבלה פשוטה המכילה 16 ערכים באורך 4 סיביות כל אחד. הערך המוחזר הוא בעצם תוכן הכניסה שהקלט מייצג את מספרה. ברוב הצפנים קיימות מספר טבלאות, לצורך הפשטות נניח שקיימת רק תיבה אחת כזו שבה משתמשים ארבע פעמים בכל סבב. להלן הטבלה הלקוחה מצופן DES בייצוג הקסדצימלי: לצורך שלב הטרנספוזיציה (תמורה) נתונה הטבלה הבאה. פעולת הטרנספוזיציה ניתנת לתיאור באופן הבא: הפלט בפוזיציה ה- i {\displaystyle i} של תיבת ההחלפה j {\displaystyle j} מנותב לכניסה ה- j {\displaystyle j} של תיבת ההחלפה ה- i {\displaystyle i} (בסבב הבא). ראוי לציין שאין טעם בטרנספוזיציה בסבב האחרון של הצופן כי היא ניתנת להפיכה בקלות. שכבת חיבור המפתח מבצעת חיבור XOR של כל סיביות הפלט עם חלק מהמפתח הסודי הנקרא תת-מפתח. חיבור המפתח בסיום הסבב האחרון מבטיח שלא יהיה אפשרי להתעלם מהסבב האחרון כשמנתחים את הצופן. לצורך הפשטות נניח שתת-המפתחות עבור ארבעת הסבבים הוכנו בנפרד זה מזה. פענוח הוא פשוט חזרה לאחור צעד אחרי צעד במבנה זהה להצפנה, רק יש צורך לוודא שתיבות ההחלפה הן פונקציה חד-חד-ערכית ועל ועל כן הן הפיכות וכן צריך להשתמש במפתחות בסדר הפוך. מציאת משוואה ליניארית של הצופן מסתמכת על צירוף משוואות ליניאריות של חלקים שונים של הצופן למשוואה ליניארית אחת. החלק הקשה הוא למצוא ולצרף משוואות ליניאריות מתאימות. לצורך ההדגמה נתייחס לצופן הצעצוע המתואר לעיל. אם נתונים שני משתנים מקריים X 1 {\displaystyle X_{1}} ו- X 2 {\displaystyle X_{2}} , אז X 1 ⊕ X 2 = 0 {\displaystyle X_{1}\oplus X_{2}=0} הוא ביטוי ליניארי השקול ל- X 1 = X 2 {\displaystyle X_{1}=X_{2}} . אם X 1 ⊕ X 2 = 1 {\displaystyle X_{1}\oplus X_{2}=1} זהו ביטוי אפיני השקול ל- X 1 ≠ X 2 {\displaystyle X_{1}\neq X_{2}} . נניח שההתפלגות הסטטיסטית נתונה על ידי: Pr [ X 1 = i ] = { p 1 , i = 0 1 − p 1 , i = 1 {\displaystyle \Pr[X_{1}=i]={\begin{cases}p_{1},&i=0\\1-p_{1},&i=1\end{cases}}} וכן Pr [ X 2 = i ] = { p 2 , i = 0 1 − p 2 , i = 1 {\displaystyle \Pr[X_{2}=i]={\begin{cases}p_{2},&i=0\\1-p_{2},&i=1\end{cases}}} אם שני המשתנים המקריים בלתי תלויים אפשר לשלב את שניהם ביחד: Pr [ X 1 = i , X 2 = j ] = { p 1 p 2 , i = 0 , j = 0 p 1 ( 1 − p 2 ) , i = 0 , j = 1 ( 1 − p 1 ) p 2 , i = 1 , j = 0 ( 1 − p 1 ) ( 1 − p 2 ) , i = 1 , j = 1 {\displaystyle \Pr[X_{1}=i,X_{2}=j]={\begin{cases}p_{1}p_{2},&i=0,j=0\\p_{1}(1-p_{2}),&i=0,j=1\\(1-p_{1})p_{2},&i=1,j=0\\(1-p_{1})(1-p_{2}),&i=1,j=1\end{cases}}} וכן אפשר להוכיח ש- דרך אחרת להציג זאת, יהיו p 1 = 1 / 2 + ε 1 {\displaystyle p_{1}=1/2+\varepsilon _{1}} וכן p 2 = 1 / 2 + ε 2 {\displaystyle p_{2}=1/2+\varepsilon _{2}} כאשר ε 1 {\displaystyle \varepsilon _{1}} ו- ε 2 {\displaystyle \varepsilon _{2}} הן שיעור ההטיה ההסתברותיות מחצי כך שמתקיים 1 / 2 ≤ ε 1 {\displaystyle 1/2\leq \varepsilon _{1}} וכן ε 2 ≤ + 1 / 2 {\displaystyle \varepsilon _{2}\leq +1/2} . מזה נובע ש- Pr [ X 1 ⊕ X 2 = 0 ] = 1 / 2 + 2 ε 1 ε 2 {\displaystyle \Pr[X_{1}\oplus X_{2}=0]=1/2+2\varepsilon _{1}\varepsilon _{2}} . ההטיה של X 1 ⊕ X 2 = 0 {\displaystyle X_{1}\oplus X_{2}=0} היא ε 1 , 2 = 2 ε 1 ε 2 {\displaystyle \varepsilon _{1,2}=2\varepsilon _{1}\varepsilon _{2}} . אפשר להרחיב את האמור ליותר משתנים מקריים X 1 {\displaystyle X_{1}} עד X n {\displaystyle X_{n}} עם ההסתברויות p 1 = 1 / 2 + ε 1 {\displaystyle p_{1}=1/2+\varepsilon _{1}} עד p n = 1 / 2 + ε n {\displaystyle p_{n}=1/2+\varepsilon _{n}} . ההסתברות ש- X 1 ⊕ X 2 ⊕ . . . ⊕ X n = 0 {\displaystyle X_{1}\oplus X_{2}\oplus ...\oplus X_{n}=0} תתקיים ניתנת לחישוב באמצעות למת הערמה (Piling-Up Lemma) של מיצורו מצואי, בהנחה שכל המשתנים בלתי תלויים: נתונים n {\displaystyle n} משתנים מקריים בלתי תלויים: X 1 , X 2 , . . . , X n {\displaystyle X_{1},X_{2},...,X_{n}} מתקיים Pr [ X 1 ⊕ X 2 ⊕ . . . ⊕ X n = 0 ] = 1 / 2 + 2 n − 1 ∏ i = 1 n ε i {\displaystyle \Pr[X_{1}\oplus X_{2}\oplus ...\oplus X_{n}=0]=1/2+2^{n-1}\prod _{i=1}^{n}\varepsilon _{i}} . או לחלופין ε 1 , 2 , . . . , n = 2 n − 1 ∏ i = 1 n ε i {\displaystyle \varepsilon _{1,2,...,n}=2^{n-1}\prod _{i=1}^{n}\varepsilon _{i}} כאשר ε 1 , 2 , . . . , n {\displaystyle \varepsilon _{1,2,...,n}} מייצג את ההטיה של X 1 ⊕ X 2 ⊕ . . . ⊕ X n = 0 {\displaystyle X_{1}\oplus X_{2}\oplus ...\oplus X_{n}=0} . יש לשים לב שאם p i = 0 {\displaystyle p_{i}=0} או p i = 1 {\displaystyle p_{i}=1} אז Pr [ X 1 ⊕ X 2 ⊕ . . . ⊕ X n = 0 ] = 0 {\displaystyle \Pr[X_{1}\oplus X_{2}\oplus ...\oplus X_{n}=0]=0} או 1 בהתאם. אם רק p i {\displaystyle p_{i}} אחד שווה חצי אז Pr [ X 1 ⊕ X 2 ⊕ . . . ⊕ X n = 0 ] = 1 / 2 {\displaystyle \Pr[X_{1}\oplus X_{2}\oplus ...\oplus X_{n}=0]=1/2} . כאשר מרכיבים משוואה ליניארית של הצופן המשתנים X i {\displaystyle X_{i}} הם בעצם קירוב ליניארי של תיבות ההחלפה. למשל, אם נתונים ארבעה משתנים מקריים X 1 , X 2 , X 3 {\displaystyle X_{1},X_{2},X_{3}} ו- X 4 {\displaystyle X_{4}} ויהיו Pr [ X 1 ⊕ X 2 = 0 ] − 1 / 2 + ε 1 , 2 {\displaystyle \Pr[X_{1}\oplus X_{2}=0]-1/2+\varepsilon _{1,2}} וכן Pr [ X 2 ⊕ X 3 = 0 ] = 1 / 2 + ε 2 , 3 {\displaystyle \Pr[X_{2}\oplus X_{3}=0]=1/2+\varepsilon _{2,3}} , הסכום X 1 ⊕ X 3 {\displaystyle X_{1}\oplus X_{3}} המתקבל על ידי חיבור X 1 ⊕ X 2 {\displaystyle X_{1}\oplus X_{2}} עם X 2 ⊕ X 3 {\displaystyle X_{2}\oplus X_{3}} אז מתקיים: Pr [ X 1 ⊕ X 3 = 0 ] = Pr [ ( X 1 ⊕ X 2 ) ⊕ ( X 2 ⊕ X 3 ) = 0 ] {\displaystyle \Pr[X_{1}\oplus X_{3}=0]=\Pr[(X_{1}\oplus X_{2})\oplus (X_{2}\oplus X_{3})=0]} . בדרך זו אפשר לשלב משוואות ליניאריות כדי לקבל משוואה ליניארית חדשה, ואם מניחים שהמשתנים בלתי תלויים אז אפשר להשתמש בלמת הערמה באופן הזה: Pr [ X 1 ⊕ X 3 = 0 ] = 1 / 2 + 2 ε 1 , 2 ε 2 , 3 {\displaystyle \Pr[X_{1}\oplus X_{3}=0]=1/2+2\varepsilon _{1,2}\varepsilon _{2,3}} כתוצאה מכך ε 1 , 3 = 2 ε 1 , 2 ε 2 , 3 {\displaystyle \varepsilon _{1,3}=2\varepsilon _{1,2}\varepsilon _{2,3}} . אפשר לראות שהביטויים X 1 ⊕ X 2 = 0 {\displaystyle X_{1}\oplus X_{2}=0} וכן X 2 ⊕ X 3 = 0 {\displaystyle X_{2}\oplus X_{3}=0} מקבילים לקירובים הליניאריים של שתי תיבות ההחלפה בהתאמה ואילו X 1 ⊕ X 3 = 0 {\displaystyle X_{1}\oplus X_{3}=0} מקביל לקירוב הליניארי של שתיהן יחד. כמובן שבניתוח אמיתי של הצופן מעורבים יותר תיבות החלפה ויותר משתנים מקריים בהתאם. במרבית הצפנים כמו DES ו-AES, כל הפעולות למעט תיבות ההחלפה הן פעולות ליניאריות ולכן מספיק לייצג את פעולות תיבות ההחלפה כמשוואה ליניארית כדי לפצח את הצופן. בהינתן תיבת החלפה כמו בדוגמה לעיל, המקבלת 4 סיביות X = [ X 1 X 2 X 3 X 4 ] {\displaystyle X=[X_{1}X_{2}X_{3}X_{4}]} ומחזירה ארבע סיביות Y = [ Y 1 Y 2 Y 3 Y 4 ] {\displaystyle Y=[Y_{1}Y_{2}Y_{3}Y_{4}]} . קל יותר לגלות קירובים ליניאריים על ידי חישוב ההטיה של כל תיבה בנפרד. למשל אם לוקחים את הביטוי X 2 ⊕ X 3 ⊕ Y 1 ⊕ Y 3 ⊕ Y 4 = 0 {\displaystyle X_{2}\oplus X_{3}\oplus Y_{1}\oplus Y_{3}\oplus Y_{4}=0} או לחלופין X 2 ⊕ X 3 = Y 1 ⊕ Y 3 ⊕ Y 4 {\displaystyle X_{2}\oplus X_{3}=Y_{1}\oplus Y_{3}\oplus Y_{4}} , מנסים את כל 16 האפשרויות של X {\displaystyle X} ובודקים את התוצאות Y {\displaystyle Y} המתקבלות מתיבת ההחלפה, מגלים שב-12 מתוך 16 המקרים המשוואה האמורה מתקיימת, כלומר בהסתברות של 12 / 16 − 1 / 2 = 1 / 4 {\displaystyle 12/16-1/2=1/4} . דוגמה אחרת, עם הביטוי X 1 ⊕ X 4 = Y 2 {\displaystyle X_{1}\oplus X_{4}=Y_{2}} מתקבלת הטיה של אפס וכן עם המשוואה X 3 ⊕ X 4 = Y 1 ⊕ Y 4 {\displaystyle X_{3}\oplus X_{4}=Y_{1}\oplus Y_{4}} ההסתברות היא 2 / 16 − 1 / 2 = − 3 / 8 {\displaystyle 2/16-1/2=-3/8} שזהו קירוב אפיני (בגלל סימן המינוס). היות שההתקפה הליניארית מסתמכת על שיעור ההטיה אין חשיבות לסימן וההתקפה תצליח במידה שווה במקרה של קירוב ליניארי או אפיני (מלמעלה או מלמטה). את כל 16 האפשרויות של הצירופים הליניאריים של כל המשוואות האפשריות, אפשר לסכם בטבלה. על בסיס טבלה הזו מגלים את כל הקירובים הליניאריים/אפיניים של תיבת ההחלפה ומסכמים אותם בטבלה אחרת הנקראת טבלת קירוב ליניארי, לדוגמה כך נראית הטבלה עבור תיבת ההחלפה שנבחרה לצורך הדוגמה: כל כניסה בטבלה מייצגת בבסיס הקסדצימלי, את מספר הפעמים שנמצאה התאמה בין המשוואה הליניארית של קלט תיבת ההחלפה לבין סכום סיביות הפלט שלה פחות 8. לכן אם מחלקים את הערך בכניסה כלשהי ב-16 מתקבלת ההטיה ההסתברותית של הצירוף הליניארי המתאים. הערך של אינדקס כל כניסה מגדיר את המשתנים המקריים הנכללים במשוואה בצורה של צירוף ליניארי מהצורה a 1 ⋅ X 1 ⊕ a 2 ⋅ X 2 ⊕ a 3 ⋅ X 3 ⊕ a 4 ⋅ X 4 {\displaystyle a_{1}\cdot X_{1}\oplus a_{2}\cdot X_{2}\oplus a_{3}\cdot X_{3}\oplus a_{4}\cdot X_{4}} כאשר a i ∈ { 0 , 1 } {\displaystyle a_{i}\in \{0,1\}} והסימן ⋅ {\displaystyle \cdot } מייצגת פעולת AND. לכן הערך בבסיס הקסדצימלי הוא a 1 a 2 a 3 a 4 {\displaystyle a_{1}a_{2}a_{3}a_{4}} כאשר a 1 {\displaystyle a_{1}} הוא הסיבית המשמעותית ביותר. מזה אפשר לראות שההטיה של המשוואה הליניארית X 3 ⊕ X 4 = Y 1 ⊕ Y 4 {\displaystyle X_{3}\oplus X_{4}=Y_{1}\oplus Y_{4}} (בשורה הרביעית בעמודה העשירית) היא − 6 / 16 = − 3 / 8 {\displaystyle -6/16=-3/8} וההסתברות שהמשוואה הליניארית תתקיים היא 1 / 2 − 3 / 8 = 1 / 8 {\displaystyle 1/2-3/8=1/8} . מהתבוננות בטבלה אפשר לשים לב שההסתברות שכל סכום של סיביות פלט שווה לערך שאין בו סיביות מהקלט הוא בדיוק חצי, זאת בגלל שתיבת ההחלפה היא פונקציה חד ערכית ועל וכל צירוף ליניארי מחייב שיהיה מספר שווה של סיביות אפס ואחד. באותה מידה ההסתברות של כל צירוף ליניארי שאין בו סיביות פלט היא בדיוק + 1 / 2 {\displaystyle +1/2} (בטבלה היא + 8 {\displaystyle +8} ), לכן השורה העליונה בטבלה כולה מאופסת למעט בכניסה השמאלית ביותר וכן לגבי העמודה הראשונה. בהינתן הקירובים הלנאריים של כל תיבות ההחלפה של הצופן, קיים מספיק מידע כדי לחשב את הקירוב הליניארי של הצופן בשלמותו. את זה אפשר לבצע על ידי צירוף מספר קירובים מתאימים מתיבות ההחלפה. עם מידע זה אפשר לחלץ סיביות מהמפתח הסודי ששימש בסבב האחרון של הצופן. לדוגמה, בתרשים משמאל מתואר קירוב לנארי של צופן הצעצוע להמחשה בתיבות S 12 , S 22 , S 32 {\displaystyle S_{12},S_{22},S_{32}} ו- S 34 {\displaystyle S_{34}} כאשר הספרה הראשונה באינדקס התיבה מציינת את מספר הסבב ואילו השנייה את מספר התיבה (שזה התיבה השנייה בסבב הראשון, השנייה בסבב השני והתיבות השנייה והרביעית בסבב השלישי). יש לשים לב שהקירוב האמור אינו כולל את כל הצופן אלא רק שלושה סבבים ממנו, זה כל מה שדרוש להתקפה. לאחר בחינה של התרשים וטבלת הקירובים, מתקבלים הקירובים הבאים: S 12 : X 1 ⊕ X 3 ⊕ X 4 = Y 2 {\displaystyle S_{12}:X_{1}\oplus X_{3}\oplus X_{4}=Y_{2}} בהסתברות 12 / 16 {\displaystyle 12/16} והטיה + 1 / 4 {\displaystyle +1/4} S 22 : X 2 = Y 2 ⊕ Y 4 {\displaystyle S_{22}:X_{2}=Y_{2}\oplus Y_{4}} בהסתברות 4 / 16 {\displaystyle 4/16} והטיה − 1 / 4 {\displaystyle -1/4} S 32 : X 2 = Y 2 ⊕ Y 4 {\displaystyle S_{32}:X_{2}=Y_{2}\oplus Y_{4}} בהסתברות 4 / 16 {\displaystyle 4/16} והטיה − 1 / 4 {\displaystyle -1/4} : S 34 : X 2 = Y 2 ⊕ Y 4 {\displaystyle :S_{34}:X_{2}=Y_{2}\oplus Y_{4}} בהסתברות 4 / 16 {\displaystyle 4/16} והטיה − 1 / 4 {\displaystyle -1/4} יהיו U i {\displaystyle U_{i}} ו- V i {\displaystyle V_{i}} בלוק הקלט ובלוק הפלט בהתאמה של תיבות ההחלפה של הצופן בסבב ה- i {\displaystyle i} . וכן U i j {\displaystyle U_{ij}} ו- V i j {\displaystyle V_{ij}} הסיבית ה- j {\displaystyle j} של בלוק הקלט או הפלט בהתאמה, בסבב ה- i {\displaystyle i} . באותו אופן K i {\displaystyle K_{i}} מייצג את המפתח המחובר ב-XOR עם בלוק הנתונים בסבב ה- i {\displaystyle i} כאשר K 5 {\displaystyle K_{5}} הוא המפתח שמחובר לאחר הסבב הרביעי וכן K i j {\displaystyle K_{ij}} מתייחס לסיבית במיקום ה- j {\displaystyle j} של המפתח ה- i {\displaystyle i} . לכן בשלב הראשון של הצופן מתקבל: U 1 = P ⊕ K 1 {\displaystyle U_{1}=P\oplus K_{1}} . כאשר P {\displaystyle P} הוא בלוק הקלט הגלוי או המסר המיועד להצפנה, באורך 16 סיביות. על בסיס הקירוב הליניארי של הסבב הראשון של הצופן, המשוואה הליניארית הבאה: מתקיימת בהסתברות 3 / 4 {\displaystyle 3/4} . וכן עבור הסבב השני, הצירוף הבא V 2 , 6 ⊕ V 2 , 8 = U 2 , 6 {\displaystyle V_{2,6}\oplus V_{2,8}=U_{2,6}} מתקיים בהסתברות 1 / 4 {\displaystyle 1/4} . היות שפלט הסבב הראשון הוא בעצם קלט הסבב השני המחובר עם המפתח המתאים, מתקבל U 2 , 6 = V 1 , 6 ⊕ K 2 , 6 {\displaystyle U_{2,6}=V_{1,6}\oplus K_{2,6}} לכן אפשר לקבל קירוב ליניארי מהצורה: V 2 , 6 ⊕ V 2 , 8 = V 1 , 6 ⊕ K 2 , 6 {\displaystyle V_{2,6}\oplus V_{2,8}=V_{1,6}\oplus K_{2,6}} בהסתברות 1/4. לפי למת הערמה של מצואי, אם משלבים יחד את הצירופים משני הסבבים הראשונים מתקבלת המשוואה: V 2 , 6 ⊕ V 2 , 8 ⊕ P 5 ⊕ P 7 ⊕ P 8 ⊕ K 1 , 5 ⊕ K 1 , 7 ⊕ K 1 , 8 ⊕ K 2 , 6 = 0 {\displaystyle V_{2,6}\oplus V_{2,8}\oplus P_{5}\oplus P_{7}\oplus P_{8}\oplus K_{1,5}\oplus K_{1,7}\oplus K_{1,8}\oplus K_{2,6}=0} שמתקיימת בהסתברות ש/ל 1 / 2 + 2 ( 3 / 4 − 1 / 2 ) ( 1 / 4 − 1 / 2 ) = 3 / 8 {\displaystyle 1/2+2(3/4-1/2)(1/4-1/2)=3/8} עם הטיה − 1 / 8 {\displaystyle -1/8} . למרות שהיא מתבססת על ההנחה שהקירובים הליניאריים של כל סבב בלתי תלויים שהיא הנחה לא מדויקת, בפועל היא עובדת היטב. עבור הסבב השלישי אפשר להבחין ש: V 3 , 6 ⊕ V 3 , 8 = U 3 , 6 {\displaystyle V_{3,6}\oplus V_{3,8}=U_{3,6}} בהסתברות 1 / 4 {\displaystyle 1/4} וכן V 3 , 14 ⊕ V 3 , 16 = U 3 , 14 {\displaystyle V_{3,14}\oplus V_{3,16}=U_{3,14}} בהסתברות 1 / 4 {\displaystyle 1/4} . היות שמתקיים U 3 , 6 = V 2 , 6 ⊕ K 3 , 6 {\displaystyle U_{3,6}=V_{2,6}\oplus K_{3,6}} וכן U 3 , 14 = V 2 , 8 ⊕ K 3 , 14 {\displaystyle U_{3,14}=V_{2,8}\oplus K_{3,14}} מתקבלת המשוואה הבאה: V 3 , 6 ⊕ V 3 , 8 ⊕ V 3 , 14 ⊕ V 3 , 16 ⊕ V 2 , 6 ⊕ K 3 , 6 ⊕ V 2 , 8 ⊕ K 3 , 14 = 0 {\displaystyle V_{3,6}\oplus V_{3,8}\oplus V_{3,14}\oplus V_{3,16}\oplus V_{2,6}\oplus K_{3,6}\oplus V_{2,8}\oplus K_{3,14}=0} בהסתברות של 1 / 2 + 2 ( 1 / 4 − 1 / 2 ) 2 = 5 / 8 {\displaystyle 1/2+2(1/4-1/2)^{2}=5/8} (עם הטיה − 1 / 8 {\displaystyle -1/8} ). כעת אפשר לשלב את הצירופים מכל הסבבים (לפי עקרון הערמה) ולקבל את: V 3 , 6 ⊕ V 3 , 8 ⊕ V 3 , 14 ⊕ V 3 , 16 ⊕ P 5 ⊕ P 7 ⊕ P 8 ⊕ K 1 , 5 ⊕ K 1 , 7 ⊕ K 1 , 8 ⊕ K 2 , 6 ⊕ K 3 , 6 ⊕ K 3 , 14 = 0 {\displaystyle V_{3,6}\oplus V_{3,8}\oplus V_{3,14}\oplus V_{3,16}\oplus P_{5}\oplus P_{7}\oplus P_{8}\oplus K_{1,5}\oplus K_{1,7}\oplus K_{1,8}\oplus K_{2,6}\oplus K_{3,6}\oplus K_{3,14}=0} . אפשר לפשט את המשוואה. היות שבעצם U 4 , 6 = V 3 , 6 ⊕ K 4 , 6 , U 4 , 8 = V 3 , 14 ⊕ K 4 , 8 , U 4 , 14 = V 3 , 8 ⊕ K 4 , 14 {\displaystyle U_{4,6}=V_{3,6}\oplus K_{4,6},U_{4,8}=V_{3,14}\oplus K_{4,8},U_{4,14}=V_{3,8}\oplus K_{4,14}} וכן U 4 , 16 = V 3 , 16 ⊕ K 4 , 16 {\displaystyle U_{4,16}=V_{3,16}\oplus K_{4,16}} , אפשר לשכתב את המשוואה האמורה כך: U 4 , 6 ⊕ U 4 , 8 ⊕ U 4 , 14 ⊕ U 4 , 16 ⊕ P 5 ⊕ P 7 ⊕ P 8 ⊕ ∑ K = 0 {\displaystyle \textstyle U_{4,6}\oplus U_{4,8}\oplus U_{4,14}\oplus U_{4,16}\oplus P_{5}\oplus P_{7}\oplus P_{8}\oplus \sum _{K}=0} . כאשר ∑ K {\displaystyle \textstyle \sum _{K}} כולל את כל סיביות המפתח המשתתפות (שמיקומן ידוע): ∑ K = K 1 , 5 ⊕ K 1 , 7 ⊕ K 1 , 8 ⊕ K 2 , 6 ⊕ K 3 , 6 ⊕ K 3 , 14 ⊕ K 4 , 6 ⊕ K 4 , 8 ⊕ K 4 , 14 ⊕ K 4 , 16 {\displaystyle \textstyle \sum _{K}=K_{1,5}\oplus K_{1,7}\oplus K_{1,8}\oplus K_{2,6}\oplus K_{3,6}\oplus K_{3,14}\oplus K_{4,6}\oplus K_{4,8}\oplus K_{4,14}\oplus K_{4,16}} ההסתברות שהמשוואה האחרונה תתקיים היא 1 / 2 + 2 3 ( 3 / 4 − 1 / 2 ) ( 1 / 4 − 1 / 2 ) 3 = 15 / 32 {\displaystyle 1/2+2^{3}(3/4-1/2)(1/4-1/2)^{3}=15/32} עם הטיה - 1 / 32 {\displaystyle 1/32} והיא הקירוב הליניארי של הצופן. היות ש- ∑ K {\displaystyle \textstyle \sum _{K}} קבוע בהתאם למפתח הסודי המשוואה הבאה: U 4 , 6 ⊕ U 4 , 8 ⊕ U 4 , 14 ⊕ U 4 , 16 ⊕ P 5 ⊕ P 7 ⊕ P 8 = 0 {\displaystyle U_{4,6}\oplus U_{4,8}\oplus U_{4,14}\oplus U_{4,16}\oplus P_{5}\oplus P_{7}\oplus P_{8}=0} חייבת להתקיים בהסתברות של 15 / 32 {\displaystyle 15/32} או ( 1 − 15 / 32 ) = 17 / 32 {\displaystyle (1-15/32)=17/32} שתלוי בערכו של ∑ K {\displaystyle \textstyle \sum _{K}} (אפס או אחד בהתאמה). כעת בידינו הקירוב הליניארי הכולל של שלושת הסבבים הראשונים של הצופן בהסתברות של 1 / 32 {\displaystyle 1/32} . לאחר שהתגלה הקירוב הליניארי הכולל של R − 1 {\displaystyle R-1} מתוך R {\displaystyle R} הסבבים של הצופן, עם הטיה הסתברותית משמעותית, עוברים לשלב ניחוש סיביות תת-המפתח האחרון על ידי חישוב לאחור. ביתר פירוט, תחילה מנסים את כל האפשרויות של המפתח האחרון ( K 5 {\displaystyle K_{5}} במקרה זה) ומחברים אותם ב-XOR עם הבלוק המוצפן, ואז מבצעים פענוח חלקי (העברה בתיבות ההחלפה של הסבב האחרון) של הבלוק שהתקבל. פעולה זו מתבצעת עבור כל זוגות הבלוקים גלויים/מוצפנים שנמצאים בידי המתקיף. שומרים מונה שמקודם בכל פעם שהתקבל ערך המקיים את הצירוף הליניארי של התיבות מהסבב האחרון (יש לזכור שהבלוק הגלוי ידוע). כל ניחוש סיביות מפתח שהמונה שלו גבוה או נמוך ממחצית מזוגות הקלט/פלט שבידי המתקיף בשיעור משמעותי הדבר נחשב לניחוש מוצלח. ניחוש לא נכון אמור לתת תוצאה אקראית ולכן המשוואה האמורה תתקיים בהסתברות קרובה לחצי. בצופן הצעצוע המובא להמחשה, הצירוף הליניארי האחרון משפיע על הפלט לתיבות S 42 {\displaystyle S_{42}} ו- S 44 {\displaystyle S_{44}} של הסבב האחרון. כיוון שכל תיבה מכילה 4 סיביות בסך הכול 8 זה אומר שעבור כל זוג קלט/פלט מנסים את כל 256 צירופי סיביות של המפתח K 5 {\displaystyle K_{5}} במקטעים [ K 5 , 5 . . . K 5 , 8 , K 5 , 13 . . . K 5 , 16 ] {\displaystyle [K_{5,5}...K_{5,8},K_{5,13}...K_{5,16}]} (יתר סיביות המפתח אינן משפיעות כי שתי תיבות אילו היו התיבות הפעילות היחידות בסבב זה). עבור כל ניחוש מפתח חלקי כזה, מקדמים מונה כלשהו אם המשוואה האחרונה התקיימה. הזוגות שלהם המונה הגבוה ביותר (שלילי או חיובי) מרמזות על ניחוש מוצלח בהסתברות גבוהה. המשוואה האחרונה (הצירוף הליניארי של הצופן) משפיעה על התוצאה בהתאם למפתח. אם ערכן של סיביות המפתח בפוזיציות הללו הוא ∑ K = 0 {\displaystyle \textstyle \sum _{K}=0} אז המשואה תתקיים בהסתברות גבוהה מחצי ואילו אם ∑ K = 1 {\displaystyle \textstyle \sum _{K}=1} המשוואה תתקיים בהסתברות נמוכה מחצי. את צופן הצעצוע המתואר אפשר לתקוף עם 10,000 זוגות קלט/פלט ידועים, ולפי תיאור ההתקפה עד כה, התגלה ניחוש מוצלח של סיביות תת-המפתח [ K 5 , 5 . . . K 5 , 8 ] = [ 0010 ] {\displaystyle [K_{5,5}...K_{5,8}]=[0010]} וכן [ K 5 , 13 . . . K 5 , 16 ] = [ 0100 ] {\displaystyle [K_{5,13}...K_{5,16}]=[0100]} . ואכן המונה עבור סיביות אילו [ 2 , 4 ] {\displaystyle [2,4]} בבסיס הקסדצימלי כצפוי היה גבוה משמעותית מ-5,000. הטבלה הבאה מכילה להמחשה, אוסף חלקי מתוך 256 האפשרויות. ערכים אילו מייצגים את שיעור ההטיה לפי החשבון האמור, "הטיה = מונה פחות חצי לחלק למספר הזוגות". כאשר המונה מתייחס לניחוש מסוים של 8 סיביות מהמפתח. אפשר לראות שההטיה הגבוהה ביותר מופיעה כאשר הניחוש הוא 2,4. הערך 0.0336 {\displaystyle 0.0336} בשורה 9 בטבלה שהתגלה במהלך הניסוי, קרוב מאוד לערך הצפוי של 1 / 32 = 0.03125 {\displaystyle 1/32=0.03125} . למרות שניחוש נכון תמיד יהיה בעל הטיה גבוהה ביותר, בכל זאת קיימים ערכים של ניחושים לא נכונים שמכילים הטיה גבוהה. מה שמעיד על כך שההשוואה של ניחושים נכונים אינה בדיוק השוואה של נתונים אקראיים מול משוואה ליניארית שאז ההטיה אמורה להיות אפס במצב אידיאלי. העובדה שזה לא קורה נובעת מכמה סיבות ביניהן מאפייני תיבות ההחלפה המשפיעות על הפענוח החלקי, אי דיוקים הנובעים מההנחה השגויה שהצירופים של תיבות ההחלפה בלתי תלויים זה בזה וכן מההשפעה של מה שקרוי "פרישה ליניארית" או "מעטפת ליניארית" ראה קבוצה פורשת. ההסתברות שמשוואה ליניארית תתקיים תלויה בהטיה ההסתברותית של תיבות ההחלפה הפעילות ובמספרן (התיבות הפעילות הן אילו שהקו עובר דרכן בתרשים). באופן כללי ככל שההטיה גבוהה יותר בתיבות ההחלפה כך היא תהיה גבוהה יותר בצופן כולו. כמו כן ככל שפחות תיבות החלפה פעילות כך שיעור ההטיה יהיה גבוה יותר. יהי ε {\displaystyle \varepsilon } ההטיה מחצי של ההסתברות שמשוואה ליניארית עבור כל הצופן תתקיים. מיצורו מצואי הראה שמספר זוגות הקלט/פלט הנדרש לצורך הקרפיטואנליזה הליניארית פרופורציונלי ל- ε − 2 {\displaystyle \varepsilon ^{-2}} ואם N L {\displaystyle N_{L}} מייצג את מספר הבלוקים הקריאים הדרוש אז אפשר להעריכו על ידי N L ≈ 1 / ε 2 {\displaystyle N_{L}\approx 1/\varepsilon ^{2}} . למרות שסיבוכיות ההתקפה נמדדת גם בזמן וגם בזיכרון, בקריפטואנליזה ליניארית מתייחסים בעיקר לכמות הזיכרון. כלומר מניחים שאם יש באפשרותנו להשיג N L {\displaystyle N_{L}} טקסטים אז ההתקפה בת ביצוע. לאור האמור הדרכים להתגונן מפני הקריפטואנליזה הליניארית הן מיטוב תיבות ההחלפה, כלומר צמצום ההטיה הליניארית שלהם וכן בניית הצופן באופן שיהיו יותר תיבות החלפה פעילות. צופן AES הוא דוגמה מצוינת לגישה זו. אמנם צריך לשים לב שההוכחה כביכול שצופן עמיד מפני קריפטואנליזה ליניארית מסתמכת על אי קיומם של קירובים ליניאריים בהסתברות גבוהה, חישוב ההסתברות של משוואות ליניאריות מתבסס על ההנחה שהתיבות בלתי תלויות וההטיה שלהם בלתי תלויה כך שאפשרי ליישם את עקרון הערמה של מצואי וכן על ההנחה שקירוב ליניארי יחיד מספיק כדי לחשב את הביטוי הליניארי הטוב ביותר בין סיביות הקלט וסיביות הפלט. במציאות הקירובים הליניאריים של תיבות ההחלפה אינם בלתי תלויים מה שעלול להשפיע על חישוב ההסתברות של ההטיה הכללית של הצופן. וכן מופעים של קירובים ליניאריים עם אותן סיביות קלט ופלט אך עם תיבות החלפה פעילות אחרות ניתנים לצירוף כך שתתקבל הסתברות ליניארית גבוהה יותר מהצפוי עם סט אחד של תיבות החלפה פעילות. תופעה זו נקראת מעטפת ליניארית או פרישה ליניארית. והיא משליכה על כך שגם אם נראה כאילו הצופן אינו מכיל הטיה הסתברותית גבוהה שילוב של מספר מופעים של קירובים ליניאריים יכול להוביל להטיה גבוהה. בכל אופן הגישה הבסיסית המתוארת כאן נוטה לעבוד היטב נגד מספר צפנים מודרניים, זאת משום שההשערה שהקירובים הליניאריים של תיבות ההחלפה בלתי תלויים סבירה למדי וכן אם מופעים של קירובים ליניאריים של קבוצת תיבות החלפה פעילות מניבים הטיה הסתברותית גבוהה הם נוטים להעלים את המעטפת הליניארית. קריפטואנליזה קריפטואנליזה דיפרנציאלית Matsui, M. & Yamagishi, A. "A new method for known plaintext attack of FEAL cipher". Advances in Cryptology - EUROCRYPT 1992 Matsui, M. "Linear Cryptanalysis Method for DES Cipher" (PDF). Advances in Cryptology - EUROCRYPT 1993. Alex Biryukov, Christophe De Canni'ere, and Michal Quisquater. On Multiple Linear Approximations. In Matt Franklin, editor, Advances in Cryptology – CRYPTO ’04, 24th Annual International Cryptology Conference, Santa Barbara, California, USA, August 15–19, 2004. Proceedings, volume 3152 of Lecture Notes in Computer Science, pages 1–22, Berlin/Heidelberg, 2004. Springer. Zero-Correlation Linear Cryptanalysis of Block Ciphers Carlo Harpes, Gerard G. Kramer, James L. Massey (May 1995). A Generalization of Linear Cryptanalysis and the Applicability of Matsui's Piling-up Lemma (PDF/PostScript). Advances in Cryptology — Eurocrypt '95. Saint-Malo: Springer-Verlag. pp. 24–38. Retrieved 9 September 2007 A Tutorial on Linear and Differential Cryptanalysis, Howard M. Heys