Blowfish הוא צופן בלוקים סימטרי שפותח ב-1993 על ידי ברוס שנייר. זהו אלגוריתם הצפנה מהיר ובטוח מ-DES או IDEA ותומך במפתח בגודל משתנה בטווח של 32 עד 448 סיביות במטרה להכשירו לשימוש מקומי או לייצוא (בשל מגבלות הייצוא של ממשלת ארצות הברית על גודל מפתח ההצפנה). Blowfish אינו מוגן בפטנט או ברישיון כלשהו והוא חופשי לשימוש לכל מטרה. מאז המצאתו נבחן האלגוריתם על ידי מומחים רבים וקיבל הכרה כאלגוריתם חזק. חסרונותיו הם: גודל הבלוק, שנקבע ל-64 סיביות בלבד ועל כן אינו מתאים לתקן ההצפנה המתקדם שדורש לפחות 128 סיביות; תהליך הרחבת מפתח ארוך במידה ניכרת, דבר המאט את ביצועיו; כמו כן, התגלו מפתחות הצפנה **חלשים** שיש להימנע משימוש בהם.

מבנה Blowfish מזכיר רשת פייסטל בדומה ל-DES. בשל שלב ההכנה הארוך מן הרגיל ליצירת **תת-מפתחות** לכל סבבי ההצפנה, מתאים במיוחד כשאין צורך לשנות מפתח באופן תדיר כגון בהצפנת ארכיון קבצים או דיסק קשיח. גודל הבלוק נקבע ל-64 סיביות ואורך המפתח יכול להשתנות להשגת רמות שונות של ביטחון. הוא כולל שני שלבים עיקריים; **הרחבת מפתח** שבו מפתח בגודל מרבי של 448 סיביות מורחב לגודל כולל של 4,168 סיביות. ו**תהליך הצפנה** - טרנספורמציה המבוצעת על מחצית מהקלט ב-16 סבבים לסירוגין וכוללת תמורה תלוית מפתח והחלפה תלוית מפתח, תוך שימוש בפעולות חיבור ו-XOR בלבד על מילים בגודל 32 סיביות. בנוסף לארבע פעולות נוספות של חיפוש בטבלה לפי אינדקס (lookup). האלגוריתם מכיל ארבע תיבות החלפה (S-box) דינאמיות תלויות-מפתח, המכילות 256 כניסות בגודל 32 סיביות והוא עושה שימוש בקבועים שהם חלק מספרות הערך פאי בייצוג בינארי.

תיאור האלגוריתם
---------------

מבנה סכימתי של יישום רשת פייסטל באלגוריתם Blowfish. הסמל \oplus מייצג XOR
הקלט הוא הערך x (בלוק מידע המיועד להצפנה) בגודל 64 סיביות ומפתח מורחב (ראה תהליך הרחבת מפתח) המיוצג על ידי הטבלה P המכילה 18 כניסות:

1. חוצים את הקלט לשני חצאים בגודל 32 סיביות {\displaystyle x\_{L},x\_{R}}: 

2. עבור {\displaystyle i=1,...16} מבצעים:

2.1 {\displaystyle x\_{L}=x\_{L}\oplus P\_{i}} (הסמל \oplus מייצג XOR)
2.2 {\displaystyle x\_{R}=F(x\_{L})\oplus x\_{R}}
2.3 החלף מקומות בין {\displaystyle x\_{L}} ו-{\displaystyle x\_{R}}
3. החלף מקומות בין {\displaystyle x\_{L}} ו-{\displaystyle x\_{R}} (מבטל את ההחלפה מהסבב האחרון)

4. {\displaystyle x\_{R}=x\_{R}\oplus P\_{17}}

5. {\displaystyle x\_{L}=x\_{L}\oplus P\_{18}}

6. חבר מחדש את {\displaystyle x\_{L}} ו-{\displaystyle x\_{R}}.

הפונקציה F מחלקת את {\displaystyle x\_{L}} לארבעה בתים: {\displaystyle a,b,c,d} המשמשים כאינדקס לערך המתאים בתיבות ההחלפה (ראה להלן) ומחשבת כדלהלן:{\displaystyle F(x\_{L})=((S\_{1,a}+S\_{2,b}{\mbox{ mod }}2^{32})\oplus S\_{3,c})+S\_{4,d}{\mbox{ mod }}2^{32}}

הרחבת מפתח
----------

המפתח כולל טבלת תמורה P המכילה 18 כניסות של 32 סיביות {\displaystyle P\_{1},P\_{2},...P\_{18}}. ראשית מאתחלים את כל כניסות הטבלה בערכים קבועים שהם ספרות פאי לאחר הנקודה. להלן ארבעת הערכים הראשונים בייצוג הקסדצימלי:

