MICKEY

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש
שיטת ההיזון (feedback) המשתנה של צופן מיקי.

MICKEY הוא צופן זרם סינכרוני המיועד לפלטפורמת חומרה מוגבלת משאבים, שפותח ב-2006 על ידי סטיב באבג' מחברת וודאפון ומת'יו דוֹד. שם הצופן הוא ראשי התיבות של Mutual Irregular Clocking KEYstream, והוא מבוסס על אוגר זיזה ממושב (LFSR) שמבוקר בטכניקה ייחודית לאיזון בין הצורך במחזוריות גבוהה ופסאודו-אקראיות לבין הצורך בעמידות נגד קריפטואנליזה. הוא מספק רמה גבוהה יחסית של ביטחון לחומרה בעלת סיבוכיות נמוכה. גרסת MICKEY 2.0 נבחרה על ידי eSTREAM[1] כצופן מועדף לשימוש יחד עם מבחר אלגוריתמים נוספים בקטגוריית חומרה. הצופן מקבל מפתח סודי בגודל 80 סיביות ווקטור אתחול בגודל של עד 80 סיביות ומייצר זרם פסאודו-אקראי באורך מרבי של סיביות, המשמש כמפתח להצפנת זרם הנתונים באמצעות XOR כבכל צופן זרם.

תיאור הצופן[עריכת קוד מקור | עריכה]

הצופן מורכב משני אוגרי LFSR המסומנים ב- ו- כל אחד בגודל 100 סיביות הנקראות מצבים (states) שמסומנים בקיצור וכן בהתאמה. בכל פעימת שעון (clocking) כל הסיביות או המצבים מוסטים שלב אחד כלפי מטה (ימינה) והפוזיציות הבאות של האוגר משמשות להיזון חוזר (feedback):


CLOCK_R[עריכת קוד מקור | עריכה]

פונקציית ההזנה של אוגר R בצופן MICKEY. במקרה שסיבית הבקרה CONTROL_BIT_R היא אפס מתבצעת הזזה (shift) של כל הסיביות פוזיציה אחת וכן מתבצע XOR של סיבית הקלט INPUT_BIT_R עם כל הסיביות בפוזיציות המופיעות ב-RTAPS. כאשר סיבית הבקרה היא אחד, בנוסף לאמור כל סיביות המצב מוזנות בחזרה עם XOR.

הפרוצדורה CLOCK_R (‎clocking מתייחס לעדכון האוגר בכל פעימת שעון) ייחודית בכך שהיא משתנה בהתאם לפרמטר. קלט הפונקציה הוא סיבית-קלט וסיבית בקרה , הסימן הוא XOR והסיביות מייצגות את מצבו החדש של האוגר לאחר העדכון.

בכל פעימה כאשר סיבית הבקרה מאופסת מתבצעת הזזה פוזיציה אחת והזנה (feedback) לפי הפוזיציות המנויות ב-RTAPS. המשמעות של ההזזה במונחים של אלגברה שהיא פועלת כמו כפל אלמנטים בשדה סופי מורחב מודולו הפולינום הפרימיטיבי

.

כי בעצם אפשר לראות במצבי האוגר כמקדמים בינאריים של פולינום כלשהו ממעלה 100 כאשר המצב השמאלי הוא המקדם המוביל. כאן הכפל הוא בין המצב הנוכחי של האוגר לפולינום או (היות שהמקדמים בינאריים זוהי מחרוזת שבה רק הסיבית השנייה משמאל דלוקה). פעולת כפל זו שקולה למעשה לפעולת ההזזה (shift) של כל סיביות האוגר ימינה. בנוסף מחברים ב-XOR את סיבית-הקלט למצב הנוכחי.

כאשר סיבית הבקרה היא '1', לאחר ההזזה האמורה כל סיביות המצב מחוברת בחזרה ב-XOR (כמתואר בתרשים). במונחי אלגברה בשדה פירוש הפעולה הוא כפל בפולינום (הזזה שקולה לכפל ו-XOR שקול לחיבור). הפולינום נבחר כך שהוא מתחלק ב- כאשר . קריאה לפונקציית ההיזון עם סיבית הבקרה הדינאמית דלוקה שקולה ל- הזזות. להלן ניסוח פורמלי של הפונקציה:


