שיטת ההיזון (feedback) המשתנה של צופן מיקי.
**MICKEY** הוא צופן זרם סינכרוני המיועד לפלטפורמת חומרה מוגבלת משאבים, שפותח ב-2006 על ידי סטיב באבג' מחברת וודאפון ומת'יו דוֹד. שם הצופן הוא ראשי התיבות של Mutual Irregular Clocking KEYstream, והוא מבוסס על אוגר זיזה ממושב (LFSR) שמבוקר בטכניקה ייחודית לאיזון בין הצורך במחזוריות גבוהה ופסאודו-אקראיות לבין הצורך בעמידות נגד קריפטואנליזה. הוא מספק רמה גבוהה יחסית של ביטחון לחומרה בעלת סיבוכיות נמוכה. גרסת MICKEY 2.0 נבחרה על ידי eSTREAM כצופן מועדף לשימוש יחד עם מבחר אלגוריתמים נוספים בקטגוריית חומרה. הצופן מקבל מפתח סודי בגודל 80 סיביות ווקטור אתחול בגודל של עד 80 סיביות ומייצר זרם פסאודו-אקראי באורך מרבי של {\displaystyle 2^{40}} סיביות, המשמש כמפתח להצפנת זרם הנתונים באמצעות XOR כבכל צופן זרם.

תיאור הצופן
-----------

הצופן מורכב משני אוגרי LFSR המסומנים ב-{\displaystyle R} ו-{\displaystyle S} כל אחד בגודל 100 סיביות הנקראות מצבים (states) שמסומנים בקיצור {\displaystyle r\_{0},...r\_{99}} וכן {\displaystyle s\_{0},...s\_{99}} בהתאמה. בכל פעימת שעון (clocking) כל הסיביות או המצבים מוסטים שלב אחד כלפי מטה (ימינה) והפוזיציות הבאות של האוגר {\displaystyle R} משמשות להיזון חוזר (feedback):

{\displaystyle {\text{RTAPS}}=\{0,1,3,4,5,6,9,12,13,16,19,20,21,22,25,28,37,38,41,42,45,46,50,52,54,56,58,}
{\displaystyle 60,61,63,64,65,66,67,71,72,79,80,81,82,87,88,89,90,91,92,94,95,96,97\}}

### CLOCK\_R

פונקציית ההזנה של אוגר R בצופן MICKEY. במקרה שסיבית הבקרה **CONTROL\_BIT\_R** היא אפס מתבצעת הזזה (shift) של כל הסיביות פוזיציה אחת וכן מתבצע XOR של סיבית הקלט **INPUT\_BIT\_R** עם כל הסיביות בפוזיציות המופיעות ב-RTAPS. כאשר סיבית הבקרה היא אחד, בנוסף לאמור כל סיביות המצב מוזנות בחזרה עם XOR.
הפרוצדורה CLOCK\_R (‎clocking מתייחס לעדכון האוגר בכל פעימת שעון) ייחודית בכך שהיא משתנה בהתאם לפרמטר. קלט הפונקציה הוא סיבית-קלט {\displaystyle {\text{INPUT}}\\_{\text{BIT}}\\_{\text{R}}} וסיבית בקרה {\displaystyle {\text{CONTROL}}\\_{\text{BIT}}\\_{\text{R}}}, הסימן {\displaystyle \oplus } הוא XOR והסיביות {\displaystyle r\_{0}',...r\_{99}'} מייצגות את מצבו החדש של האוגר לאחר העדכון.

בכל פעימה כאשר סיבית הבקרה מאופסת מתבצעת הזזה פוזיציה אחת והזנה (feedback) לפי הפוזיציות המנויות ב-RTAPS. המשמעות של ההזזה במונחים של אלגברה שהיא פועלת כמו כפל אלמנטים בשדה סופי מורחב {\displaystyle GF(2^{100})} מודולו הפולינום הפרימיטיבי

{\displaystyle \textstyle C\_{R}(x)=x^{100}+\sum \_{i\in {\text{RTAPS}}}x^{i}}.
כי בעצם אפשר לראות במצבי האוגר כמקדמים בינאריים של פולינום כלשהו ממעלה 100 כאשר המצב השמאלי הוא המקדם המוביל. כאן הכפל הוא בין המצב הנוכחי של האוגר לפולינום {\displaystyle x} או {\displaystyle p(x)=a\_{1}x} (היות שהמקדמים בינאריים זוהי מחרוזת שבה רק הסיבית השנייה משמאל דלוקה). פעולת כפל זו שקולה למעשה לפעולת ההזזה (shift) של כל סיביות האוגר ימינה. בנוסף מחברים ב-XOR את סיבית-הקלט {\displaystyle {\text{INPUT}}\\_{\text{BIT}}\\_{\text{R}}} למצב הנוכחי. 