|  |
| --- |
| {\displaystyle P\_{1}={\mbox{243F6A88}}} |
| {\displaystyle P\_{2}={\mbox{85A308D3}}} |
| {\displaystyle P\_{3}={\mbox{13198A2E}}} |
| {\displaystyle P\_{4}={\mbox{03707344}}} |

מוסיפים באמצעות XOR את המפתח הראשוני שמסופק על ידי המשתמש באופן מחזורי עד להשלמת כל הכניסות. לדוגמה אם המפתח מכיל {\displaystyle K\_{1},...K\_{4}} מילים בגודל 32 סיביות (בסך הכול 128 סיביות) אזי מחשבים מ-1 עד 18 את {\displaystyle P\_{i}=P\_{i}\oplus K\_{((i-1){\mbox{ mod }}4)\ +\ 1}}. בשלב השני מעדכנים באופן איטרטיבי את כל כניסות הטבלה באופן הבא; מתחילים בהצפנת מחרוזת אפסים ובכל שלב מחליפים את שתי הכניסות הבאות בתוצאת ההצפנה, את התוצאה חוזרים ומצפינים שוב עם המפתח המעודכן, מעדכנים את הכניסות הבאות בתוצאה וחוזר חלילה. להלן פסאודו קוד:

1. {\displaystyle dl=0,dr=0}
2. {\displaystyle {\mbox{For }}i=1{\mbox{ to }}9{\mbox{ Do:}}}

{\displaystyle (dl,dr)\leftarrow {\mbox{Encipher}}(dl,dr)}
{\displaystyle P\_{2i-1}=dl}
{\displaystyle P\_{2i}=dr}

הפונקציה {\displaystyle {\mbox{Encipher(dl,dr)}}} מתארת את תהליך ההצפנה המובא לעיל שלבים 1 עד 6.

תיבות החלפה
-----------

האלגוריתם כולל ארבע תיבות החלפה תלויות מפתח {\displaystyle S\_{1},..S\_{4}} הנקראות S-box. כל טבלת החלפה היא מערך של 256 מילים בגודל 32 סיביות והאינדקס לערך נתון הוא S\_{i,j} כאשר {\displaystyle i=1,...4} מייצג את הטבלה ו-{\displaystyle j=1,...256} מייצג את הכניסה. היות שתיבות ההחלפה תלויות במפתח יש לבנותם בשלב ההכנה באופן דומה להרחבת המפתח. מתחילים בהצבת הערכים הקבועים (אותם מכינים מראש מהערך פאי) לאחר מכן מצפינים אפסים ואת תוצאת ההצפנה חוזרים ומצפינים שוב כך 256 פעמים כאשר בכל סבב מציבים בשתי הכניסות הבאות של כל אחת מארבע הטבלאות את תוצאת ההצפנה, מחצית בכניסה הראשונה ומחצית בכניסה הבאה אחריה וחוזר חלילה. התהליך מתואר בפסאודו קוד הבא:

1. {\displaystyle dl=0,dr=0}
2. {\displaystyle {\mbox{For }}i=1{\mbox{ to }}4{\mbox{ Do:}}}

{\displaystyle {\mbox{For }}j=1{\mbox{ to }}256{\mbox{ Do: }}}
{\displaystyle (dl,dr)\leftarrow {\mbox{Encipher}}(dl,dr)}
{\displaystyle S\_{i,j}=dl}
{\displaystyle S\_{i,j+1}=dr}

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

פענוח
-----

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

ביטחון
------

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

ראו גם
------

* Twofish

קישורים חיצוניים
----------------

ויקישיתוף מדיה וקבצים בנושא **Blowfish** בוויקישיתוף
* 

* אתר האינטרנט הרשמי של Blowfish (באנגלית)
* ברוס שנייר, The Blowfish Encryption Algorithm

| * צ
* ש
* ע
קריפטוגרפיה |
| --- |
| 

| מושגי יסוד |
| --- |
| 
* פנקס חד-פעמי
* צופן בלוקים
* צופן בלוקים בר התאמה
* צופן זרם
* סודיות מושלמת
* ביטחון סמנטי
* הצפנה סימטרית
* הצפנה אסימטרית
* חתימה דיגיטלית
* הצפנה הומומורפית
* הצפנה מרובה
* הצפנה מאומתת
* הצפנה הסתברותית
* סכמת ריפוד אסימטרית אופטימלית
* אריזת מפתח הצפנה
* סודיות מושלמת קדימה

 |

 |
| 

| הצפנה קלאסית |
| --- |
| 
* מכונת הצפנה
* צופן החלפה
* צופן אתב"ש
* צופן קיסר
* צופן ויז'נר
* צופן ורנם
* צופן פלייפייר
* צופן היל
* אולטרה
* אניגמה
* ציקלומטר
* קולוסוס
* PURPLE
* ג'ייד
* מג'יק
* צופן שחלוף

 |

 |
| 

