עמוד הבית > Blowfish > פירוט האלגוריתם

פירוט האלגוריתם  

Blowfish זה צופן עם מפתח באורך משתנה וגודל הגוש הוא 64 סיביות. האלגוריתם מורכב משני חלקים: חלק של הרחבת המפתח וחלק של הצפנת נתונים. הרחבת המפתח הופך מפתח בגודל מקסימום 448 סיביות למספר מעריכים של תת מפתחות בגודל כולל של 4168 בייט.

הצפנת הנתונים מתבצעת בעזרת רשת Feistel בעלת 16 מחזורים. כל מחזור מורכת מתמורה תלוית מפתח, והתחליף תלוי מפתח ונתונים. כל הפעולות הם XOR-ים וחיבור של מילים בעלות 32 סיביות. הפעולות הנוספות היחידות הן 4 חיפושים במערך הכלל אינדקסים בכל מחזור.

תת מפתחות:

Blowfish משתמש במספר גדול של מפתחות. צריך לחשב את תת המפתחות האיילה לפני הצפנה או פענוח.

1. מערך P מורכב מ-18 תת מפתחות בגודל 32 סיביות כל אחד:

P1,P2,P3,.......,P18.

2.יש 4 S-box ים בעלי 32 סיביות עם 256 כניסות לכל אחד:
S1,0, S1,1,..., S1,255;
S2,0, S2,1,..,, S2,255;
S3,0, S3,1,..., S3,255;
S4,0, S4,1,..,, S4,255.

את השיטה המדויקת שבה משתמשים כדי לחשב את תת המפתחות האיילה נחשב מאוחר יותר.

הצפנה:

Blowfish זה רשת Feistel המורכבת מ-16 מחזורים. קלט זה אלמנט נתונים בגודל 64 סיביות, x.

Divide x into two 32-bit halves: xL, xR
For i = 1 to 16:
  xL = xL XOR Pi
  xR = F(xL) XOR xR
  Swap xL and xR
Swap xL and xR (Undo the last swap.)
xR = xR XOR P17
xL = xL XOR P18
Recombine xL and xR
Function F (see Figure 2):
Divide xL into four eight-bit quarters: a, b, c, and d
F(xL) = ((S1,a + S2,b mod 232) XOR S3,c) + S4,d mod 232

פענוח זה להצפנה, פרט לכך ש-P1,P2,P3,.......,P18 משומשים בסדר הפוך.

היישומים של Blowfish שדורש מהירות מרבית צריך לפרוש את הלולאה ולוודא שכל תת המפתחות מאוחסנים בזיכרון המטמון.

את תת המפתחות מחשבים בעזרת אלגוריתם Blowfish. השיטה המדויקת עובדת באופן הבא:

יצירת תת המפתחות:

1.תאתחל מערך P ראשון ו 4 S-box-ים, בסדר, עם מחרוזת קבועה. המחרוזת הזאת מורכבת מספרות הקסאדצימאליות של pi (פחות משלוש התחלתיות) לדוגמא:
P1 = 0x243F6A88
P2 = 0x85A308D3
P3 = 0x13198A2E
P4 = 0x03707344

2.תעשה XOR של P1 עם 32 הסיביות הראשונות של המפתח, XOR של P2 עם 32 סיביות הבאות של המפתח וכך הלאה לכל הסיביות  של המפתח (יכול להיות עד P14 ) תחזיר במעגל על הסיביות הבאות של המפתח עד שכל המערך P יעבור XOR עם הסיביות של המפתח. (לכל מפתח קצר, יש לפחות מפתח שקול ארוך יותר, לדוגמא, אם A מפתח באורך 64 סיביות אז AAA ,AA וכן הלאה הם מפתחות שקולים).

3. תצפין מחרוזת של אפסים עם אלגוריתם Blowfish בעזרת תת מפתח המתואר בשלבים 1 ו - 2.

4. תחליף P1 ו - P2 עם הפלט של שלב 3.

5. תצפין את הפלט של שלב 3 בעזרת אלגוריתם Blowfish עם תת המפתחות שעברו שינוי.

6. תחליף P3 ו-P4 עם הפלט של שלב 5.

7. תמשיך את התהליך בהחלפת כל הכניסות של מערך P, ואז כל 4 S-box-ים לפי הסדר, עם הפלט של האלגוריתם Blowfish שכל הזמן משתנה.

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

מסקנות

אנו סבורים כי הדרך היעילה ביותר לפרוץ את Blowfish זה על ידי חיפוש ממצא של מרחבי מפתחות.

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

 

 לעמוד הקודם

לעמוד הבא
 
 

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

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

 

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