האוגר S[עריכת קוד מקור | עריכה]

תחילה מוגדרות ארבע מחרוזות ערכים קבועים: COMP0, COMP1, FB0, FB1 כל אחת באורך 100 סיביות (כמתואר בטבלה המצורפת). הפונקציה לעדכון האוגר מקבלת כקלט שתי סיביות וכן ומפיקה ערכי ביניים המשתנים בהתאם לסיבית הבקרה. התוצאה מומרת למערך סיביות הפלט . הסימן מייצג את הפעולה הלוגית AND. הפונקציה פועלת כדלהלן:

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

הפרוצדורה CLOCK_KG[עריכת קוד מקור | עריכה]

המחולל המייצר את זרם המפתח שנקרא keystream generator מוגדר כדלהלן; הקלט הוא שני האוגרים ו- וכן דגל איתחול שנקרא ('1' מציין את שלב איתחול שבו רק מריצים את הצופן ומתעלים מהפלט ו'0' מציין שימוש רגיל) וסיבית קלט . הפרמטר סיבית הבקרה של שתי הפונקציות לעיל מוגדרות כך:

וכן
.

אם הדגל סיבית הקלט של האוגר תהיה אחרת תהיה עצמה. סיבית הקלט של האוגר היא .

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

תוצאת המחולל היא XOR של שתי הסיביות במצבי האפס. כלומר .

טעינת מפתח[עריכת קוד מקור | עריכה]

מפתח ההצפנה הסודי שמסופק על ידי המשתמש אינו נטען ישירות לאוגרים כדי למנוע התקפות מסוימות, אלא תחת זאת הטעינה מתבצעת באמצעות הפרוצדורה הבאה. המפתח המיוצג על ידי מחרוזת של 80 סיביות ווקטור האיתחול באורך (עד 80 סיביות) נטענים למצב הראשוני של האוגרים כדלקמן: תחילה האוגרים מאופסים ואז, לטעינת וקטור האיתחול מבצעים:

לטעינת המפתח מבצעים:

ואז מריצים את הצופן 100 פעימות לצורך הכנה. בשלב זה הפלט אינו משמש כמפתח ההצפנה.

הצפנה ופענוח[עריכת קוד מקור | עריכה]

שני המצבים התחתונים של האוגרים ו- בהתאמה, מחוברים ב-XOR ‏: מהם מתקבלת סיבית פסאודו-ראנדומלית אחת המהווה חלק מזרם המפתח המשמש להצפנת המידע. הקריאה לפרוצדורה להפעלת הצופן במקרה זה מבוצעת עם הפרמטר וסיבית קלט 0 כלומר עבור כל סיבית מידע מבצעים:

פענוח מתבצע באותה דרך בדיוק:

ביטחון[עריכת קוד מקור | עריכה]

ב-2005 במהלך בדיקת הצופן על ידי eSTREAM התגלו שלוש חולשות בגרסה המקורית. 1. העובדה שהזיכרון הכולל הוא 160 סיביות שהוא המינימלי ביותר האפשרי (מינימום הזיכרון הדרוש כדי להבטיח את ביטחון הצופן מקובל שיהיה פי שנים מגודל המפתח), עדיין מתאפשרת התקפת TMD-tradeoff קיצור של time-memory-data שפורסמה לראשונה על ידי אלכס ביריוקוב ועדי שמיר. 2. למרות הצהרת המפתחים שמינימום מחזוריות הצופן היא , האנטרופיה של המצב הפנימי (הזיכרון) נחלשת עם הזמן ככל שהצופן פועל. 3. המבקרים מציינים שגילו קבוצה קטנה של מפתחות הצפנה שנקראים 'מפתחות חלשים' במובן ששימוש בהם מאפשר לנחש את המצב הפנימי. בכל אופן המפתחים היו מודעים לעובדה זו אך למען שמירה על יעילות בחרו להתעלם מכך בטענה שהסבירות נמוכה מ- שמפתח כזה ייבחר באקראי. אולם למעשה התגלה שהיא גבוהה במעט ממה שהעריכו. גרסת MICKEY 2 המתוארת כאן טובה יותר במובן שההתקפות המתוארות אינן יעילות כנגדה.

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

ראו גם[עריכת קוד מקור | עריכה]

הערות שוליים[עריכת קוד מקור | עריכה]