RC4


כל מה שרצית לדעת על RC4:
צופן RC4, הנו צופן זרם מבוסס תוכנה הנפוץ ביותר כיום.
עקב פשטותו הרבה הוא בשימוש במרבית פרוטוקולי האבטחה הנפוצים כמו פרוטוקול SSL לאבטחת תעבורת הרשת וכן WEP (אבטחת רשת אלחוטית) וגרסאות שלו מיושמות בשיפורים קלים במערכות רבות כמו חלונות ו-WPA.
נכון לשנת 2014 צופן RC4 אינו עומד בדרישות האבטחה בסטנדרטים של ימינו ושימוש לא נכון בו עלול להוביל לפרצות אבטחה חמורות.
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).
תחילה המערך מאותחל בשלמים 0 עד 255 ולאחר מכן מעובד בעזרת המחולל הפסבדו אקראי המובנה, תוך שימוש בכל סיביות מפתח ההצפנה.
המפתח יכול להיות בכל אורך רצוי (בדרך כלל בין 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];
}

זהו פסאדו קוד קל יותר להבנה

for i from 0 to 255
S[i] := i
endfor
j := 0
for i from 0 to 255
j := (j + S[i] + key[i mod keylength]) mod 256
swap values of S[i] and S[j]
endfor

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