| צופן בלוקים |
| --- |
| 
* לוציפר
* AES
* 3DES
* DES
* Threefish
* Twofish
* Blowfish
* FEAL
* SEED
* CAST
* IDEA
* RC2
* RC6
* MARS
* RC5
* GOST
* Serpent
* MISTY
* KASUMI
* קמליה
* ARIA
* SAFER
* TEA
* LEA
* CLEFIA
* SEA
* Hummingbird
* PRESENT
* KATAN
* KeeLoq
* Simon & Speck
* אנוביס

 |

 |
| 

| אופני הפעלה |
| --- |
| 
* אופן הפעלה של צופן בלוקים
* EAX
* OCB
* IAPM
* CWC mode
* GCM
* CCM

 |

 |
| 

| צופן זרם |
| --- |
| 
* RC4
* Salsa20
* SOSEMANUK
* Grain
* E0
* A5/1
* A5/2
* A5/3
* A5/4
* MICKEY
* HC-128
* SNOW
* Trivium
* Rabbit
* ZUC
* ChaCha

 |

 |
| 

| הצפנה אסימטרית |
| --- |
| 
* פרוטוקול דיפי-הלמן
* חידות מרקל
* חתימת למפורט
* הצפנת תרמיל
* RSA
* הצפנת רבין
* חתימה דיגיטלית רבין
* צופן אל-גמאל
* חתימה דיגיטלית אל-גמאל
* DSA
* הצפנת בלום-גולדווסר
* ECC
* הצפנת קריימר-שופ
* הצפנת פאיי
* הצפנת מקאליס
* GGH
* NTRU
* עקום 25519
* חתימה דיגיטלית של שנור
* הצפנת אוקמוטו-אושיאמה

 |

 |
| 

| פרוטוקולים |
| --- |
| 
* עץ מרקל
* פרוטוקול אתגר-מענה
* פרוטוקול נידהאם-שרודר
* פרוטוקול קרברוס
* הוכחה באפס ידע
* פרוטוקול פייגה-פיאט-שמיר
* העברה עלומה
* חלוקת סוד
* TLS (SSL)
* Secure Shell
* MQV
* X.509
* פרוטוקול שיתוף מפתח
* מיסור שלא לפרסום
* פרוטוקול סיגנל

 |

 |
| 

| פרימיטיבים תאורטיים |
| --- |
| 
* מחולל פסבדו-אקראי קריפטוגרפי
* פונקציה חד-כיוונית
* תמורה חד-כיוונית
* סיבית קשה
* פונקציה פסבדו-אקראית קריפטוגרפית
* תמורה פסאודו-אקראית
* פונקציית גיבוב קריפטוגרפית
* וקטור אתחול
* פונקציית ספוג
* הצפנה מבוססת סריג

 |

 |
| 

| קריפטואנליזה |
| --- |
| 
* ניתוח תדירויות
* כוח גס
* התקפת איזון זמן/זיכרון
* תקיפת היפגשות באמצע
* קריפטואנליזה ליניארית
* קריפטואנליזה דיפרנציאלית
* התקפת גלוי-ידוע
* התקפת גלוי-נבחר
* התקפת מוצפן-נבחר
* פירוק לגורמים של מספר שלם
* התקפת ערוץ צדדי
* התקפת קורלציה
* התקפת שיבוש
* מודל אורקל אקראי
* התקפת התנגשויות

 |

 |
| 

| בעיות מתמטיות ואלגוריתמים |
| --- |
| 
* בעיית לוגריתם דיסקרטי
* תחשיב אינדקסים
* נפה ריבועית
* אלגוריתם rho של פולרד
* נפת שדה מספרים
* אלגוריתם רו של פולרד ללוגריתמים
* אלגוריתם פוליג-הלמן

 |

 |
| 

| פונקציות גיבוב קריפטוגרפיות |
| --- |
| 
* SHA
* MD5
* MD4
* SHA-1
* SHA-2
* SHA-3
* RIPEMD
* Skein
* BLAKE
* Grøstl
* SipHash

 |

 |
| 

| אימות וזיהוי |
| --- |
| 
* אימות זהות
* סיסמה
* קוד אימות מסרים
* Poly1305
* סיסמה חד-פעמית

 |

 |
| 

| נושאים נלווים |
| --- |
| 
* מספר אקראי
* מספר ראשוני
* יתירות
* מפתח שיחה
* סטגנוגרפיה
* הצפנה קוונטית
* הצפנה פוסט-קוונטית
* עקרון קרקהופס
* אבטחת מידע
* קריפטוגרפיה ויזואלית
* אליס ובוב
* מסיבת חתימה על מפתחות ציבוריים
* שידור מוצפן
* הצפנת דיסקים
* הצפנת סף
* חתימה דיגיטלית מבוססת פונקציית גיבוב
* פונקציה זניחה
* רשת פייסטל
* רשת החלפה-תמורה
* הלבנה
* אימות מסרים
* חתימה עיוורת
* חישוב רב משתתפים בטוח

 |

 |