MICKEY הוא צופן זרם סינכרוני המיועד לפלטפורמת חומרה מוגבלת משאבים, שפותח ב-2006 על ידי סטיב באבג' מחברת וודאפון ומת'יו דוֹד. שם הצופן הוא ראשי התיבות של Mutual Irregular Clocking KEYstream, והוא מבוסס על אוגר זיזה ממושב (LFSR) שמבוקר בטכניקה ייחודית לאיזון בין הצורך במחזוריות גבוהה ופסאודו-אקראיות לבין הצורך בעמידות נגד קריפטואנליזה. הוא מספק רמה גבוהה יחסית של ביטחון לחומרה בעלת סיבוכיות נמוכה. גרסת MICKEY 2.0 נבחרה על ידי eSTREAM[1] כצופן מועדף לשימוש יחד עם מבחר אלגוריתמים נוספים בקטגוריית חומרה. הצופן מקבל מפתח סודי בגודל 80 סיביות ווקטור אתחול בגודל של עד 80 סיביות ומייצר זרם פסאודו-אקראי באורך מרבי של סיביות, המשמש כמפתח להצפנת זרם הנתונים באמצעות XOR כבכל צופן זרם.
תיאור הצופן
הצופן מורכב משני אוגרי LFSR המסומנים ב- ו- כל אחד בגודל 100 סיביות הנקראות מצבים (states) שמסומנים בקיצור וכן בהתאמה. בכל פעימת שעון (clocking) כל הסיביות או המצבים מוסטים שלב אחד כלפי מטה (ימינה) והפוזיציות הבאות של האוגר משמשות להיזון חוזר (feedback):
CLOCK_R
הפרוצדורה CLOCK_R (clocking מתייחס לעדכון האוגר בכל פעימת שעון) ייחודית בכך שהיא משתנה בהתאם לפרמטר. קלט הפונקציה הוא סיבית-קלט וסיבית בקרה , הסימן הוא XOR והסיביות מייצגות את מצבו החדש של האוגר לאחר העדכון.
בכל פעימה כאשר סיבית הבקרה מאופסת מתבצעת הזזה פוזיציה אחת והזנה (feedback) לפי הפוזיציות המנויות ב-RTAPS. המשמעות של ההזזה במונחים של אלגברה שהיא פועלת כמו כפל אלמנטים בשדה סופימורחבמודולוהפולינום הפרימיטיבי
.
כי בעצם אפשר לראות במצבי האוגר כמקדמים בינאריים של פולינום כלשהו ממעלה 100 כאשר המצב השמאלי הוא המקדם המוביל. כאן הכפל הוא בין המצב הנוכחי של האוגר לפולינום או (היות שהמקדמים בינאריים זוהי מחרוזת שבה רק הסיבית השנייה משמאל דלוקה). פעולת כפל זו שקולה למעשה לפעולת ההזזה (shift) של כל סיביות האוגר ימינה. בנוסף מחברים ב-XOR את סיבית-הקלט למצב הנוכחי.
כאשר סיבית הבקרה היא '1', לאחר ההזזה האמורה כל סיביות המצב מחוברת בחזרה ב-XOR (כמתואר בתרשים). במונחי אלגברה בשדה פירוש הפעולה הוא כפל בפולינום (הזזה שקולה לכפל ו-XOR שקול לחיבור). הפולינום נבחר כך שהוא מתחלק ב- כאשר . קריאה לפונקציית ההיזון עם סיבית הבקרה הדינאמית דלוקה שקולה ל- הזזות. להלן ניסוח פורמלי של הפונקציה:
האוגר S
תחילה מוגדרות ארבע מחרוזות ערכים קבועים: COMP0, COMP1, FB0, FB1 כל אחת באורך 100 סיביות (כמתואר בטבלה המצורפת). הפונקציה לעדכון האוגר מקבלת כקלט שתי סיביות וכן ומפיקה ערכי ביניים המשתנים בהתאם לסיבית הבקרה. התוצאה מומרת למערך סיביות הפלט . הסימן מייצג את הפעולה הלוגית AND. הפונקציה פועלת כדלהלן:
הפרוצדורה CLOCK_KG
המחולל המייצר את זרם המפתח שנקרא keystream generator מוגדר כדלהלן; הקלט הוא שני האוגרים ו- וכן דגל אתחול שנקרא ('1' מציין את שלב אתחול שבו רק מריצים את הצופן ומתעלים מהפלט ו'0' מציין שימוש רגיל) וסיבית קלט . הפרמטר סיבית הבקרה של שתי הפונקציות לעיל מוגדרות כך:
וכן
.
אם הדגל סיבית הקלט של האוגר תהיה אחרת תהיה עצמה. סיבית הקלט של האוגר היא .
בכל פעימת שעון המחולל קורא לפונקציות הבאות להפקת סיבית מפתח אחת:
תוצאת המחולל היא XOR של שתי הסיביות במצבי האפס. כלומר .
טעינת מפתח
מפתח ההצפנה הסודי שמסופק על ידי המשתמש אינו נטען ישירות לאוגרים כדי למנוע התקפות מסוימות, אלא תחת זאת הטעינה מתבצעת באמצעות הפרוצדורה הבאה. המפתח המיוצג על ידי מחרוזת של 80 סיביות ווקטור האתחול באורך (עד 80 סיביות) נטענים למצב הראשוני של האוגרים כדלקמן: תחילה האוגרים מאופסים ואז, לטעינת וקטור האתחול מבצעים:
לטעינת המפתח מבצעים:
ואז מריצים את הצופן 100 פעימות לצורך הכנה. בשלב זה הפלט אינו משמש כמפתח ההצפנה.
הצפנה ופענוח
שני המצבים התחתונים של האוגרים ו- בהתאמה, מחוברים ב-XOR : מהם מתקבלת סיבית פסאודו-ראנדומלית אחת המהווה חלק מזרם המפתח המשמש להצפנת המידע. הקריאה לפרוצדורה להפעלת הצופן במקרה זה מבוצעת עם הפרמטר וסיבית קלט 0 כלומר עבור כל סיבית מידע מבצעים:
פענוח מתבצע באותה דרך בדיוק:
ביטחון
ב-2005 במהלך בדיקת הצופן על ידי eSTREAM התגלו שלוש חולשות בגרסה המקורית.
העובדה שהזיכרון הכולל הוא 160 סיביות שהוא המינימלי ביותר האפשרי (מינימום הזיכרון הדרוש כדי להבטיח את ביטחון הצופן מקובל שיהיה פי שנים מגודל המפתח), עדיין מתאפשרת התקפת איזון זמן/זיכרון/דטה שפורסמה לראשונה על ידי אלכס ביריוקוב ועדי שמיר.
למרות הצהרת המפתחים שמינימום מחזוריות הצופן היא , האנטרופיה של המצב הפנימי (הזיכרון) נחלשת עם הזמן ככל שהצופן פועל.
המבקרים מציינים שגילו קבוצה קטנה של מפתחות הצפנה שנקראים 'מפתחות חלשים' במובן ששימוש בהם מאפשר לנחש את המצב הפנימי. בכל אופן המפתחים היו מודעים לעובדה זו אך למען שמירה על יעילות בחרו להתעלם מכך בטענה שהסבירות נמוכה מ- שמפתח כזה ייבחר באקראי. אולם למעשה התגלה שהיא גבוהה במעט ממה שהעריכו. גרסת MICKEY 2 המתוארת כאן טובה יותר במובן שההתקפות המתוארות אינן יעילות כנגדה.
בשנת 2013 פותחה התקפה כנגד MICKEY 2.0 שהיא שיפור של התקפת Differential Fault Attack בקיצור DFA[2] שיכולה לחשוף את המצב הפנימי כולו בשלב אתחול הצופן בתוך הזרקות ובתוך ניסיונות חישוב בממוצע. ההתקפה מבוססת על יכולת התוקף לגרום לסיביות שגויות אקראיות במצב פנימי של הצופן והיא מנצלת את העובדה שפונקציית הפלט וכן פעולות עדכון מסוימות פשוטות מדי. ייתכן שאפשר לשפר את ביטחון הצופן על ידי כמה התאמות. לדעת מחברי ההתקפה היא ישימה כנגד כל הצפנים שנבחרו על ידי eSTREAM בקטגוריית חומרה.