Movatterモバイル変換


[0]ホーム

URL:


לדלג לתוכן
ויקיפדיההאנציקלופדיה החופשית
חיפוש

Blowfish

מתוך ויקיפדיה, האנציקלופדיה החופשית

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

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

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

[עריכת קוד מקור |עריכה]
מבנה סכימתי של יישוםרשת פייסטל באלגוריתם Blowfish. הסמל{\displaystyle \oplus } מייצג XOR

הקלט הוא הערךx{\displaystyle x} (בלוק מידע המיועד להצפנה) בגודל 64 סיביות ומפתח מורחב (ראה תהליך הרחבת מפתח) המיוצג על ידי הטבלהP{\displaystyle P} המכילה 18 כניסות:

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

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

2.1xL=xLPi{\displaystyle x_{L}=x_{L}\oplus P_{i}} (הסמל{\displaystyle \oplus } מייצגXOR)
2.2xR=F(xL)xR{\displaystyle x_{R}=F(x_{L})\oplus x_{R}}
2.3 החלף מקומות ביןxL{\displaystyle x_{L}} ו-xR{\displaystyle x_{R}}

3. החלף מקומות ביןxL{\displaystyle x_{L}} ו-xR{\displaystyle x_{R}} (מבטל את ההחלפה מהסבב האחרון)

4.xR=xRP17{\displaystyle x_{R}=x_{R}\oplus P_{17}}

5.xL=xLP18{\displaystyle x_{L}=x_{L}\oplus P_{18}}

6. חבר מחדש אתxL{\displaystyle x_{L}} ו-xR{\displaystyle x_{R}}.

הפונקציהF{\displaystyle F} מחלקת אתxL{\displaystyle x_{L}} לארבעה בתים:a,b,c,d{\displaystyle a,b,c,d} המשמשים כאינדקס לערך המתאים בתיבות ההחלפה (ראה להלן) ומחשבת כדלהלן:F(xL)=((S1,a+S2,b mod 232)S3,c)+S4,d mod 232{\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 סיביותP1,P2,...,P18{\displaystyle P_{1},P_{2},...,P_{18}}. ראשית מאתחלים את כל כניסות הטבלה בערכים קבועים שהם ספרות פאי לאחר הנקודה. להלן ארבעת הערכים הראשונים בייצוגהקסדצימלי:

P1=243F6A88{\displaystyle P_{1}={\mbox{243F6A88}}}
P2=85A308D3{\displaystyle P_{2}={\mbox{85A308D3}}}
P3=13198A2E{\displaystyle P_{3}={\mbox{13198A2E}}}
P4=03707344{\displaystyle P_{4}={\mbox{03707344}}}

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

  1. dl=0,dr=0{\displaystyle dl=0,dr=0}
  2. For i=1 to 9 Do:{\displaystyle {\mbox{For }}i=1{\mbox{ to }}9{\mbox{ Do:}}}
(dl,dr)Encipher(dl,dr){\displaystyle (dl,dr)\leftarrow {\mbox{Encipher}}(dl,dr)}
P2i1=dl{\displaystyle P_{2i-1}=dl}
P2i=dr{\displaystyle P_{2i}=dr}

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

תיבות החלפה

[עריכת קוד מקור |עריכה]

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

  1. dl=0,dr=0{\displaystyle dl=0,dr=0}
  2. For i=1 to 4 Do:{\displaystyle {\mbox{For }}i=1{\mbox{ to }}4{\mbox{ Do:}}}
For j=1 to 256 Do: {\displaystyle {\mbox{For }}j=1{\mbox{ to }}256{\mbox{ Do: }}}
(dl,dr)Encipher(dl,dr){\displaystyle (dl,dr)\leftarrow {\mbox{Encipher}}(dl,dr)}
Si,j=dl{\displaystyle S_{i,j}=dl}
Si,j+1=dr{\displaystyle S_{i,j+1}=dr}

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

פענוח

[עריכת קוד מקור |עריכה]

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

ביטחון

[עריכת קוד מקור |עריכה]

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

ראו גם

[עריכת קוד מקור |עריכה]

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

[עריכת קוד מקור |עריכה]
ויקישיתוף מדיה וקבצים בנושאBlowfish בוויקישיתוף
מושגי יסוד
RC4Salsa20SOSEMANUKגרייןE0A5/1A5/2A5/3A5/4MICKEYHC-128SNOWTriviumRabbitZUCChaCha
פרימיטיבים תאורטיים
בעיות מתמטיות ואלגוריתמים
SHAMD5MD4SHA-1SHA-2SHA-3RIPEMDSkeinBLAKEGrøstlSipHash
אימות וזיהוי
נושאים נלווים
אוחזר מתוך "https://he.wikipedia.org/w/index.php?title=Blowfish&oldid=38514542"
קטגוריה:

[8]ページ先頭

©2009-2025 Movatter.jp