צופן RC4 מקבל כקלט טקסט קריא (plaintext) ומפתח (key), כאשר המפתח הסודי יכול להיות בכל אורך רצוי בין 40 ל-256 סיביות. כמו בכל צופן זרם, כדי להצפין את הטקסט הגלוי RC4 מייצר רצף סיביות פסאדו-אקראי הנקרא "זרם מפתח" באמצעות מחולל פסאודו-אקראי (PRG) מובנה. זרם הסיביות האקראי משולב עם הטקסט הקריא בית אחר בית, באמצעות חיבור בינארי (XOR) בדומה לצופן ורנם. פענוח מתבצע בדרך זהה.
הזיכרון הפנימי או המצב הפנימי (internal state) של האלגוריתם מורכב משני חלקים:
זרם המפתח שבעזרתו מצפינים את המסר מופק באמצעות שימוש באלגוריתם הכנת מפתח – Key Scheduling Algorithm (בקיצור KSA) כדי לערבב את תיבת התמורה formula_4, ולאחר מכן שימוש במחולל הפנימי PRGA כדי לייצר את הזרם הסופי. באלגוריתם הכנת המפתח, תחילה מערך הבתים formula_4 מאותחל עם 256 ערכים קבועים ולאחר מכן המערך מעורבב תוך שימוש בכל בתי מפתח ההצפנה, בעזרת טכניקה הקרויה Shuffle (בדומה לערבוב קלפים). התוצאה היא תמורה פסאודו-אקראית שאיתה הצופן מייצר בשלב הבא את זרם המפתח (key stream).
להלן תיאור שתי הפונקציות של הצופן – תהליך ההכנה KSA והמחולל הפנימי PRGA (קיצור של Pseudo-Random Generation Algorithm), כאשר הקלט הוא מערך formula_6 באורך formula_7 בתים המכיל את המפתח הסודי שמסופק על ידי המשתמש. formula_8 מייצג את מספר האלמנטים במערך formula_4 וכן את הערך המקסימלי של כל אלמנט, בדרך כלל formula_10, כלומר 256 כניסות של אלמנטים בגודל בית אחד (formula_11).
ההצפנה מתבצעת על ידי PRGA בית אחר בית במספר החזרות הנדרש עד להצפנת כל הטקסט הקריא. בכל סבב של PRGA האלגוריתם מעדכן את מצב הצופן ומפיק בית אחד של זרם המפתח. האינדקס formula_12 מקודם צעד אחד, הערך המצוי באינדקס formula_12 במערך formula_4 מוסף ל-formula_15, ערכי formula_16 ו-formula_17 מחליפים מקומות (Swap) והפלט הוא האיבר formula_18 - אותו מחברים בינארית (XOR) עם בית הטקסט הקריא הנוכחי. כל פעולות החיבור בצופן מבוצעות מודולו 256 (גודל בית אחד). כל איבר במערך formula_4 מוחלפת לפחות פעם אחת כל 256 סבבים.
לדוגמה, אם מפתח ההצפנה הוא "Secret" ומחרוזת הטקסט היא "Attack at dawn" התוצאה תהיה:
RC4("Secret", "Attack at dawn") = 45A01F645FC35B383552544B9BF5
יישומים.
צופן RC4 אידיאלי ליישום בתוכנה, במיוחד לאור העובדה שהצופן מטפל במידע בבתים ולא סיביות. הזיכרון הנדרש לצופן הזה נמוך ביותר (רק 256 בתים). ופעולת מודולו 256 אפשר לבצע באמצעות אופרטור בינארי AND ולהימנע מחילוק (פעולה בזבזנית יותר) ובמיוחד שבפלטפורמות רבות התקן הוא שפעולת חיבור או כפל בבתים מניבה תוצאה בגבולות בית אחד כאשר התוצאה למעשה נחתכת. כלומר כיוון שהמהדר מבצע מודולו באופן עקיף, אפשר פשוט לבצע פעולות כפל וחיבור רגיל ולהתעלם לחלוטין מהמודולו.
ביטחון.
לצופן RC4 חסרונות ידועים רבים. זרם המפתח המיוצר באמצעות המחולל הפנימי של האלגוריתם סובל מהטיה קלה ועל כן אינו אקראי לגמרי. ישנה התקפה המנצלת עובדה זו כדי לפצח את הצופן. לכן רצוי לדלג לפחות על 512 הבתים הראשונים שנוצרו על ידי המחולל.
כדי למנוע התקפת גלוי-ידוע (chosen plaintext attack), צפנים מודרניים מצרפים וקטור אתחול לצד המפתח כדי להבטיח שהצפנה חוזרת של טקסט קריא זהה, תניב טקסט מוצפן שונה. RC4 אינו מיישם טכניקה זו על כן הזרם המוצפן חלש. כלומר בהינתן טקסט קריא זהה הפלט יהיה תמיד זהה (אם משתמשים באותו מפתח). עובדה זו מהווה נקודת תורפה שניתן לנצלה כדי לתקוף את הצופן. שרשור מספר אקראי למפתח הסודי כפי שנעשה בפרוטוקול WEP בעבר, אינו בטוח ואף הוביל להתקפה מוצלחת. דרך טובה יותר היא למזג את המפתח עם ערך אקראי באמצעות פונקציית גיבוב עם מפתח.
להלן תקציר החולשות והפגמים שהתגלו במרוצת השנים מאז פרסומו של RC4 ב-1994.
התקפת הבחנה.
התקפת הבחנה (Distinguishing Attack) היא התקפה סטטיסטית על פלט מחולל זרם המפתח. במצב אידיאלי, זרם המפתח אמור להראות על פניו כרצף אקראי לכל דבר. כלומר לא ניתן יהיה להבדילו מרצף אקראי שנוצר ממחולל אקראי אמיתי. מחולל זרם המפתח של RC4 הוא לא יותר מאשר מחולל פסאודו-אקראי שמקבל גרעין התחלתי סודי שהוא המפתח "ומותח" אותו למחרוזת אקראית באורך רצוי. התקפת הבחנה מתמקדת במציאת הבדלים או ניתוח ההסתברות שסיבית 1 או 0 תופיע בפוזיציה מסוימת בהשוואה לזרם אקראי אמיתי. אלגוריתם הבחנה מקבל קלט באורך formula_36 בתים שמקורם יכול להיות מזרם המפתח או ממחולל אקראי אמיתי ותפקידו להחזיר תשובה לאיזה סוג מהם הוא משתייך. אם נמצאו הבדלים, עובדה זו כשלעצמה יכולה לפתוח פתח להתקפות ולשבירת הצופן.
למרות האמור מערכות רבות בעולם עדיין משתמשות בטכנולוגיה המיושנת בעיקר מסיבות של יעילות ולמרות אמצעי הזהירות שננקטים, מומחים מתריעים על כך שקיימות פרצות חמורות במערכות אלו וישנן אף כאלו שניתן לפרוץ אותן תוך מספר שניות.
גרסאות מתקדמות.
למרות החולשות שהתגלו בצופן RC4, הוא אטרקטיבי בשל העובדה שהוא נוח ויעיל למימוש בתוכנה. הרוב סבורים שכדאי לעבור לצפני זרם חזקים יותר שנבדקו והתקבלו על ידי eSTREAM כמו HC-128. אילו צפני זרם הפועלים בדרך כלל ברמה של מילים בגודל 32 או 64 סיביות והם בטוחים יותר לשימוש, אם כי מעט מורכבים ליישום.
קיימים צפני זרם רבים שמנסים לחקות את המבנה של RC4. כלומר פרמוטציה פנימית גדולה שנקראת מצב (state) והיא מורכבת בדרך כלל ממערך אחד או יותר של formula_8 אלמנטים כל אחד בגודל formula_8, מספר מוגבל של אינדקסים ופעולת חיבור מודולו formula_8 לעיתים בתוספת הזזה מעגלית (rotation). להלן כמה מהם: Py, Py6, IA, ISAAC, NGG, GGHN. חלקם הוצעו לפרויקט ECRYPT האירופאי. כל הצפנים המנויים לא עמדו במבחן קריפטואנליזה (התקפת הבחנה) ונפסלו. לעומתם קיימים מספר אלגוריתמים מבוססי RC4 ששרדו קריפטואנליזה, ביניהם ניתן למנות את: IBAA, Pypy, HC-256, VMPC.
באופן כללי היתרונות של צופן RC4 הם:
חסרונות:
נעשו מספר מאמצים לתקן את הליקויים של צופן RC4 על מנת ליהנות מפשטותו הרבה מבלי להיחשף לחולשות האמורות. להלן ארבע גרסאות ידועות של אלגוריתם RC4 שהוצעו כתחליף למקורי וחלקן הוכחו כבטוחות יותר.
RC4A הוצע ב-2004 על ידי Bart Preneel ו-Souradyuti Paul כחלופה לאלגוריתם המקורי. האלגוריתם מבצע פחות פעולות פר בית אחד ותומך במקביליות. אחת ההתקפות הידועות נגד RC4 היא התקפת הבחנה המבוססת על רמת מתאם גבוהה בין המצב הפנימי לפלט האלגוריתם. הפתרון שהוצע הוא לגרום לתלות נוספת של הפלט עם משתנים אקראיים נוספים, כך ההסתברות לניחוש מוצלח של בתי המצב הפנימי תוך התבוננות בפלט תהיה נמוכה יותר. על בסיס הרעיון הזה עוצב RC4A. הצופן הוא הרחבה של המחולל הפנימי PRGA של צופן RC4 בעוד שתהליך הכנת המפתח נותר ללא שינוי. לצורך כך משתמשים בשתי תמורות (מערכים) formula_42 במקום אחת וכן שני אינדקסים formula_43 במקום אחד. הכנת התמורות נעשית על ידי KSA של RC4 לעיל עם שני מפתחות סודיים שונים formula_44 (אחד יכול להיות מופק מהשני באמצעות פונקציה פסאודו-אקראית כלשהי כמו RC4). להלן תיאור האלגוריתם:
בכל ריצה של המחולל הפנימי האינדקס formula_12 מקודם פעם אחת ונוצרים שני בתים של זרם מפתח, אחד מכל מערך. הפונקציה Swap מתוארת לעיל.
הצופן Variably Modified Permutation Composition פותח ב-2004 על ידי Bartosz Zoltak והוצע כתחליף ל-RC4. הרעיון מבוסס על פונקציית פלט מורכבת יותר: formula_46. כאשר formula_47 היא פרמוטציה, זאת במטרה להקשות על ניחוש וכן למנוע הטיות סטטיסטיות לא רצויות של זרם המחולל. אלגוריתם ההכנה מקבל מפתח formula_6 באורך formula_49 בתים וכן וקטור אתחול formula_50 באורך formula_51 בתים ומערבב את הפרמוטציה הראשונית בהתאם. פלט המחולל הפנימי הוא בית אחר בית עד למספר הבתים הרצוי formula_52 שהוא אורך המסר להצפנה בבתים.
צופן RC4+ הוצע ב-2008 על ידי Subhamoy Maitra ו-Goutam Paul כחלופה בטוחה לצופן RC4. הצופן משתמש בטכניקת ערבוב בשלוש שכבות שונות בשילוב עם וקטור אתחול. לאחר השינויים הצופן בטוח יותר אך לא קיימת הוכחה פורמלית לכך. המחקר בתחום יימשך וייתכנו גילויים חדשים. האלגוריתם הבא המקבל מפתח סודי ווקטור אתחול, שניהם באורך שרירותי ומפיק זרם מפתח באורך הרצוי. סימנים מוסכמים: formula_53 מייצג XOR וכן formula_54 מייצג הזזה (Shift) שמאלה, formula_55 מייצג הזזה ימינה, formula_56 קבוע הקסדצימלי (170 בייצוג עשרוני):
Spritz.