KASUMI

**KASUMI** הוא צופן בלוקים שפותח ב-1999 על ידי 3GPP כתקן לאבטחת שיחה סלולרית מהדור השלישי בטכנולוגיות UMTS, GSM ו-GPRS. ב-UMTS, הצופן משמש בשני רבדים: באלגוריתם f8 להגנה על פרטיות שיחה סלולרית ובאלגוריתם f9 לאימות והבטחת שלמות השיחה. ב-GSM/GPRS הצופן מהווה חלק אינטגרלי מאלגוריתם A5/3 בתור מחולל זרם מפתח שנקרא KGCORE שהוא מצב הפעלה OFB. 

צופן KASUMI פותח על ידי SAGE שהוא חלק מגוף התקינה האירופאי ETSI. בשל לוח זמנים לחוץ הוחלט בעצה אחת עם TGS (הצוות הטכני של 3GPP) להסתמך על אלגוריתם קיים במקום לפתח אלגוריתם חדש והצופן MISTY1 של מיצובישי נבחר כבסיס. כדי להתאימו לחומרה בוצעו מספר שינויים וניתן לו השם KASUMI שהוא תרגום mist (ערפל) ליפנית.

## ביטחון
היתרון של KASUMI הוא שהוא מבוסס על צופן MISTY1 שפותח על בסיס תאורטי שלטענת המפתחים מספק ביטחון מוכח נגד קריפטואנליזה דיפרנציאלית וליניארית וכן שהוא ממוטב במיוחד לחומרה. 

ב-2001 פורסמה התקפה תאורטית טובה מכוח גס שנקראת התקפת דיפרנציאלים בלתי אפשריים נגד גרסה מצומצמת של MISTY הישימה גם נגד KASUMI, בשישה סבבים בסיבוכיות זמן של 2^{100} ומקום בסדר גודל של 2^{55}. 

התקפה יותר מעשית פורסמה על ידי Teruo Saito גם כן בשישה סבבים בזמן של 2^{65.4} ועם 2^{60} טקסטים. יש לזכור שב-KASUMI שמונה סבבים. ב-2005 פרסמו אור דונקלמן, אלי ביהם ונתן קלר מהטכניון התקפת מפתחות קשורים (related key) בשילוב עם התקפת בומרנג (סוג של התקפה דיפרנציאלית) נגד KASUMI שמסוגלת לשבור את הצופן בגרסה המלאה עם 2^{76.1} הצפנות ועם כמות של 2^{54.6} טקסטים נבחרים שהוצפנו עם 4 מפתחות קשורים. למרות שההתקפה תאורטית, היא סותרת את טענת המפתחים לגבי הוכחת ביטחון האלגוריתם. ב-2010 הציגו אותם חוקרים התקפה משופרת בהרבה שהייתה מספיק פרקטית עד שהצליחו להמחישה על מחשב ביתי בזמן של מספר שעות, אפילו עם גרסה לא ממוטבת של הצופן. למרות זאת החוקרים ציינו שההתקפה אינה מעשית נגד אלגוריתם A5/3 שבשימוש GSM בשל אופן מימושו. על כל פנים ההתקפה אינה אפשרית נגד MISTY, מה שמוכיח כי השינויים שביצעו מפתחי KASUMI השפיעו לרעה על ביטחון הצופן וזאת בניגוד לטענתם.

## תיאור הצופן
KASUMI הוא צופן בלוקים בסגנון רשת פייסטל בשמונה סבבים. הקלט הוא בלוק דטה באורך 64 סיביות ומפתח הצפנה סודי באורך 128 סיביות והפלט הוא בלוק מוצפן באורך 64 סיביות. הצופן בנוי בצורה רקורסיבית. 
:הפונקציה \boldsymbol{O=\mathbf{KASUMI}(I)_K} מבצעת כדלהלן:
:1. תחילה בלוק הקלט \boldsymbol{I} מחולק לשני חצאים \boldsymbol{L_0,R_0} באורך 32 סיביות כל אחד.
:2. מפעילים את פונקציית הסבב \boldsymbol{f_i} על חצי השמאלי ומחליפים מקומות עם החצי הימני שמונה פעמים. דהיינו עבור \boldsymbol{1\le i\le 8} מבצעים:
::#\boldsymbol{R_i=L_{i-1}}
::#\boldsymbol{ L_i=R_{i-1}\oplus f_i(L_{i-1},RK_i)}
:3. הפלט הוא \boldsymbol{O=(L_8 \ \| \  R_8)}.
RK_i הוא החלק המפתח המתאים לסבב i (לפי הטבלה המופיעה להלן). הסמל \| מייצג שרשור והסמל \oplus מייצג XOR.

### פונקציית הסבב
הפונקציה הראשית f_i מקבלת קלט I באורך 32 סיביות וקטע מתאים מהמפתח המורחב (להלן) שנקרא "מפתח הסבב" ומחזירה את הפלט O. מפתח הסבב RK_i מורכב משלושה תת-מפתחות KL_i,KO_i,KI_i הראשון באורך 32 סיביות ושני האחרים באורך 48 סיביות כל אחד. והיא משתמשת בשתי תת-שגרות FL ו-FO. כשהמפתח KL מועבר לפונקציה FL והמפתחות KO,KI מועברים לפונקציה FO.

