MISTY[1] היא משפחה שלצפני בלוקים שפותחו על ידי מיצורו מצואי (Mitsuru Matsui) ועמיתיו מתאגידמיצובישייפן. הגרסה הראשונה MISTY פותחה ב-1996 והוצעה לפרויקטNESSIE האירופאי ונכללה בשנת 2003 ברשימה המומלצת של הפרויקט. גרסה אחרת של הצופן הנקראתKASUMI פותחה ב-1999 במיוחד עבור תקן3GPP לתקשורת סלולרית מסוגGSM,GPRS והדור השלישיUMTS להגנה על פרטיות ואימות שיחה סלולרית.
MISTY הוא צופן בלוקים בסגנוןרשת פייסטלרקורסיבית המותאם במיוחד לחומרה. הקלט שלו הוא בלוק טקסט קריא באורך 64 סיביות ומפתח סודי באורך 128 סיביות והפלט הוא טקסט מוצפן באורך 64 סיביות. מספר הסבבים בהגדרה יכול להשתנות, אך מקובל בדרך כלל שמונה סבבים. הבסיס התאורטי של הצופן נשען על נוסחהמתמטית המאפשרת הוכחת עמידות נגדקריפטואנליזה דיפרנציאלית וליניארית. ברמה העליונה הצופן כולל שמונה סבבים של פונקציה אי-ליניארית בולאנית שהיא עצמה מורכבת מ"סולם" דמוי רשת פייסטל בשלושה סבבים של פונקציה פנימית אחרת (כמתואר בתרשימים). באותו סגנון הפונקציה הפנימית בתורה מורכבת גם היא ממספר סבבים של החלפה תוך שימוש בשתי תיבות החלפהS7 ו-S9 המורכבות מטבלה של סיביות וטבלה של סיביות בהתאמה.
שם הצופן יכול להתפרש כראשי התיבות "MitsubishiImprovedSecurityTechnologY" או האותיות הראשונות של שמות צוות הפיתוח Matsui Mitsuru, Ichikawa Tetsuya, Sorimachi Toru, Tokita Toshio, Yamagishi Atsuhiro.

