CLEFIA הוא צופן בלוקים איטרטיבי במבנה של רשת פייסטל כללית בארבעה טורים ושתי פונקציות פנימיות המופעלות על 32 סיביות במספר סבבים. אחד מהחידושים בו הוא שהפונקציה הפנימית שלו מיישמת מנגנון פיזור מתחלף (בקיצור DSM), שתי מטריצות פיזור שונות ושתי תיבות החלפה בעלות תכונות אלגבריות שונות המופעלות לסירוגין, מניבות עמידות גבוהה במיוחד נגד קריפטואנליזה מודרנית. מסיבה זו מספר הסבבים של הצופן מופחת. חידוש אחר הוא תהליך הכנת תת-מפתחות קומפקטי ויעיל במבנה פייסטל.
CLEFIA הוא צופן מאוזן היטב הן מהיבט של יעילות והן מהיבט של ביטחון. הוא משיג ביצועים גבוהים בחומרה, תפוקה של 1.60 Gbps (גיגה-בתים לשנייה) בקירוב עם פחות מ-6000 שערים, עם ספריית CMOS ASIC formula_1. בתוכנה הוא מגיע ל-13 מחזורי שעון לבית (cpb) או 1.48 Gbps על מעבד AMD אתלון 64 ביט. הביצועים הגבוהים בחומרה מציבים אותו כמתחרה ראוי עבור חומרה מוגבלת משאבים כמו RFID או סנסורים אלחוטיים זעירים.
פירוט מהלכי הצופן.
שלד פונקציות ההצפנה והפענוח בנוי משלושה מהלכים. המהלך הראשון והאחרון הם פעולות הלבנה והמהלך האמצעי כולל קריאה לפונקציה פנימית המבצעת formula_2 סבבים של פעולות החלפה ופיזור. מספר הסבבים משתנה בהתאם לאורך המפתח. עבור מפתח באורך 128 סיביות formula_3, עבור מפתח 192 סיביות formula_4 ועבור מפתח 256 סיביות formula_5.
פונקציות עזר.
פונקציית ההצפנה הפנימית הנקראת formula_6 היא בסגנון רשת פייסטל כללית מסוג 2, כאשר formula_7 נקרא ענף המייצג את מספר המילים שהפונקציה מקבלת ו-formula_2 מייצג את מספר החזרות שהיא אמורה לבצע. פונקציית ההצפנה מנצלת שתי פונקציות פנימיות F0 ו-F1 המפורטות להלן שמקבלות קלט באורך 32 סיביות ומחזירות פלט באורך 32 סיביות. ביתר פירוט, הפונקציה formula_9 מקבלת ארבע מילים באורך 32 סיביות כל אחת המסומנים formula_10 וכן formula_11 מפתחות סבבים formula_12 באורך 32 סיביות כל אחד ומחזירה ארבע מילים formula_13. הסימן "formula_14" משמש להפרדה בין המילים. לדוגמה אם נבחר מפתח באורך 128 סיביות, מספר הסבבים הוא 18 ולכן מספר תת-המפתחות הוא formula_15.
תיאור הפונקציה הפנימית בשתי גרסאות formula_9 שמבוצעת בתהליך ההצפנה ו-formula_17 לצורך הכנת תת-המפתחות במקרה שנבחר מפתח 192 או 256:
לפונקציה formula_9 קיימת פונקציה הופכית לצורך פענוח המסומנת formula_19. את פונקציית הפענוח הפנימית מכינים מפונקציית ההצפנה על ידי שינוי סדר מפתחות הסבבים formula_20 מהסוף להתחלה וכן שינוי סדר ההחלפה בשלב 2.2 ל-formula_21 וסדר ההחלפה בשלב 3 משתנה ל-formula_22.
הפונקציות formula_23 ו-formula_24 הן:
תיבות ההחלפה S0 ו-S1.
ישנם שני סוגי תיבות החלפה ב-CLEFIA האחד מבוסס על בחירה אקראית של ערכים עם תכונות סטטיסטיות טובות כמו ב-DES והשני מבוסס על פונקציה הופכית מעל השדה formula_25 כמו ב-AES. הטבלאות הבאות מכילות את ערכי תיבות ההחלפה בבסיס הקסדצימלי כאשר עבור קלט בגודל בית אחד (8 סיביות), ארבע הסיביות המשמעותיות (הניבל העליון) משמשות כאינדקס לשורה המתאימה בטבלה ואילו ארבע הסיביות הפחות משעותיות (הניבל התחתון) משמשות כאינדקס לעמודה המתאימה:
את ההחלפה אפשר לבצע לפי הטבלאות האמורות או לחשבן תוך כדי ריצה במידה שהזיכרון מוגבל. שטח הזיכרון ששתי טבלאות מאכלסות הוא 512 בתים (4096 סיביות). את הכנת הטבלה S0 אפשר לבצע כך. מתחילים מטבלה המכילה 4 על 16 ערכים בגודל 4 סיביות (בסך הכול 256 סיביות):
מחלקים את הקלט formula_26 לשני חצאים formula_27 באורך 4 סיביות כל אחד ומחשבים:
התוצאה היא formula_28.
את הטבלה S1 אפשר להכין על ידי הנוסחה הבאה: אם formula_29 אז formula_30 אחרת formula_31. הפונקציה ההופכית מבוצעת מעל השדה formula_25 עם הפולינום הפרימיטיבי formula_33 והפונקציות formula_34 ו-formula_35 הן טרנספורמציות אפיניות מעל formula_36 (הכפלת וקטור הקלט במטריצה קבועה וחיבור עם וקטור קבוע):
מטריצות הפיזור M0 ו-M1.
הכפל של המטריצה בוקטור הקלט מתבצע מודולו פולינום אי פריק (פולינום פרימיטיבי) formula_38 מעל השדה formula_25 ובבסיס הקסדצימלי הוא formula_40. דרך יעילה במחשב לבצע את הכפל היא רקורסיה של הכפלה בפולינום 'x' (formula_41) ששקולה להזזה (shift) של הקלט שמאלה סיבית אחת בתנאי אחד; אם מתרחשת גלישה (אם הסיבית המשמעותית ביותר הייתה '1' לפני ההזזה) יש לבצע חיסור (XOR) עם הפולינום הפרימיטיבי האמור (נקרא "צמצום מודולרי"). אם נתונה פונקציה formula_42 שמבצעת את הכפל האמור אז אפשר להכפיל את formula_43 בכל מספר, למשל formula_44 או formula_45. להסבר נוסף על אריתמטיקה של פולינומים מעל שדה בינארי מורחב ראה צופן ריינדל.
הכנת מפתחות הסבבים.
תהליך הכנת המפתחות תומך בשלושה מפתחות שונים: 128 סיביות, 192 סיביות או 256 סיביות. התהליך כולל הכנת formula_46 מפתחות סבבים formula_47 וארבעה מפתחות הלבנה formula_48. והוא כולל פונקציית החלפה הנקראת DoubleSwap המקבלת קלט באורך 128 סיביות ומבצעת החלפה של סיביות לפי הכלל הבא:
כאשר formula_50 פירושו תת-מחרוזת של formula_51 המתחילה בפוזיציה formula_43 ומסתיימת בפוזיציה formula_53.
בנוסף תהליך ההכנה עושה שימוש ב-formula_54 קבועים formula_55 כאשר formula_56. מספר הקבועים הדרוש תלוי באורך המפתח שנבחר על ידי המשתמש. הקבועים הללו משמשים כמפתחות הצפנה לפונקציה formula_57 או formula_58 (המתוארת לעיל) כשהתוצאה מוצבת במערך זמני formula_59.
אם המפתח formula_60 שנבחר על ידי המשתמש באורך 128 סיביות מבצעים כדלהלן:
להכנת מפתחות הסבבים במקרה של מפתח מאסטר 192 או 256, תחילה מכינים שני משתנים formula_61 בהם מציבים את המפתח formula_60. לאחר מכן מחשבים שני משתנים נוספים formula_63 על ידי הפונקציה formula_58. מתוך ארבעת המשתנים שהתקבלו מכינים את כל formula_65 מפתחות הסבבים ואת כל formula_48 מפתחות ההלבנה כדלקמן.
הכנת המשתנים formula_63 מתוך formula_61 עבור מפתח באורך formula_69 סיביות כאשר formula_70 או formula_71:
הרחבת המשתנים formula_72 עבור מפתח באורך formula_69 סיביות כאשר formula_70 או formula_71:
הקבועים להכנת המפתחות.
הקבועים formula_76 כאשר formula_56 מכילים בסך הכול 60, 84 או 92 ערכים באורך 32 סיביות בהתאם לאורך המפתח. את הקבועים אפשר להכין בזמן ריצה או להשתמש בטבלאות מוכנות מראש אם זיכרון זמין.
להכנת הקבועים תחילה מציבים את formula_78, formula_79. אילו הם 16 הספרות הבינאריות הראשונות של חלק השבר של הלוגריתם הטבעי ופאי (בבסיס הקסדצימלי: formula_80 בהתאמה). לאחר מכן מבצעים formula_81 פעמים:
הסימן formula_82 פירושו אופרטור השלילה. הכפל האחרון (שורה 2.3) מתבצע מעל השדה formula_83 מודולו הפולינום האי פריק formula_84 או formula_85. למשל formula_86. בפועל הכפל הזה מבוצע על ידי סדרה של ארבע הזזות ברמה של בתים ושני XOR בלבד. הפעולה מומחשת בפסאודו קוד הבא כאשר המשתנה formula_87 המחולק לשני בתים מוכפל ב-formula_88 מודולו formula_84:
וקטורי האתחול עבור כל המפתחות, מספר הקבועים ומספר הסבבים formula_81 מוצגים בטבלה הבאה:
וקטורי האתחול הם 16 הספרות הבינאריות הראשונות של חלק השבר של שורש ממעלה שלישית של 2, 3 ו-5 בהתאמה.
ביטחון.
CLEFIA הוא צופן חדש יחסית עם מעט קריפטואנליזה ידועה, בעיקר וריאציות של קריפטואנליזה דיפרנציאלית. ההתקפה הטובה ביותר נגד הצופן היא התקפת "דיפרנציאלים בלתי סבירים" שמצריכה formula_91 טקסטים נבחרים נגד 13 סבבים בסיבוכיות של formula_91 הצפנות עם מפתח 128 סיביות. התקפה דומה ישימה נגד הצופן עם 14 ו-15 סבבים עם מפתחות 192 ו-256 בהתאמה. התקפה נוספת היא התקפת "דיפרנציאלים בלתי אפשריים" היעילה נגד CLEFIA-192/256 עם 11 סבבים בסיבוכיות של formula_93 טקסטים נבחרים ו-formula_93 הצפנות. נגד 12 סבבים של CLEFIA-128 ההתקפה מגיעה לסיבוכיות זמן ומקום של formula_95. ונגד CLEFIA-192/256 בסיבוכיות של formula_96 עם 13 סבבים. עם 14 סבבים הסיבוכיות מגיעה ל-formula_97 הצפנות. אילו בעיקרון התקפות תאורטיות שאינן מסכנות את השימוש באלגוריתם באופן מעשי.
קוד לדוגמה של CLEFIA 256.
const unsigned char clefia_s0[256] = { /* S0 (8-bit S-box based on four 4-bit S-boxes) */
0x57U, 0x49U, 0xd1U, 0xc6U, 0x2fU, 0x33U, 0x74U, 0xfbU, 0x95U, 0x6dU, 0x82U, 0xeaU, 0x0eU, 0xb0U, 0xa8U, 0x1cU,
0x28U, 0xd0U, 0x4bU, 0x92U, 0x5cU, 0xeeU, 0x85U, 0xb1U, 0xc4U, 0x0aU, 0x76U, 0x3dU, 0x63U, 0xf9U, 0x17U, 0xafU,
0xbfU, 0xa1U, 0x19U, 0x65U, 0xf7U, 0x7aU, 0x32U, 0x20U, 0x06U, 0xceU, 0xe4U, 0x83U, 0x9dU, 0x5bU, 0x4cU, 0xd8U,
0x42U, 0x5dU, 0x2eU, 0xe8U, 0xd4U, 0x9bU, 0x0fU, 0x13U, 0x3cU, 0x89U, 0x67U, 0xc0U, 0x71U, 0xaaU, 0xb6U, 0xf5U,
0xa4U, 0xbeU, 0xfdU, 0x8cU, 0x12U, 0x00U, 0x97U, 0xdaU, 0x78U, 0xe1U, 0xcfU, 0x6bU, 0x39U, 0x43U, 0x55U, 0x26U,
0x30U, 0x98U, 0xccU, 0xddU, 0xebU, 0x54U, 0xb3U, 0x8fU, 0x4eU, 0x16U, 0xfaU, 0x22U, 0xa5U, 0x77U, 0x09U, 0x61U,
0xd6U, 0x2aU, 0x53U, 0x37U, 0x45U, 0xc1U, 0x6cU, 0xaeU, 0xefU, 0x70U, 0x08U, 0x99U, 0x8bU, 0x1dU, 0xf2U, 0xb4U,
0xe9U, 0xc7U, 0x9fU, 0x4aU, 0x31U, 0x25U, 0xfeU, 0x7cU, 0xd3U, 0xa2U, 0xbdU, 0x56U, 0x14U, 0x88U, 0x60U, 0x0bU,
0xcdU, 0xe2U, 0x34U, 0x50U, 0x9eU, 0xdcU, 0x11U, 0x05U, 0x2bU, 0xb7U, 0xa9U, 0x48U, 0xffU, 0x66U, 0x8aU, 0x73U,