פונקציית הסבב הראשית מופיעה בשתי צורות בהתאם לסבב זוגי או אי זוגי. עבור סבב זוגי היא בנויה כך:
:\boldsymbol{f_i(I,RK_i)}=FL(FO(I,KL_i),KO_i,KI_i)
בסבב אי זוגי כך:
:\boldsymbol{f_i(I,RK_i)}=FO(FL(I,KL_i),KO_i,KI_i)
כלומר בסבב זוגי הפונקציה FL מופעלת לאחר הפונקציה FO (כלומר הפלט של FO הופך לקלט של FL) ובסבב אי זוגי ההפך.

### הפונקציה FL
בהינתן הקלט I באורך 32 סיביות ותת-מפתח KL_i גם הוא באורך 32 סיביות, הפונקציה מחלקת תחילה את תת-המפתח לשני חצאים באורך 16 סיביות כל אחד, כך שמתקיים KL_i=KL_{i,1}\ \| \ KL_{i,2} ואת הקלט I לשני חצאים כך שמתקיים I=L \ \| \ R ומבצעת:
:R'=R\oplus \text{ROL}(L \land KL_{i,1})
:L'=L\oplus \text{ROL}(R' \lor KL_{i,2})

והפלט הוא (L' \ \| \ R'). הפונקציה \text{ROL} היא הזזה מעגלית לשמאל סיבית אחת. הסמל <math>\land</math> מייצג AND והסמל <math>\lor</math> מייצג OR.

### הפונקציה FO
בהינתן קלט I באורך 32 סיביות ושני תת-מפתחות KO_i,KI_i באורך 48 סיביות כל אחד, הפונקציה מחלקת תחילה את הקלט לשני חצאים L_0,R_0 ואת שני תת-המפתחות לשישה חלקים באורך 16 סיביות כל אחד KO_{i,1},KO_{i,2},KO_{i,3},KI_{i,1},KI_{i,2},KI_{i,3} בהתאמה ומבצעת שלוש פעמים, עבור 1\le j\le 3:
:R_j=FI(L_{j-1}\oplus KO_{i,j},KI_{i,j})\oplus R_{j-1}
:L_j=R_{j-1}
והפלט הוא (L_3 \ \| \ R_3).

### הפונקציה FI
בהינתן הקלט I באורך 16 סיביות ותת-מפתח KI_{i,j} הפונקציה מחלקת תחילה את הקלט לשני חלקים לא שווים באורכם, L_0 באורך 9 סיביות ו-R_0 באורך 7 סיביות, באותו אופן מחלקת את תת-המפתח לשני חלקים KI_{i,j,1} באורך 9 סיביות והחלק KI_{i,j,2} באורך 7 סיביות ומבצעת:




והפלט הוא (L_4 \ \| \ R_4). כאשר הפונקציות ZE ו-TR קיצור של ZeroExtend ו-Truncate בהתאמה הן פונקציות שנועדו להמיר את הערך x מ-7 סיביות ל-9 סיביות וההפך. ההרחבה מתבצעת על ידי הוספת אפסים משמאל (בצד המשמעותי של המספר) והחיתוך מתבצע על ידי הסרת שתי הסיביות המשמעותיות של המספר.

### תיבות החלפה
לצופן נילוות שתי תיבות החלפה בסיביות שנקראות S7 ו-S9 והן עוצבו כך שניתן יהיה לממשן בשני אופנים. קומבינציה לוגית וטבלת אחזור (lookup table) בהתאם לסיטואציה. למשל בחומרה מוגבלת בזיכרון הגישה הראשונה עדיפה. 
טבלאות חיפוש מהירות יותר והן עדיפות כאשר הזיכרון זמין. בגישה הלוגית ההחלפה מתבצעת על ידי קומבינציה של השערים הלוגיים AND ו-XOR. להלן שתי תיבות ההחלפה בשני האופנים האמורים. הערך x בייצוג בינארי הוא מחרוזת של 7 סיביות (או 9 בטבלה הבאה) המיוצגות על ידי x_0\|x_1\|x_2\|x_3\|x_4\|x_5\|x_6 (הביטוי x_0x_1 פירושו x_0\land x_1):

טבלת החלפה S7 עם ערכים עשרוניים:

השערים הלוגיים של S9:

טבלת ההחלפה S9 עם ערכים עשרוניים:

### הרחבת מפתח
המפתח הסודי K המסופק על ידי המשתמש מורחב ומחולק לשני מערכים בני שמונה כניסות באורך 16 סיביות כל אחת (בסך הכול 256 סיביות). תחילה מציבים בשמונה הכניסות של המערך הראשון את המפתח K ומציבים במערך הנוסף K' עבור 1\le j\le 8 את: K_j'=K_j\oplus C_j, כאשר C_j הם קבועים המוגדרים בטבלה להלן. מתוך שני המערכים הללו גוזרים את מפתחות כל הסבבים לפי הטבלה הבאה:





הסימן \lll הוא הזזה מעגלית של K_i לשמאל (rotate left), במספר סיביות לפי הערך המצוין מימין. למשל בסבב השני המפתח KO_{2,2} הוא הערך בכניסה K_7 לאחר הזזה מעגלית שמונה סיביות.

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




## ראו גם
* צופן בלוקים
* GSM
* MISTY
* קמליה

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

קטגוריה:צפני בלוקים