בתחילה פותחו הגרסאות MISTY1 ו-MISTY2 שההבדל ביניהן הוא בעיקר ש-MISTY2 מאפשרת הפעלה מקבילית של הפונקציה הפנימית בעוד ש-MISTY1 איננה מקבילית. ב-2005 פותחה הגרסה KASUMI שהיא חלק מ-A5/3,תקן תקשורת מאובטחת לרשתות סלולריות מהדור השלישי שמחליף את האלגוריתמיםA5/1 ו-A5/2. ב-1998 פורסם צופןE2 שהיה מועמד ל-AES ובשנת 2000 פותח על בסיס דומה צופןקמליה שנחשב לבטוח ברמה שלAES ונכלל בתקנים רבים וב-SSL.
ערכי תיבות ההחלפה שונים בגרסאות השונות. המפתח הסודי לאחר הרחבה מעורבב עם הקלט בשלבים שונים של הצופן. ב-MISTY1, KASUMI וקמליה קיימת פונקציה נוספת שתפקידה להוסיףטרנספורמציה ליניארית תלוית מפתח. שכבות הפונקציה הליניארית מפרידות כל זוג סבבים של הצופן, למשל ב-KASUMI הפונקציה הליניארית נוספת לפני הפונקציה הפנימית בסבב אי-זוגי ואחריה בסבב זוגי. הבדל נוסף קיים בפונקציית הרחבת המפתח, כאשר ב-MISTY1 ו-MISTY2 היא כוללת טרנספורמציה אי-ליניארית. לעומת זאת מסיבות של יעילות ב-KASUMI פונקציית הרחבת המפתח ליניארית לחלוטין, מה שמהווה נקודת תורפה.
כל הגרסאות של הצופן רשומות כפטנט על ידיNTT ומיצובישיאלקטרוניקה, חלקן הותרו לשימוש תחת רישיונותFreeBSD או לשימוש אקדמי/שלא למטרות רווח.
לפי הצהרת מיצואי, הצופן הוכח בטוח נגד התקפה דיפרנציאלית/ליניארית וכן נגד התקפות מודרניות נוספות. בשמונה סבבים הסיבוכיות הדיפרנציאלית והליניארית שלו הן בסדר גודל של בהשוואה ל-DES שהן ו- בהתאמה. MISTY1 נחקר במשך שנים רבות מאז הוצע לראשונה ולא נמצאו בו פגמים רציניים. ההתקפה הטובה יותר הידועה היא "התקפה אינטגרלית"[2] של קנודסן ווגנר מ-2002 נגד גרסה מצומצמת של הצופן בחמשה סבבים, בסיבוכיות של ובסיבוכיות מקום של. אותה התקפה נגד MISTY2 בשישה סבבים אפשרית בסיבוכיות של ומקום בסדר גודל של. נגד KASUMI התגלו מספר התקפות, חלקן תאורטיות[3] כלומר בסיבוכיות טובה מכוח גס ( עם) וחלקן מעשיות כמו התקפת Related-key[4] שלאור דונקלמן,נתן קלר ועדי שמיר משנת 2010 שהיא בסיבוכיות של ומקום בסדר גודל של עם 4 מפתחות קשורים. ראוי לציין שההתקפה האחרונה אינה ישימה נגד MISTY1, כמו כן היא מסתמכת על כמות נכבדה של טקסט מוצפן בשילוב עם מפתחות קשורים, לכן ייתכן שהיא אינה אפשרית נגד יישום A5/3 בגרסה הנוכחית, אך יש להביא בחשבון את האיום. על כל פנים ההתקפה מוכיחה שהשינויים שנעשו על ידי המפתחים במעבר מ-MISTY ל-KASUMI כדי לשפר ביצועים בחומרה למעשה החלישו את ביטחון הצופן משמעותית. מסיבה זו הוחלט על מעבר לצופן חזק יותרSNOW 3G.
בפיתוח הצופן הושם דגש בעיקר על יישום יעיל, במיוחד בחומרה. הפעולות הנפוצות בצופן בלוקים מתחלקות לארבע קטגוריות עיקריות; פעולותאריתמטיות, פעולות הזזה (Shift), פעולות לוגיות (כמוXOR) וטבלאות החלפה (S-box). מתוכן שתי הפעולות האחרונות עדיפות מהיבט שלחומרה ולכן נבחרו. האסטרטגיה הבסיסית בפיתוח הצופן הייתה בנייה מלמטה למעלה, מהמרכיבים הקטנים לגדולים בצורה רקורסיבית, כך שיהיה קל להעריך את ביטחון ההצפנה במונחים שלהסתברות דיפרנציאלית/ליניארית.
כמו ברשת פייסטל טיפוסית, הקלט באורך 64 סיביות מחולק לשני חצאים בגודל 32 סיביות כל אחד, והפונקציה הפנימית מופעלת על המחצית האחת והפלט שלה משמש כמפתחהצפנה להצפנת המחצית השנייה, תוך שימוש בפעולותXOR ועם שתי תת-שגרות ו-.פלט הצופן הוא באורך 64 סיביות. בפונקציה מחלקים את הקלט שוב לשני חצאים באורך 16 סיביות, כל אחד מהווהקלט לפונקציה קטנה יותר הנקראת המשתמשת בתיבות ההחלפה (להלן), היות ש-16 סיביות הן ערן גדול מדי, מחלקים שוב את הקלט הפעם לשני חלקים לא שווים, 9 סיביות ו-7 סיביות בהתאמה אותם מחליפים לפי תיבות ההחלפה בהתאמה. הסיבה לחלוקה לא מאוזנת זו נובעת מהעובדה שתיבות החלפה המייצגותפונקציה חד-חד-ערכית ועל אי-ליניארית, טובות יותר באורך אי זוגי מהיבט של קריפטואנליזה דיפרנציאלית/ליניארית, אולם מאידך חסרונן הוא בהפחתה ביעילות יישום הן בחומרה והן בתוכנה. לפי בדיקות שנעשו על מחשבפנטיום מהירות ההצפנה הייתה 20Mbps בקירוב, על חומרה המהירויות הן 450Mbps בקירוב. מבנה MISTY2 מאפשר הפעלה מקבילית ולכן מהיר פי שניים בהצפנה, אך לא בפענוח כי הפונקציה ההופכית לא ניתנת להפעלה מקבילית, מסיבה זו MISTY2 עדיף ליישום במצבי הפעלה OFB או CFB הפועלים כצופן זרם בהם נדרשת רק פונקציית ההצפנה.
תיבות ההחלפה הן למעשה חזקות מעלשדה סופי. התיבות חושבו כך שההסתברות הדיפרנציאלית/ליניארית הממוצעת תהיה מינימלית וכן שיהיו ממעלה גבוהה ככל האפשר ושיהיה להן עיכוב מינימלי בביצוע בחומרה. החיפוש התמקד בפונקציות ליניאריות מהצורה. הטבלהS7 כוללת אוסף של 7 פונקציות ממעלה 10 מהצורה מעל השדה בבסיס פולינומי, כאשר. באותה דרך הטבלהS9 כוללת אוסף של 9 פונקציות ממעלה לכל היותר 13 מעל השדה. אפשר להפעיל את ההחלפה ישירות באמצעות הפונקציות האמורות ללא שימוש בזיכרון (כאשר החומרה מוגבלת משאבים) או שאפשר להמירן לטבלאות חיפוש אם הזיכרון זמין. להלן הטבלאות S7 ו-S9:
| S7 |
|---|
0123456789abcdef00:1b32335a3b1017545b1a72736b2c664910:1f24136c372e3f4a5d0f405625511c0420:0b46200d7b3544422b1e41144b79156f30:0e550936740c6753280a7e380207602940:1912652f303908685f782a4c6445753d50:594803577c4f623c1d215e276a704d3a60:016d6e6318772305267600312d7a7f6170:502211064716524e713e6943345c587d |
| S9 |
|---|
0123456789abcdef000:1c30cb15319f1e30e90fb0351810b91171eb13300902d0d3010:0c714a03707e0eb1641931d80a311e05502c01d1a2163118020:14b1521d200f02b03013a0e511113818e0630e30c81f401b030:00109d0f81a016d1f301c14607d0d10821ea18312d0f419e040:1d30dd1e21281e00ec05909101112f0260dc0b018c10f1f7050:0e716c0b60f90d815110114c1030b815412b1ae01707100c060:04705807f1a413412908415d19d1b21a304807c0511ca023070:13d1a716503b0420da1920ce0c106b09f1f112c1840fa196080:1e116917d03118010a0941da18613e11c0601751cf067119090:06506809915000800717c0b70240190de1270db0e41a90520a0:10909019c1c10281b313516a1760df1e51880c516e1de1b10b0:0c31df0360ee1ee0f009304909a1b606908112500b05e0b40c0:1491c717403e13b1b708e1c60ae0100951ef04e0f21fd0850d0:0fd0f60a016f08308a15609b13c1071670981d01e90031fe0e0:0bd1220890d218f01203306a1420ed17011b0e214f1581310f0:14705d1131cd0791611a517909e1b40cc02213201a0e8004100:1871ed1970391bf1d702718b0c609c0d014e06c0341f206e110:0ca0250ba1910fe01310602f1ad1721db0c010b1d60f51ec120:10d0761141ab07510c1e415905411f04b0c41be0f70290a4130:00e1f007704d17a08608b0b31710bf10e10409715b160168140:0d70bb0661ce0fc0921c506f01604a0a11390af0f119000a150:1aa14317b05618d1660d41fb14d19419a0871f81230a71b8160:14103c1f914002a15511a1a11980d51261af06112e1571dc170:07218a0aa0961150ef04507b08d14505305f1780b202e020180:1d503f1c91e71ac0440380140b116b0ab0b505a1821c81d4190:0181770640cf06d10019913015a0051201bb1bd0e004f0d61a0:13f1c412a0150060ff19b0a604308805015f1e812107317e1b0:0bc0c20c91731891f50741cc1e61a819501f04100d1ba0321c0:03d1d10800a80571b91621480d910506207a0211ff1121081d0:1c00a911d1b01a60cd0f305c10205b1d91441f60ad0a503a1e0:1cb13617f0460e101e1dd0e61371fa18508c08f0401b50be1f0:0780000ac11015e1240021bc0a20ea0701fc11615c04c1c2 |
בהינתן המפתח הסודי המסופק על ידי המשתמש באורך 128 סיביות, מרחיבים אותו ל-256 סיביות באמצעותהזזה מעגלית וחיבור XOR עם פונקציה ליניארית. השימוש בו הוא באופן שכל סבב מושפע מכל סיביות המפתח ומחלק גדול של המפתח המורחב. ההגבלה ל-256 סיביות נובעת בשל הצורך בהתחשבות בחומרה מוגבלת משאבים כמוכרטיס חכם. הרחבת המפתח נעשית באופן הבא:

הפונקציה FO מקבלת שני פרמטרים, קלט באורך 32 סיביות FO_IN ואינדקס לחלק המתאים במפתח המורחב EK ומחזירה את FO_OUT כדלהלן:

הפונקציה FI מקבלת שני פרמטרים; קלט באורך 16 סיביות F_IN וחלק מהמפתח המורחב FI_KEY ומחזירה פלט באורך 16 סיביות FI_OUT. הפונקציה משתמשת בשני משתני עזר מקומיים d_7 באורך 7 סיביות ו-d_9 באורך 9 סיביות וכן מנצלת את תיבות ההחלפה המתוארות לעיל. בגלל האורך השונה של המשתנים d_7 ו-d_9 יש צורך להפעיל פונקציה כלשהי שמרחיבה או מכווצת את המשתנה בהתאם לפני שמבצעים XOR. הרחבה נעשית על ידי הוספת שני אפסים משמאל (בצד המשמעותי של המספר) וכיווץ נעשה על ידי חיתוך שתי הסיביות המשמעותיות.
הפונקציה FL מקבלת שני פרמטרים; קלט באורך 32 סיביות FL_IN ואינדקס k לחלק המתאים במפתח המורחב ומחזירה את FL_OUT באורך 32 סיביות.
במצבי הפעלה ECB ו-CBC בפענוח צריך להשתמש בפונקציה ההופכית FLINV הבאה:
באופן רגיל התהליך האמור מבוצע שמונה פעמים. בכל סבב מתבצעת הקריאה לפונקציה FO. בנוסף בכל סבב זוגי מתבצעת קריאה לפונקציה FL. לאחר הסבב האחרון מתבצעת קריאה נוספת לפונקציה FL. לצורך המחשה אם הקלט חולק לשני חצאים R ו-L בהתאמה, שמונה הסבבים של הצופן נראים כך:
| הצפנה | פענוח |
R=P&0xffffffffL=P>>32//1.R=FL(R,0)L=FL(L,1)L=L^FO(R,0)2.R=R^FO(L,1)3.R=FL(R,2)L=FL(L,3)L=L^FO(R,2)4.R=R^FO(L,3)5.R=FL(R,4)L=FL(L,5)L=L^FO(R,4)6.R=R^FO(L,5)7.R=FL(R,6)L=FL(L,7)L=L^FO(R,6)8.R=R^FO(L,7)R=FL(R,8)L=FL(L,9)C=(R<<32)|L | R=C&0xffffffffL=C>>32//R=FLINV(R,8)L=FLINV(L,9)R=R^FO(L,7)L=L^FO(R,6)R=FLINV(R,6)L=FLINV(L,7)R=R^FO(L,5)L=L^FO(R,4)R=FLINV(R,4)L=FLINV(L,5)R=R^FO(L,3)L=L^FO(R,2)R=FLINV(R,2)L=FLINV(L,3)R=R^FO(L,1)L=L^FO(R,0)R=FLINV(R,0)L=FLINV(L,1)P=(R<<32)|L |