RC4
מתוך ויקיפדיה, האנציקלופדיה החופשית
צופן RC4, הנו צופן זרם מבוסס תוכנה הנפוץ ביותר כיום. הוא בשימוש במרבית פרוטוקולי האבטחה הנפוצים כמו פרוטוקול SSL לאבטחת תעבורת הרשת וכן WEP (אבטחת רשת סלולרית). חרף פשטותו הרבה, צופן זה אינו עומד בדרישות האבטחה הגבוהות בסטנדרטים של ימינו. שימוש לא נכון בו עלול להוביל לפרצות אבטחה חמורות. למרות זאת הצופן עדיין מיושם (בשיפורים קלים) במערכות מסוימות כמו WEP ו-WPA, שמעשית נחשבות לבטוחות.
RC4 פותח על ידי רונלד ריבסט ב-1987 במעבדות RSA. שמו הרשמי נגזר מראשי התיבות Rivest Cipher 4 אולם לעתים מפרשים את האותיות RC כ-Ron's code (הקוד של רון). פיתוחים נוספים שלו הם RC5 וכן RC6 שנימנה בין המועמדים המובלים לתקן ההצפנה החדש שבו זכה AES. עד 1994 נשמר צופן RC4 כסוד מסחרי עד שפורסם ברבים, תחילה באופן אנונימי בקבוצות דיון קריפטוגרפיות ומשם עשה דרכו לרשת האינטרנט. השם RC4 הינו סימן מסחרי ובאופן לא רשמי השימוש בצופן מותר, אך לא תחת שמו המקורי. היות ומעבדות RSA מעולם לא פרסמו את פרטי האלגוריתם באופן רשמי, יש המכנים אותו ARCFOUR שפירושו "כביכול RC4". הסיבה לכך שהצופן כה נפוץ נעוצה בפשטותו, מהירותו הרבה וקלות יישומו בחומרה ובתוכנה.
צופן RC4 הינו צופן פשוט וקל לתיאור. הצופן מייצר רצף סיביות פסבדו אקראי הנקרא "זרם מפתח" באמצעות מחולל פסבדו אקראי (PRG) מובנה. זרם הסיביות האקראי משולב עם הטקסט הקריא בית אחר בית, באמצעות חיבור בינארי (XOR) בדומה לצופן ורנם. פענוח מתבצע בדרך זהה. החלק העיקרי של האלגוריתם מורכב משני חלקים:
- תיבת תמורה של כל 256 הבתים האפשריים (מערך של 256 בתים המיוצג כ- להלן).
- שני בתים המשמשים כאינדקסים המיוצגים כ- ו-.
זרם המפתח כאמור מופק באמצעות אלגוריתם תזמון מפתח (Key Scheduling algorithm). תחילה המערך מאותחל בשלמים 1 עד 256 ולאחר מכן מעובד בעזרת המחולל הפסבדו אקראי המובנה, תוך שימוש בכל סיביות מפתח ההצפנה. המפתח יכול להיות בכל אורך רצוי (בדרך כלל בין 40 ל-256 סיביות). להלן קוד ב-C המתאר את אלגוריתם הכנת המפתח:
int i, j = 0; for(i = 0; i < 256; i++) S[i] = i; for(i = 0; i < 256; i++) { j = (j + S[i] + key[i % key_length]) % 256; S[i] ^= S[j], S[j] ^= S[i], S[i] ^= S[j]; }
ההצפנה מתבצעת כאמור בית אחר בית, במספר החזרות הנדרש עד להצפנת כל הטקסט הקריא. בכל סבב האלגוריתם מעדכן את מצב הצופן ומפיק בית מפתח אחד כדלהלן: האינדקס מקודם צעד אחד, הערך המצוי בכניסה במערך מוסף ל-, ערכי ו- מחליפים מקומות ואז מחברים את עם הבית הנוכחי בטקסט הקריא ב-XOR. כאשר כל הפעולות מבוצעות מודולו 256 (גודל בית אחד). כל כניסה במערך מוחלפת לפחות פעם אחת כל 256 סבבים. קוד פשוט של האלגוריתם נראה כדלהלן:
char RC4(char m) { i = (i + 1) % 256; j = (j + S[i]) % 256; S[i] ^= S[j], S[j] ^= S[i], S[i] ^= S[j]; return m ^ S[(S[i] + S[j]) % 256]; }
לדוגמה אם מפתח ההצפנה הוא "Secret" ומחרוזת הטקסט היא "Attack at dawn" התוצאה תהיה:
RC4("Secret", "Attack at dawn") = 45A01F645FC35B383552544B9BF5
[עריכה] יישומים
צופן RC4 אידאלי ליישום בתוכנה בניגוד לצופני זרם אחרים שבדרך כלל מיושמים בחומרה, במיוחד לאור העובדה שהצופן מטפל במידע בבתים ולא סיביות. הזכרון הנדרש לצופן הזה נמוך ביותר (רק 256 בתים). ופעולת מודולו 256 אפשר לבצע באמצעות אופרטור בינארי AND ולהימנע מחילוק (פעולה בזבזנית יותר) ובמיוחד שבפלטפורמות רבות התקן הוא שפעולת חיבור או כפל בבתים מניבה תוצאה בגבולות בית אחד כאשר התוצאה למעשה נחתכת. כלומר כיוון שהמהדר מבצע מודולו באופן עקיף, אפשר פשוט לבצע פעולות כפל וחיבור רגיל ולהתעלם לחלוטין מהמודולו.
[עריכה] בטיחות
לצופן RC4 ישנם מספר חסרונות ידועים ועל כן לא מומלץ לשימוש ביישומים חדשים. זרם המפתח המיוצר באמצעות המחולל הפנימי של האלגוריתם סובל מהטייה קלה ועל כן אינו אקראי לגמרי. ישנה התקפה המנצלת עובדה זו כדי לפצח את הצופן.
כדי למנוע התקפות טקסט מוצפן נבחר, צופנים מודרניים בדרך כלל מצרפים ערך אקראי כלשהו לצד המפתח, זאת כדי להבטיח כי הצפנה חוזרת של טקסט קריא זהה, תניב טקסט מוצפן שונה. RC4 אינו מיישם טכניקה זו על כן הזרם המוצפן חלש. כלומר בהינתן טקסט קריא זהה הפלט יהיה תמיד זהה (אם משתמשים באותו מפתח). עובדה זו מהווה נקודת תורפה שניתן לנצלה כדי לתקוף את הצופן. ניתן להתגבר על חסרון זה על ידי שרשור אקראיות למפתח, אולם דרך זו אינה בטוחה כפי שיובא להלן. הדרך העדיפה היא לערבל את המפתח עם ערך אקראי כלשהו באמצעות פונקציית גיבוב עם מפתח (HMAC).
מבדיקה סטטיסטית שעשו ב-2001 גילו שמיר, מנטין ופלורר שהבתים הראשונים של זרם המפתח של צופן RC4 אינם אקראיים לגמרי ומדליפים מידע לגבי המפתח. אם פשוט משרשרים ערך אקראי למפתח לפני ההצפנה, אפשר לחשוף את המפתח בניתוח כמות רבה של טקסטים המוצפנים עם מפתח זה. נתון זה, אפשר להם לפתח התקפה יעילה כנגד WEP (מערכת אבטחה לרשת סלולרית). העובדה ש-WEP נפרצה הובילה לפיתוח תקנים מחמירים יותר כמו תקן IEEE 802.11i. וכן הובילה לפיתוח הדור השני באבטחת רשת סלולרית WPA.
[עריכה] קישורים חיצוניים
- התקפה מעשית כנגד RC4 של איצק מנטין ועדי שמיר.
- נקודות תורפה באלגוריתם תיזמון מפתח של RC4, פלורר, מנטין ושמיר מכון ויצמן למדע, 2001.
- Using the Fluhrer, Mantin, and Shamir Attack to Break WEP, Stubblefield, Loannidis, and Rubin, מעבדות AT&T.
קטגוריות: הצפנה | צופן סימטרי | צופן זרם