כאשר סיבית הבקרה היא '1', לאחר ההזזה האמורה כל סיביות המצב מחוברת בחזרה ב-XOR (כמתואר בתרשים). במונחי אלגברה בשדה {\displaystyle GF(2^{100})} פירוש הפעולה הוא כפל בפולינום {\displaystyle x+1} (הזזה שקולה לכפל ו-XOR שקול לחיבור). הפולינום {\displaystyle C\_{R}(x)} נבחר כך שהוא מתחלק ב-{\displaystyle x^{J}+x+1} כאשר {\displaystyle J=2^{50}-157}. קריאה לפונקציית ההיזון עם סיבית הבקרה הדינאמית דלוקה שקולה ל-{\displaystyle J} הזזות. להלן ניסוח פורמלי של הפונקציה:

* {\displaystyle {\text{FEEDBACK}}\\_{\text{BIT}}=r\_{99}\oplus {\text{INPUT}}\\_{\text{BIT}}\\_{\text{R}}}
* {\displaystyle {\text{For }}i=1{\text{ to }}99{\text{ do: }}r\_{i}'=r\_{i-1}}
* {\displaystyle r\_{0}'=0}
* {\displaystyle {\text{For each }}i\in {\text{RTAPS do:}}}

{\displaystyle r\_{i}'=r\_{i}'\oplus {\text{FEEDBACK}}\\_{\text{BIT}}}
* {\displaystyle {\text{If CONTROL}}\\_{\text{BIT}}\\_{\text{R}}=1{\text{ then: }}}

{\displaystyle {\text{For }}i=0{\text{ to }}99{\text{ do: }}r\_{i}'=r\_{i}'\oplus r\_{i}}

### האוגר S

תחילה מוגדרות ארבע מחרוזות ערכים קבועים: COMP0, COMP1, FB0, FB1 כל אחת באורך 100 סיביות (כמתואר בטבלה המצורפת). הפונקציה לעדכון האוגר {\displaystyle S} מקבלת כקלט שתי סיביות {\displaystyle {\text{INPUT}}\\_{\text{BIT}}\\_{\text{S}}} וכן {\displaystyle {\text{CONTROL}}\\_{\text{BIT}}\\_{\text{S}}} ומפיקה ערכי ביניים {\displaystyle {\hat {s}}\_{i}} המשתנים בהתאם לסיבית הבקרה. התוצאה מומרת למערך סיביות הפלט {\displaystyle s\_{0}',...s\_{99}'}. הסימן {\displaystyle \odot } מייצג את הפעולה הלוגית AND. הפונקציה פועלת כדלהלן:

* {\displaystyle {\text{FEEDBACK}}\\_{\text{BIT}}=s\_{99}\oplus {\text{INPUT}}\\_{\text{BIT}}\\_{\text{S}}}
* {\displaystyle {\text{For }}i=1{\text{ to }}98{\text{ do: }}{\hat {s}}\_{i}=s\_{i-1}\oplus ((s\_{i}\oplus {\text{ COMP0}}\_{i})\odot (s\_{i+1}\oplus {\text{ COMP1}}\_{i}))}
* {\displaystyle {\hat {s}}\_{0}=0,{\hat {s}}\_{99}=s\_{98}}
* {\displaystyle {\text{For }}i=0{\text{ to }}99{\text{ do: }}s\_{i}'={\hat {s}}\_{i}}
* {\displaystyle {\text{If FEEDBACK}}\\_{\text{BIT}}=1{\text{ then:}}}

{\displaystyle {\text{If CONTROL}}\\_{\text{BIT}}\\_{\text{S}}=0{\text{ then: }}{\text{For }}i=0{\text{ to }}99{\text{ do: }}s\_{i}'={\hat {s}}\_{i}\oplus {\text{FB0}}\_{i}}
{\displaystyle {\text{Else if CONTROL}}\\_{\text{BIT}}\\_{\text{S}}=1{\text{ then: }}{\text{For }}i=0{\text{ to }}99{\text{ do: }}s\_{i}'={\hat {s}}\_{i}\oplus {\text{FB1}}\_{i}}

טבלת ערכי ההזנה של האוגר S בצופן MICKEY
### הפרוצדורה CLOCK\_KG

המחולל המייצר את זרם המפתח שנקרא keystream generator מוגדר כדלהלן; הקלט הוא שני האוגרים {\displaystyle S} ו-{\displaystyle R} וכן דגל אתחול שנקרא {\displaystyle {\text{MIXING}}} ('1' מציין את שלב אתחול שבו רק מריצים את הצופן ומתעלים מהפלט ו'0' מציין שימוש רגיל) וסיבית קלט {\displaystyle {\text{INPUT}}\\_{\text{BIT}}}. הפרמטר סיבית הבקרה של שתי הפונקציות לעיל מוגדרות כך:

{\displaystyle {\text{CONTROL}}\\_{\text{BIT}}\\_{\text{R}}=s\_{34}\oplus r\_{67}} וכן
{\displaystyle {\text{CONTROL}}\\_{\text{BIT}}\\_{\text{S}}=s\_{67}\oplus r\_{33}}.
אם הדגל {\displaystyle {\text{MIXING}}={\text{TRUE}}} סיבית הקלט של האוגר {\displaystyle R} תהיה {\displaystyle {\text{INPUT}}\\_{\text{BIT}}\\_{\text{R}}={\text{INPUT}}\\_{\text{BIT}}\oplus s\_{50}} אחרת תהיה {\displaystyle {\text{INPUT}}\\_{\text{BIT}}} עצמה. סיבית הקלט של האוגר {\displaystyle S} היא {\displaystyle {\text{INPUT}}\\_{\text{BIT}}}. 

בכל פעימת שעון המחולל קורא לפונקציות הבאות להפקת סיבית מפתח אחת:

* {\displaystyle {\text{CLOCK}}\\_{\text{R}}({\text{INPUT}}\\_{\text{BIT}}\\_{\text{R}},{\text{CONTROL}}\\_{\text{BIT}}\\_{\text{R}})}
* {\displaystyle {\text{CLOCK}}\\_{\text{S}}({\text{INPUT}}\\_{\text{BIT}}\\_{\text{S}},{\text{CONTROL}}\\_{\text{BIT}}\\_{\text{S}})}

תוצאת המחולל היא XOR של שתי הסיביות במצבי האפס. כלומר {\displaystyle s\_{0}\oplus r\_{0}}.

### טעינת מפתח

מפתח ההצפנה הסודי שמסופק על ידי המשתמש אינו נטען ישירות לאוגרים כדי למנוע התקפות מסוימות, אלא תחת זאת הטעינה מתבצעת באמצעות הפרוצדורה הבאה. המפתח המיוצג על ידי מחרוזת של 80 סיביות {\displaystyle k\_{0},...k\_{79}} ווקטור האתחול באורך {\displaystyle ivlength} (עד 80 סיביות) {\displaystyle {\text{IV}}\_{0},...{\text{IV}}\_{ivlength-1}} נטענים למצב הראשוני של האוגרים כדלקמן: תחילה האוגרים מאופסים ואז, לטעינת וקטור האתחול מבצעים:

{\displaystyle {\text{For }}i=0{\text{ to }}(ivlength-1){\text{ do: CLOCK}}\\_{\text{KG}}(R,S,{\text{ TRUE }},{\text{IV}}\_{i})}
לטעינת המפתח מבצעים:

{\displaystyle {\text{For }}i=0{\text{ to }}79{\text{ do: CLOCK}}\\_{\text{KG}}(R,S,{\text{ TRUE }},k\_{i})}
ואז מריצים את הצופן 100 פעימות לצורך הכנה. בשלב זה הפלט אינו משמש כמפתח ההצפנה.

{\displaystyle {\text{For }}i=0{\text{ to }}99{\text{ do: CLOCK}}\\_{\text{KG}}(R,S,{\text{ TRUE }},0)}
### הצפנה ופענוח

שני המצבים התחתונים של האוגרים {\displaystyle R} ו-{\displaystyle S} בהתאמה, מחוברים ב-XOR ‏: {\displaystyle r\_{0}\oplus s\_{0}} מהם מתקבלת סיבית פסאודו-ראנדומלית אחת המהווה חלק מזרם המפתח המשמש להצפנת המידע. הקריאה לפרוצדורה להפעלת הצופן במקרה זה מבוצעת עם הפרמטר {\displaystyle {\text{MIXING}}={\text{FALSE}}} וסיבית קלט 0 כלומר עבור כל סיבית מידע {\displaystyle m\_{i}} מבצעים:

{\displaystyle c\_{i}={\text{CLOCK}}\\_{\text{KG}}(R,S,{\text{ FALSE }},0)\oplus m\_{i}}
פענוח מתבצע באותה דרך בדיוק:

{\displaystyle m\_{i}={\text{CLOCK}}\\_{\text{KG}}(R,S,{\text{ FALSE }},0)\oplus c\_{i}}

ביטחון
------

ב-2005 במהלך בדיקת הצופן על ידי eSTREAM התגלו שלוש חולשות בגרסה המקורית. 

1. העובדה שהזיכרון הכולל הוא 160 סיביות שהוא המינימלי ביותר האפשרי (מינימום הזיכרון הדרוש כדי להבטיח את ביטחון הצופן מקובל שיהיה פי שנים מגודל המפתח), עדיין מתאפשרת התקפת איזון זמן/זיכרון/דטה שפורסמה לראשונה על ידי אלכס ביריוקוב ועדי שמיר.
2. למרות הצהרת המפתחים שמינימום מחזוריות הצופן היא {\displaystyle 2^{40}}, האנטרופיה של המצב הפנימי (הזיכרון) נחלשת עם הזמן ככל שהצופן פועל.
3. המבקרים מציינים שגילו קבוצה קטנה של מפתחות הצפנה שנקראים 'מפתחות חלשים' במובן ששימוש בהם מאפשר לנחש את המצב הפנימי. בכל אופן המפתחים היו מודעים לעובדה זו אך למען שמירה על יעילות בחרו להתעלם מכך בטענה שהסבירות נמוכה מ-{\displaystyle 2^{-80}} שמפתח כזה ייבחר באקראי. אולם למעשה התגלה שהיא גבוהה במעט ממה שהעריכו. גרסת MICKEY 2 המתוארת כאן טובה יותר במובן שההתקפות המתוארות אינן יעילות כנגדה.

בשנת 2013 פותחה התקפה כנגד MICKEY 2.0 שהיא שיפור של התקפת Differential Fault Attack בקיצור DFA שיכולה לחשוף את המצב הפנימי כולו בשלב אתחול הצופן בתוך {\displaystyle 2^{16.7}} הזרקות ובתוך {\displaystyle 2^{32.5}} ניסיונות חישוב בממוצע. ההתקפה מבוססת על יכולת התוקף לגרום לסיביות שגויות אקראיות במצב פנימי של הצופן והיא מנצלת את העובדה שפונקציית הפלט וכן פעולות עדכון מסוימות פשוטות מדי. ייתכן שאפשר לשפר את ביטחון הצופן על ידי כמה התאמות. לדעת מחברי ההתקפה היא ישימה כנגד כל הצפנים שנבחרו על ידי eSTREAM בקטגוריית חומרה.

ראו גם
------

* צופן זרם

הערות שוליים
------------

1. ↑  eSTREAM portfolio page MICKEY 2.0
2. ↑  Improved Differential Fault Attack on MICKEY 2.0

| קריפטוגרפיה |
| --- |
| 

| מושגי יסוד |
| --- |
| פנקס חד-פעמי • צופן בלוקים • צופן בלוקים בר התאמה • צופן זרם • סודיות מושלמת • ביטחון סמנטי • הצפנה סימטרית • הצפנה אסימטרית • חתימה דיגיטלית • הצפנה הומומורפית • הצפנה מרובה • הצפנה מאומתת • הצפנה הסתברותית • סכמת ריפוד אסימטרית אופטימלית • אריזת מפתח הצפנה • סודיות מושלמת קדימה |

 |
| 

| הצפנה קלאסית |
| --- |
| מכונת הצפנה • צופן החלפה • צופן אתב"ש • צופן קיסר • צופן ויז'נר • צופן ורנם • צופן פלייפייר • צופן היל • אולטרה • אניגמה • ציקלומטר • קולוסוס • PURPLE • ג'ייד • מג'יק • צופן שחלוף |

 |
| 

| צופן בלוקים |
| --- |
| לוציפר • AES • 3DES • DES • Threefish • Twofish • Blowfish • FEAL • SEED • CAST • IDEA • RC2 • RC6 • MARS • RC5 • GOST • סרפנט • MISTY • KASUMI • קמליה • ARIA • SAFER • TEA • LEA • CLEFIA • SEA • Hummingbird • PRESENT • KATAN • KeeLoq • Simon & Speck • אנוביס |

 |
| 

| אופני הפעלה |
| --- |
| אופן הפעלה של צופן בלוקים • EAX • OCB • IAPM • CWC mode • GCM • CCM |

 |
| 

| צופן זרם |
| --- |
| RC4 • Salsa20 • SOSEMANUK • גריין • E0 • A5/1 • A5/2 • A5/3 • A5/4 • MICKEY • HC-128 • SNOW • Trivium • Rabbit • ZUC • ChaCha |

 |
| 

| הצפנה אסימטרית |
| --- |
| פרוטוקול דיפי-הלמן • חידות מרקל • חתימת למפורט • הצפנת תרמיל • RSA • הצפנת רבין • חתימה דיגיטלית רבין • צופן אל-גמאל • חתימה דיגיטלית אל-גמאל • DSA • הצפנת בלום-גולדווסר • ECC • הצפנת קריימר-שופ • הצפנת פאיי • הצפנת מקאליס • GGH • NTRU • עקום 25519 • חתימה דיגיטלית של שנור • הצפנת אוקמוטו-אושיאמה |

 |
| 

| פרוטוקולים |
| --- |
| עץ מרקל • פרוטוקול אתגר-מענה • פרוטוקול נידהאם-שרודר • פרוטוקול קרברוס • הוכחה באפס ידע • פרוטוקול פייגה-פיאט-שמיר • העברה עלומה • חלוקת סוד • TLS (SSL) • Secure Shell • MQV • X.509 • פרוטוקול שיתוף מפתח
• מיסור שלא לפרסום • פרוטוקול סיגנל |

 |
| 

| פרימיטיבים תאורטיים |
| --- |
| מחולל פסבדו-אקראי קריפטוגרפי • פונקציה חד-כיוונית • תמורה חד-כיוונית • סיבית קשה • פונקציה פסבדו-אקראית קריפטוגרפית • תמורה פסאודו-אקראית • פונקציית גיבוב קריפטוגרפית • וקטור אתחול • פונקציית ספוג • הצפנה מבוססת סריג |

 |
| 

| קריפטואנליזה |
| --- |
| ניתוח תדירויות • כוח גס • התקפת איזון זמן/זיכרון • תקיפת היפגשות באמצע • קריפטואנליזה ליניארית • קריפטואנליזה דיפרנציאלית • התקפת גלוי-ידוע • התקפת גלוי-נבחר • התקפת מוצפן-נבחר • פירוק לגורמים של מספר שלם • התקפת ערוץ צדדי • התקפת קורלציה • התקפת שיבוש • מודל אורקל אקראי • התקפת התנגשויות |

 |
| 

| בעיות מתמטיות ואלגוריתמים |
| --- |
| בעיית לוגריתם דיסקרטי • תחשיב אינדקסים • נפה ריבועית • אלגוריתם rho של פולרד • נפת שדה מספרים • אלגוריתם רו של פולרד ללוגריתמים • אלגוריתם פוליג-הלמן |

 |
| 

| פונקציות גיבוב קריפטוגרפיות |
| --- |
| SHA • MD5 • MD4 • SHA-1 • SHA-2 • SHA-3 • RIPEMD • Skein • BLAKE • Grøstl • SipHash |

 |
| 

| אימות וזיהוי |
| --- |
| אימות זהות • סיסמה • קוד אימות מסרים • Poly1305 • סיסמה חד-פעמית |

 |
| 

| נושאים נלווים |
| --- |
| מספר אקראי • מספר ראשוני • יתירות • מפתח שיחה • סטגנוגרפיה • הצפנה קוונטית • הצפנה פוסט-קוונטית • עקרון קרקהופס • אבטחת מידע • קריפטוגרפיה ויזואלית • אליס ובוב • מסיבת חתימה על מפתחות ציבוריים • שידור מוצפן • הצפנת דיסקים • הצפנת סף • חתימה דיגיטלית מבוססת פונקציית גיבוב • פונקציה זניחה • רשת פייסטל • רשת החלפה-תמורה • הלבנה • אימות מסרים • חתימה עיוורת • חישוב רב משתתפים בטוח |

 |