CLEFIA
פירוט מהלכי הצופן > תיבות ההחלפה S0 ו-S1

ישנם שני סוגי תיבות החלפה ב-CLEFIA האחד מבוסס על בחירה אקראית של ערכים עם תכונות סטטיסטיות טובות כמו ב-DES והשני מבוסס על פונקציה הופכית מעל השדה  GF(2^{8}) כמו ב-AES. הטבלאות הבאות מכילות את ערכי תיבות ההחלפה בבסיס הקסדצימלי כאשר עבור קלט בגודל בית אחד (8 סיביות), ארבע הסיביות המשמעותיות (הניבל העליון) משמשות כאינדקס לשורה המתאימה בטבלה ואילו ארבע הסיביות הפחות משעותיות (הניבל התחתון) משמשות כאינדקס לעמודה המתאימה:
| S0 | S1 |
| --- | --- |
    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f 0. 57 49 d1 c6 2f 33 74 fb 95 6d 82 ea 0e b0 a8 1c 1. 28 d0 4b 92 5c ee 85 b1 c4 0a 76 3d 63 f9 17 af 2. bf a1 19 65 f7 7a 32 20 06 ce e4 83 9d 5b 4c d8 3. 42 5d 2e e8 d4 9b 0f 13 3c 89 67 c0 71 aa b6 f5 4. a4 be fd 8c 12 00 97 da 78 e1 cf 6b 39 43 55 26 5. 30 98 cc dd eb 54 b3 8f 4e 16 fa 22 a5 77 09 61 6. d6 2a 53 37 45 c1 6c ae ef 70 08 99 8b 1d f2 b4 7. e9 c7 9f 4a 31 25 fe 7c d3 a2 bd 56 14 88 60 0b 8. cd e2 34 50 9e dc 11 05 2b b7 a9 48 ff 66 8a 73 9. 03 75 86 f1 6a a7 40 c2 b9 2c db 1f 58 94 3e ed a. fc 1b a0 04 b8 8d e6 59 62 93 35 7e ca 21 df 47 b. 15 f3 ba 7f a6 69 c8 4d 87 3b 9c 01 e0 de 24 52 c. 7b 0c 68 1e 80 b2 5a e7 ad d5 23 f4 46 3f 91 c9 d. 6e 84 72 bb 0d 18 d9 96 f0 5f 41 ac 27 c5 e3 3a e. 81 6f 07 a3 79 f6 2d 38 1a 44 5e b5 d2 ec cb 90 f. 9a 36 e5 29 c3 4f ab 64 51 f8 10 d7 bc 02 7d 8e :     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f 0. 6c da c3 e9 4e 9d 0a 3d b8 36 b4 38 13 34 0c d9 1. bf 74 94 8f b7 9c e5 dc 9e 07 49 4f 98 2c b0 93 2. 12 eb cd b3 92 e7 41 60 e3 21 27 3b e6 19 d2 0e 3. 91 11 c7 3f 2a 8e a1 bc 2b c8 c5 0f 5b f3 87 8b 4. fb f5 de 20 c6 a7 84 ce d8 65 51 c9 a4 ef 43 53 5. 25 5d 9b 31 e8 3e 0d d7 80 ff 69 8a ba 0b 73 5c 6. 6e 54 15 62 f6 35 30 52 a3 16 d3 28 32 fa aa 5e 7. cf ea ed 78 33 58 09 7b 63 c0 c1 46 1e df a9 99 8. 55 04 c4 86 39 77 82 ec 40 18 90 97 59 dd 83 1f 9. 9a 37 06 24 64 7c a5 56 48 08 85 d0 61 26 ca 6f a. 7e 6a b6 71 a0 70 05 d1 45 8c 23 1c f0 ee 89 ad b. 7a 4b c2 2f db 5a 4d 76 67 17 2d f4 cb b1 4a a8 c. b5 22 47 3a d5 10 4c 72 cc 00 f9 e0 fd e2 fe ae d. f8 5f ab f1 1b 42 81 d6 be 44 29 a6 57 b9 af f2 e. d4 75 66 bb 68 9f 50 02 01 3c 7f 8d 1a 88 bd ac f. f7 e4 79 96 a2 fc 6d b2 6b 03 e1 2e 7d 14 95 1d 
