עמוד הבית > Twofish > תזמון המפתח

תזמון המפתח

מחזור המפתח מתחיל ע"י כך שמפיקים שלושה וקטורי מפתחות כל אחד באורך מחצית המפתח המקורי.

השניים הראשונים נוצרים ע"י חילוק המפתח לחלקים כל חלק בגודל 32 סיביות. מחלקים לכל חלק מספר החל מאפס, החלקים הממוספרים במספר זוגי יוצרים את (M(e  והחלקים שממוספרים במספרים אי-זוגיים יוצרים את (M(o.

וקטור המפתח השלישי נוצר ע"י כך שמחלקים את המפתח המקורי לחלקים בגודל 64 סיביות, ויצירת חלק בגודל 32 סיביות בווקטור המפתח ע"י הכפלת כל חלק בגודל 64 סיביות במטריצה הבאה (ששמה מטריצת RS):

01 A4 55 87 5A 58 DB 9E
A4 56 82 F3 1E C6 68 E5
02 A1 FC C1 47 AE 3D 19
A4 55 87 5A 58 DB 9E 03

מעל שדה גלואה 28 עם הפולינום הוא מודולארי  1 + x8 + x6 + x3 + x2 , שזה אומר שאחרי הכפלת - XOR משתמשים בתבנית הסיביות 101001101 להתאים את התוצאה הפעם ל-8 סיביות.

הסיבה שלשני השדות אנו מתייחסים כ"שדה גלואה 28" היא, מפני שחוץ מזה שמשתמשים באותם החוקים על מספרים שונים מאפס ל-255, לא משנה באיזה פולינום מודולארי משתמשים, יש באמת רק שדה גלואה אחד עבור כל חזקה ראשונית. שינוי הפולינום המודולארי משנה מה כל מספר עושה, שזה איזומורפיזם, אך זה לא משנה את המבנה המתמטי  היסודי של השדה. בכל אופן, זה לא אומר שאין שימוש בשינוי הפולינום המודולארי: זה ביסודו דרך כדי לקבל S-box בחינם.

המילים המתקבלים בגודל 32 סיביות מניחים אחרי כך בסדר הפוך לתוך וקטור המפתח הנקרא S.

ה-S-box-ים הקבועים עם קלט ופלט בגודל 8 סיביות שמסומנים (q(0 ו-(q(1 כל אחד מורכב מ-S-box-ים עם קלט ופלט בגודל 4 סיביות.

עבור (q(0 ה-S-box-ים הם:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

0

קלט
4     10 12 14 0 5 11 0 2 3 15 6 13 7 1 8 T0
13 9 0 7 3 10 4 15 5 3 2 1 11 11 12 14 T1
1 7 4 2 6 15 8 12 0 9 13 6 14 5 10 11 T2
10 12 5 8 9 3 11 9 14 6 2 1 4 15 7 13 T3

 

ועבור (q(1 ה-S-box-ים , ששוב מקבלים את אותו הכינוי, הם:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 קלט
5     12 10 0 4 9 1 3 14 6 7 15 13 11 8 2 T0
8 0 9 15 5 10 13 6 7 3 12 4 11 2 14 1 T1
15 3 11 2 8 13 14 0 10 9 6 1 5 7 12 4 T2
10 8 0 2 15 7 4 6 14 13 3 12 1 5 9 11 T3

כל S-box נוצר כך:

  • בית הקלט מחולק לחצי המשמעותי ולחצי הפחות משמעותי שלו, A ו-B.

  • הערך החדש של A הוא ה-XOR בין הערכים הישנים של A ו-B.

  • הערך החדש של B הוא ה-XOR בין הערך הישן של A ו-B שמוזזת סיבית אחת ימינה ו-8 אם הערך הישן של A היה אי-זוגי.

  • אז A ו-B מוחלפים ע"י המחליפים שלהם ב-S-box-ים בגודל 16 סיביות T0 ו-T1 בהתאמה.

  • הערך החדש של A הוא ה-XOR של הערך הישן של A ו-B.

  • הערך החדש של B הוא ה-XOR בין הערך הישן של A ו-B שמוזזת סיבית אחת ימינה ו-8 אם הערך הישן של A היה אי-זוגי.

  • אז A ו-B מוחלפים ע"י המחליפים שלהם ב- S-box-ים בגודל 16 סיביות T2 ו- T3 בהתאמה.

  • אז A ו- B מאוחדים בסדר הפוך כדי ליצור את בית התוצאה.

4  ה-S-box-ים תלויי מפתח מיוצרים מגורמים בגודל 32 סיביות של וקטור מפתח S בצורה הבאה:

אם המפתח בגודל 256 סיביות, לווקטור המפתח S יש 4 גורמים בגודל 32 סיביות S(0),.... ,S(3) במקרה הזה, ה-S-box-ים תלויי מפתח שקולים לביצוע של הפעולות:

(((קלט)(q(0)(S(0,0)   xor q(1)(S(1,0)  xor q(1)(S(2,0)  xor q(0)(S(3,0) xor q(1=פלט

(((קלט)(q(1)(S(0,1)   xor q(1)(S(1,1)  xor q(0)(S(2,1)  xor q(0)(S(3,1) xor q(0=פלט

(((קלט)(q(0)(S(0,2)   xor q(0)(S(1,2)  xor q(1)(S(2,2)  xor q(1)(S(3,2) xor q(0=פלט

(((קלט)(q(1)(S(0,3)   xor q(0)(S(1,3)  xor q(0)(S(2,3)  xor q(1)(S(3,3) xor q(1=פלט

כאשר  (S(2,1 זאת אומרת, בית 1 של מילה 2 בווקטור המפתח S.

כאשר המפתח בגודל 192 סיביות, ההגדרה של ה-S-box מופשטת ל:

(((קלט)(q(0)(S(0,0)   xor q(1)(S(1,0)   xor q(1)(S(2,0)   xor q(1=פלט

(((קלט)(q(1)(S(0,1)   xor q(1)(S(1,1)   xor q(0)(S(2,1)    xor q(0=פלט

(((קלט)(q(0)(S(0,2)   xor q(0)(S(1,2)   xor q(1)(S(2,2)   xor q(0=פלט

(((קלט)(q(1)(S(0,3)   xor q(0)(S(1,3)   xor q(0)(S(2,3)   xor q(1=פלט

וכאשר המפתח בגודל של 128 סיביות, ההגדרה של ה-S-box מופשטת ל:

(((קלט)( q(0)(S(0,0)   xor q(1)(S(1,0)   xor q(1=פלט

(((קלט)(q(1)(S(0,1)   xor q(1)(S(1,1)    xor q(0=פלט

(((קלט)(q(0)(S(0,2)   xor q(0)(S(1,2)   xor q(0=פלט

(((קלט)(q(1)(S(0,3)   xor q(0)(S(1,3)   xor q(1=פלט

תת המפתחות אשר בעצם מחוברים לפלט הפונקציה לפני שהם עוברים XOR לרבע אחר של הגוש מיוצרים ע"י תהליך הדומה מאוד למחזור של Twofish, אבל עם S-box-ים תלויי מפתח הגזורים מוקטורי המפתח (M(e ו-(M(o במקום מווקטור מפתח S. הקלטים הם מספר המחזורים כפול 2, ועוד 1 בצד אחד, בכל ארבעה בתים של המילה, צעד ההזזה שמאלה מתבצע אחרי הפונקציה במקום לפניה: הזזת 8 סיביות שמאלה לפני PHT, והזזה 9 סיביות שמאלה אחרי.

 

 לעמוד הקודם

לעמוד הבא
 
 

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

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

 

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