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
אין פטנט וזה יישאר כך בכל המדינות. בזאת האלגוריתם מופקד ברשות הרבים, וכל אחד
יכול להשתמש בו בחופשיות.
|