קמליה - Camellia הוא צופן בלוקים סימטרי שפותח בשנת 2000 בשיתוף פעולה של מיצובישי ו-NTT על ידי צוות קריפטוגרפים בראשות מיצורו מצואי . הוצע לגופי תקינה רבים, נכלל ברשימת הצפנים המומלצים של פרויקט NESSIE האירופאי משנת 2003 ופרויקט CRYPTREC של ממשלת יפן, הוצע במזכר של IETF כתוספת ל-IPSec, אושר על ידי ארגון התקינה הבינלאומי בתקן ISO/IEC 18033-3 ונכלל בפרוטוקולי אבטחה פופולריים רבים, ביניהם SSL, OpenPGP ו-S/MIME. ספריות אבטחה רבות מספקות תמיכה לקמליה, ביניהן Crypto++, GPG, OpenSSL. קמליה מוגן בפטנט והותר על ידי NTT לשימוש ברישיון חופשי.
הצופן מקבל בלוק מידע בגודל 128 סיביות ומפתח הצפנה בשלושה גדלים אפשריים 128, 192 או 256 סיביות והפלט הוא בלוק מוצפן בגודל 128 סיביות. הצופן בעל סגנון ייחודי - מעין רשת פייסטל רקורסיבית, בשמונה-עשר או עשרים וארבעה סבבים בהתאם לאורך המפתח ופועל ברמה של בתים. הפונקציה הפנימית מתנהגת כרשת החלפה-תמורה על שמונה בתים, שכבת ההחלפה מתבצעת במקביל באמצעות שמונה תיבות החלפה (S-box) בגודל 8x8 סיביות ושכבת התמורה היא קומבינציה של XOR בין בתי הקלט. בנוסף, בדומה לMISTY ו-KASUMI כולל גם שכבת טרנספורמציה ליניארית תלוית מפתח שמופעלת אחת לשישה סבבים.
ביטחון.
צופן קמליה קיבל הכרה כצופן מודרני בטוח ואינו נופל ברמתו מ-AES. הוא זוכה לפופולריות רבה גם עקב פשטותו ויעילותו הרבה הן בחומרה והן בתוכנה. ההתקפות הטובות ביותר הידועות נגד הצופן הן התקפה שנקראת Square Attack על גרסה מצומצמת (תשעה סבבים) בסיבוכיות של formula_1 הצפנות ועם formula_2 טקסטים מוצפנים. התקפה אחרת שנקראת Rectangle Attack של Shirai מצליחה לשבור את הצופן בעשרה סבבים בסיבוכיות של formula_3 קריאות זיכרון עם formula_4 טקסטים נבחרים. התקפה נוספת שהיא סוג של התקפה דיפרנציאלית אינה טובה משמעותית מכוח גס. בכללות אילו התקפות תאורטיות שאינן מסכנות את ביטחון הצופן. יש לציין שהטרנספורמציה הליניארית הנוספת (להלן), אחראית בין היתר על חוזקו.
תיאור הצופן.
צופן קמליה (על שם צמח התה) הוא ממשיכו של E2 שהיה מהמועמדים ל-AES והסגנון הייחודי שלו מבוסס עליו במידה רבה. הפעולות בצופן הן בעיקר פעולות החלפה ופעולות לוגיות OR, XOR ו-AND על מילים או בתים. כאשר המרות ממילים לבתים וההפך הן לפי סדר בתים גדול (למשל אם המילה מכילה את הערך 0x01234567 (בבסיס הקסדצימלי) בהמרה לבתים הבית הראשון יכיל 0x01, השני 0x23, השלישי 0x45 והרביעי 0x67). בגרסת מפתח 128 סיביות, בלוק המידע עובר 18 סבבים של טרנספורמציה במבנה פייסטל בנוסף לשכבות הטרנספורמציה הליניארית formula_5 והטרנספורמציה ההופכית formula_6 לאחר הסבב השישי והסבב השנים-עשר (כמתואר בתרשים משמאל). פונקציית הרחבת המפתח מקבלת את המפתח הסודי המסופק על ידי המשתמש ומייצרת ממנו תת-מפתחות מורחבים לכל הסבבים שהם ארבעה מפתחות הלבנה המסומנים formula_7 כאשר formula_8, שמונה עשר מפתחות סבבים formula_9 כאשר formula_10 וכן ארבעה מפתחות formula_11 (עבור הפונקציות הליניאריות) כאשר formula_12, כולם מילים באורך 64 סיביות. תחילה בלוק הטקסט formula_13 מחובר ב-XOR (המסומן כאן ב-formula_14) עם שני המפתחות הראשונים formula_15 בהתאמה, פעולה זו נקראת הלבנה. התוצאה מחולקת לשני חצאים formula_16 ו-formula_17 ואז הפעולות הבאות מבוצעות formula_18 פעמים כאשר formula_19 למעט הסבבים 6 ו-12:
עבור הסבבים 6 ו-12 מבצעים כדלהלן:
לבסוף התוצאות האחרונות formula_26 ו-formula_27 עוברים שוב הלבנה עם המפתחות formula_28 בהתאמה. במילים אחרות פלט הצופן הוא formula_29.
מפתחות 192 ו-256 סיביות.
כאשר נבחר מפתח באורך 192 או 256 סיביות יחולו השינויים הבאים. יהיו שישה מפתחות עבור הפונקציות הליניאריות כלומר נוספו שני מפתחות formula_30. יהיו 24 מפתחות formula_9 במקום 18 וכן קוראים לטרנספורמציה הליניארית והטרנספורמציה ההופכית שלה שלוש פעמים; בסבבים 6, 12 ו-18. כל היתר זהה.
פענוח.
הפענוח בקמליה זהה להצפנה למעט היפוך סדר תת-המפתחות. אם המפתח הוא באורך 128 סיביות, תחילה מבטלים את ההלבנה על ידי חיבור ב-XOR עם המפתחות formula_28 בהתאמה ומתקבלים החצאים formula_33 מהסבב האחרון של ההצפנה ואז מבצעים עבור formula_34 עד formula_35 בסדר יורד למעט הסבבים 13 ו-7 כדלהלן:
בסבבים 13 ו-7 מבצעים:
הטקסט הקריא יהיה formula_42.
אם המפתח הנבחר הוא באורך 192 או 256 סיביות, ההבדלים הם שמתבצעים בסך הכול 24 סבבים בסדר יורד והטרנספורמציה הליניארית מתבצעת בסבבים 19, 13 ו-7.
הכנת מפתח.
הכנת המפתח נעשית באמצעות גרסה מצומצמת של רשת פייסטל כמתואר בתרשים משמאל. תחילה מגדירים שני משתנים מקומיים formula_43 באורך 128 סיביות כל אחד בהם מציבים את המפתח המסופק על ידי המשתמש. לכל משתנה אפשר להתייחס כאל מילה אחת באורך 128 סיביות או שתי מילים באורך 64 סיביות המייצגים את שני החצאים של משתנה האב, צד ימין של formula_44 ייקרא formula_45 וצד שמאל formula_46 וכן לגבי formula_47, בסך הכול ארבעה רבעים formula_48 ו-formula_49 באורך 64 סיביות כל אחד. כאשר המפתח המסופק על ידי המשתמש הוא באורך 128 סיביות מציבים אותו ב-formula_50 ואילו המילה formula_51. את המפתח המסופק על ידי המשתמש טוענים למשתנים הפנימיים כך שהכללים הבאים מתקיימים:
בנוסף מגדירים שני משתנים formula_68 ו-formula_69 באורך 128 סיביות כל אחד, אותם מאתחלים כדלהלן. תחילה מבצעים formula_70, את התוצאה מצפינים בהצפנה מקוצרת ברשת פייסטל בשני סבבים עם הפונקציה formula_71 המתוארת להלן כאשר הערכים formula_72 מתוך הטבלה להלן משמשים כמפתחות הצפנה. את התוצאה מחברים ב-XOR עם formula_44 ושוב מצפינים עם formula_74 ו-formula_75 והתוצאה האחרונה תהיה formula_68. את formula_68 מחברים שוב ב-XOR עם formula_47 ומצפינים עם formula_79 והתוצאה האחרונה היא formula_69. התהליך מומחש בתרשים משמאל.
ערכי הקבועים הם 16 ספרות החל מהספרה השנייה ועד הספרה ה-17 של הייצוג ההקסדצימלי של חלק השבר של השורש הריבועי של ששת המספרים הראשוניים הראשונים.
מתוך המשתנים formula_81 גוזרים תת-מפתחות formula_82 כל אחד באורך 64 סיביות. כל מפתח נגזר מהחלק השמאלי או הימני של הזזה מעגלית של אחד מהמשתנים האמורים לפי הטבלה הבאה. למשל אם המפתח הנבחר הוא 192 או 256 סיביות אזי לפי הטבלה הימנית, ערכו של תת-המפתח formula_83 עבור הסבב השמיני הוא החצי הימני של formula_84 המסומן בטבלה formula_85 לאחר הזזה מעגלית 30 פוזיציות לשמאל.
הביטוי formula_86 פירושו כאן הזזה מעגלית של formula_59 במספר סיביות המצוין על ידי formula_88 בגבולות מילה באורך 64 סיביות. לדוגמה אם המשתנה באורך 8 סיביות (בית), והוא מכיל את הערך 169 או 'A9' (בבסיס בינארי "10101001") לאחר הזה מעגלית לשמאל שלוש סיביות יתקבל 53 או '35' ("110101").
היות שכל מפתח כאמור הוא תוצאה של הזזה מעגלית של אחד המשתנים האמורים, אפשר להכין את מפתחות הסבבים תוך כדי ריצה במקום לאחסן את כל הטבלה בזיכרון ובכך לחסוך מקום.
פונקציות עזר.
להלן תיאור הפונקציות המרכיבות את הצופן מהגדול לקטן. הפונקציה formula_71 המופיעה בתרשים משמאל מוגדרת כדלהלן:
הפונקציה מקבלת שני פרמטרים, ערך formula_91 וקטע מתאים מהמפתח המורחב formula_92 באורך 64 סיביות כל אחד ומחזירה את formula_93 גם הוא באורך 64 סיביות תוך שימוש בפונקציות formula_94 ו-formula_95 המייצגות החלפה ותמורה בהתאמה בנוסף לחיבור עם formula_92.
הפונקציה FL.
הפונקציה הליניארית formula_5 מקבלת שני פרמטרים; formula_91 באורך 64 סיביות המחולק לצד ימין וצד שמאל formula_99 ו-formula_100 בהתאמה ואת formula_101 המחולק גם הוא לשני חצאים formula_102 ומחזירה את formula_93 באורך 64 סיביות כדלהלן:
כאשר
הסימן formula_107 מייצג את האופרטור הלוגי AND והסימן formula_108 מייצג את האופרטור הלוגי OR.
הפונקציה הליניארית ההופכית.
הפונקציה ההופכית מוגדרת כך:
כאשר
התרשים משמאל מתאר את שתי הפונקציות הליניאריות.
הפונקציה S.
פונקציית ההחלפה מקבלת קלט formula_112 באורך 8 בתים ונעזרת בארבע טבלאות החלפה formula_113 ו-formula_114 להלן כדי להחליף את ערכי הבתים בבתים שבטבלה לפי אינדקסים - בכל טבלה בסך הכול 256 ערכים אפשריים. כדלהלן:
לדוגמה אם ערכו של הבית formula_117, התוצאה לפי הטבלה הראשונה היא formula_118.
תיבות ההחלפה.
תיבות ההחלפה של קמליה (s-box) הן ערכי שקילות אפינית של פונקציות הופכיות מעל השדה formula_119. בהצגה אלגברית:
הפונקציה formula_124 היא צירוף ליניארי של סיביות הקלט לפי הנוסחה:
הפונקציה formula_127 מוגדרת כך:
כאשר formula_130 מקיים formula_131 וכן formula_132 הוא אלמנט בשדה formula_133 המקיים formula_134.
הפונקציה formula_135 מוגדרת בסיביות עבור הקלט formula_136 כך:
אפשר לראות שערכי התיבות formula_139 ו-formula_114 למעשה נגזרות מהתיבה הראשונה. לכן אם הזיכרון מוגבל כמו בכרטיס חכם, אפשר לאחסן בזיכרון רק את הטבלה הראשונה ולחשב את ההחלפה במקום על ידי הנוסחאות המתוארות. למשל אם formula_141 החלפה של formula_59 לפי טבלה 3 היא: formula_143.
להלן ערכי תיבות ההחלפה:
formula_144
112, 130, 44, 236, 179, 39, 192, 229, 228, 133, 87, 53, 234, 12, 174, 65,
35, 239, 107, 147, 69, 25, 165, 33, 237, 14, 79, 78, 29, 101, 146, 189,
134, 184, 175, 143, 124, 235, 31, 206, 62, 48, 220, 95, 94, 197, 11, 26,