עמוד הבית > Add Round Key < Rijndael

השלב הסופי Add Round Key (הוספת מפתח מחזור). זה פשוט לעשות XOR של התוצאה הקודמת עם תת המפתח של מחזור הנוכחי.

למרות שבתחילת העמוד כבר הצגנו דיאגראמה צבעונית תלת ממדית אפשר גם להציג את המחזור של Rijndael בצורה יותר שגרתית:

המחזור הסופי הנוסף משמיט את שלב ה-Mix Column, אבל חוץ מזה זה מחזור רגיל.

לכן, הרצף של השלבים ב-Rijndael הוא:

ARK

BSB
SR
MC
ARK

BSB
SR
MC
ARK

...

BSB
SR
MC
ARK

BSB
SR
ARK

בגלל שזה מתחיל ומסתיים עם השלב Add Round Key, אין שלב מבוזבז בהתחלה או בסוף. רצף ההשתלשלות חשוב גם להקלה על הפענוח.

למרות שהרצף אינו סימטרי אפשר לשנות חלק מהשלבים ב-Rijndael בלי להשפיע על ההצפנה. את שלב ה-Byte Sub אפשר לעשות באותה המידה לפני Shift Row כמו שאחריו.

זה ישנה את
A BSMA BSMA ... BSMA BSA 
ל
A SBMA SBMA ... SBMA SBA

אם, מצד שני, שמרנו על הרצף המקומי, אנו נקבל
ASB AMSB ... AMSB AMSB A

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

כמובן השלבים שבהם צריך להפוך הם: ARK הוא XOR, זאת אומרת הוא ההפיך של עצמו, אבל מטריצה בשלב ה - Mix Column צריכה להתחלף עם המטריצה ההפוכה, וה-S-box בשלב ה-Byte Sub צריך להתחלף עם ההפיך שלו בשלב הפענוח.

אבל מה לגבי החלפה בין MA ובין AM?  האם אנו צריכים לשנות את סדר הפעולות וסדר הפענוח?

לא; עם הכפלת מטריצה, התכונה הדסטריביוטיבית גם כן חלה, ז"א מפתחות מחזור המשתתפים בהפיכה הזאת פשוט צריכים להיות מוכפלים ע"י מטריצה Mix Column (הפוכה), ואז אפשר לעשות איתם XOR באותו הזמן (כמובן בסדר הפוך) כמו שעשינו בהצפנה. (XOR מתאים להוספה בשדה גלואה ( 28 ), שבו המכפלות מבוצעות).

המטריצה לשלב ה - Mix Column ההפוכה היא:     

14 11 13   9
 9 14 11 13
13   9 14 11
11 13   9 14

כמו שאפשר לבדוק בקלות, ע"י שימוש בסימטריה, וכאשר התשובה ידועה:

1110 1011 1101 1001    01 00 00 00
1001 1110 1011 1101    00 01 00 00
1101 1001 1110 1011    00 00 01 00
1011 1101 1001 1110    00 00 00 01

 111   101   110   100    01 01 00 00
 110   100   111   101    00 00 01 01
1100 1000 1110 1010    00 00 10 10
1011 1101 1000 1110    01 01 10 10
   0       0       1       0    01 01 10 11

מכיוון שעכשיו אנו מבצעים הכפלה בשדה גלואה במספרים גדולים יותר, דוגמא אחרת של הכפלה בשדה גלואה יכולה להיות שימושית. כדי להחליף מחרוזת בינארית 10100011 ב-14 ב-GF נעבוד כך:

10100011
1110      *
------------
  10100011
 10100011
10100011
------------
11011010010
  100011011
------------
1010111110
 100011011
------------
10001000

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

 

 לעמוד הקודם

לעמוד הבא
 
 

| מבוא | Blowfish | DES | Rijndael | Skipjack | Twofish |

| עמוד הבית | אודות | מפת האתר | מונחון | ביבליוגרפיה |

 

  ©איתן 2002. כל הזכויות שמורות למערכת המידע איתן.