את ההחלפה אפשר לבצע לפי הטבלאות האמורות או לחשבן תוך כדי ריצה במידה שהזיכרון מוגבל. שטח הזיכרון ששתי טבלאות מאכלסות הוא 512 בתים (4096 סיביות). את הכנת הטבלה S0 אפשר לבצע כך. מתחילים מטבלה המכילה 4 על 16 ערכים בגודל 4 סיביות (בסך הכול 256 סיביות):
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f |
| SS0(x) | e | 6 | c | a | 8 | 7 | 2 | f | b | 1 | 4 | 0 | 5 | 9 | d | 3 |
| SS1(x) | 6 | 4 | 0 | d | 2 | b | a | 3 | 9 | c | e | f | 8 | 7 | 5 | 1 |
| SS2(x) | b | 8 | 5 | e | a | 6 | 4 | c | f | 7 | 2 | 3 | 1 | 0 | d | 9 |
| SS3(x) | a | 2 | 6 | d | 3 | 4 | 5 | e | 0 | 7 | 8 | 9 | b | f | c | 1 |
מחלקים את הקלט  x לשני חצאים  x_{0},x_{1} באורך 4 סיביות כל אחד ומחשבים:
התוצאה היא  y=(y_{0},y_{1}).
את הטבלה S1 אפשר להכין על ידי הנוסחה הבאה: אם  f(x)\neq 0 אז  y=g(f(x)^{-1}) אחרת  y=g(0). הפונקציה ההופכית מבוצעת מעל השדה  GF(2^{8}) עם הפולינום הפרימיטיבי  z^{8}+z^{4}+z^{3}+z^{2}+1 והפונקציות  f ו- g הן טרנספורמציות אפיניות מעל  GF(2) (הכפלת וקטור הקלט במטריצה קבועה וחיבור עם וקטור קבוע):
| f | g |
| --- | --- |
  \textstyle {\begin{pmatrix}y_{0}\\y_{1}\\y_{2}\\y_{3}\\y_{4}\\y_{5}\\y_{6}\\y_{7}\end{pmatrix}}={\begin{pmatrix}0&0&0&1&1&0&0&0\\0&1&0&1&0&0&0&1\\0&0&0&0&0&0&0&1\\0&0&0&0&0&1&1&0\\0&1&1&0&0&1&0&1\\0&1&0&1&1&1&0&0\\0&1&1&0&0&0&0&0\\1&0&0&0&0&0&0&1\end{pmatrix}}\cdot {\begin{pmatrix}x_{0}\\x_{1}\\x_{2}\\x_{3}\\x_{4}\\x_{5}\\x_{6}\\x_{7}\end{pmatrix}}+{\begin{pmatrix}0\\0\\0\\1\\1\\1\\1\\0\end{pmatrix}}:   {\begin{pmatrix}y_{0}\\y_{1}\\y_{2}\\y_{3}\\y_{4}\\y_{5}\\y_{6}\\y_{7}\end{pmatrix}}={\begin{pmatrix}0&0&0&0&1&0&1&0\\0&1&0&0&0&0&0&1\\0&1&0&1&1&0&0&0\\0&0&1&0&0&0&0&0\\0&0&1&1&0&0&0&0\\0&0&0&0&0&0&1&0\\1&0&0&1&0&0&0&0\\0&1&0&0&0&1&0&0\end{pmatrix}}\cdot {\begin{pmatrix}x_{0}\\x_{1}\\x_{2}\\x_{3}\\x_{4}\\x_{5}\\x_{6}\\x_{7}\end{pmatrix}}+{\begin{pmatrix}0\\1\\1\\0\\1\\0\\0\\1\end{pmatrix}}