CLEFIA
פירוט מהלכי הצופן > פונקציות עזר

פונקציית ההצפנה הפנימית הנקראת  {\text{GFN}}_{d,r} היא בסגנון רשת פייסטל כללית מסוג 2, כאשר  d נקרא ענף המייצג את מספר המילים שהפונקציה מקבלת ו- r מייצג את מספר החזרות שהיא אמורה לבצע. פונקציית ההצפנה מנצלת שתי פונקציות פנימיות F0 ו-F1 המפורטות להלן שמקבלות קלט באורך 32 סיביות ומחזירות פלט באורך 32 סיביות. ביתר פירוט, הפונקציה  {\text{GFN}}_{4,r} מקבלת ארבע מילים באורך 32 סיביות כל אחת המסומנים  X_{0}|...|X_{d-1} וכן  dr/2 מפתחות סבבים  RK_{0}|...|RK_{rd/2-1} באורך 32 סיביות כל אחד ומחזירה ארבע מילים  Y_{0}|...|Y_{d-1}. הסימן " |" משמש להפרדה בין המילים. לדוגמה אם נבחר מפתח באורך 128 סיביות, מספר הסבבים הוא 18 ולכן מספר תת-המפתחות הוא  18\cdot 4/2=36.
תיאור הפונקציה הפנימית בשתי גרסאות  {\text{GFN}}_{4,r} שמבוצעת בתהליך ההצפנה ו- {\text{GFN}}_{8,r} לצורך הכנת תת-המפתחות במקרה שנבחר מפתח 192 או 256:
| --- | --- |
  {\boldsymbol {\mathbf {GFN} _{4,r}(RK_{0},RK_{1},...,RK_{2r-1},X_{0},X_{1},...,X_{7})}}  1.\ \ T_{0}|T_{1}|T_{2}|T_{3}\leftarrow X_{0}|X_{1}|X_{2}|X_{3}  2.\ \ {\text{For }}i=0{\text{ to }}r-1{\text{ do the following: }}  \ \ \ \ \ \ 2.1:\ T_{1}\leftarrow T_{1}\oplus \mathbf {F0} (RK_{2i},T_{0}),  \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ T_{3}\leftarrow T_{3}\oplus \mathbf {F1} (RK_{2i+1},T_{2}),  \ \ \ \ \ \ 2.2:\ T_{0}|T_{1}|T_{2}|T_{3}\leftarrow T_{1}|T_{2}|T_{3}|T_{0},  3.\ \ Y_{0}|Y_{1}|Y_{2}|Y_{3}\leftarrow T_{3}|T_{0}|T_{1}|T_{2}:   {\boldsymbol {\mathbf {GFN} _{8,r}(RK_{0},...,RK_{4r-1},X_{0},...,X_{7})}}  1.\ \ T_{0}|T_{1}|\cdots |T_{7}\leftarrow X_{0}|X_{1}|\cdots |X_{7}  2.\ \ {\text{For }}i=0{\text{ to }}r-1{\text{ do the following:}}  \ \ \ \ \ \ \ 2.1\ \ T_{1}\leftarrow T_{1}\oplus \mathbf {F0} (RK_{4i},T_{0}),\ \ T_{3}\leftarrow T_{3}\oplus \mathbf {F1} (RK_{4i+1},T_{2}),  \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ T_{5}\leftarrow T_{5}\oplus \mathbf {F0} (RK_{4i+2},T_{4}),\ \ T_{7}\leftarrow T_{7}\oplus \mathbf {F1} (RK_{4i+3},T_{6}),  \ \ \ \ \ \ \ 2.2\ \ T_{0}|T_{1}|\cdots |T_{6}jT_{7}\leftarrow T_{1}|T_{2}|\cdots |T_{7}|T_{0}  3.\ \ Y_{0}|Y_{1}|\cdots |Y_{6}|Y_{7}\leftarrow T_{7}|T_{0}|\cdots |T_{5}|T_{6}
לפונקציה  {\text{GFN}}_{4,r} קיימת פונקציה הופכית לצורך פענוח המסומנת  {\text{GFN}}_{4,r}^{-1}. את פונקציית הפענוח הפנימית מכינים מפונקציית ההצפנה על ידי שינוי סדר מפתחות הסבבים  RK_{i} מהסוף להתחלה וכן שינוי סדר ההחלפה בשלב 2.2 ל- T_{0}|T_{1}|T_{2}|T_{3}\leftarrow T_{3}|T_{0}|T_{1}|T_{2} וסדר ההחלפה בשלב 3 משתנה ל- Y_{0}|Y_{1}|Y_{2}|Y_{3}\leftarrow T_{1}|T_{2}|T_{3}|T_{0}.
הפונקציות  \mathbf {F0}  ו- \mathbf {F1}  הן:
| F0 | F1 |
| --- | --- |
  1.\ \ T\leftarrow RK\oplus x  2.\ \ {\text{Let }}T=T_{0}|T_{1}|T_{2}|T_{3},T_{i}\in \{0,1\}^{8}  \ \ \ \ \ 2.1\ \ T_{0}\leftarrow \mathbf {S0} (T_{0}),T_{1}\leftarrow \mathbf {S1} (T_{1}),  \ \ \ \ \ 2.2\ \ T_{2}\leftarrow \mathbf {S0} (T_{2}),T_{3}\leftarrow \mathbf {S1} (T_{3}),  3.\ \ {\text{Let }}y=y_{0}|y_{1}|y_{2}|y_{3},y_{i}\in \{0,1\}^{8}  \ \ \ \ 3.1\ \ ^{t}(y_{0},y_{1},y_{2},y_{3})=M_{0}\ \ ^{t}(T_{0},T_{1},T_{2},T_{3}):   1.\ \ T\leftarrow RK\oplus x  2.\ \ {\text{Let }}T=T_{0}|T_{1}|T_{2}|T_{3},T_{i}\in \{0,1\}^{8}  \ \ \ \ \ 2.1\ \ T_{0}\leftarrow \mathbf {S1} (T_{0}),T_{1}\leftarrow \mathbf {S0} (T_{1}),  \ \ \ \ \ 2.2\ \ T_{2}\leftarrow \mathbf {S1} (T_{2}),T_{3}\leftarrow \mathbf {S0} (T_{3}),  3.\ \ {\text{Let }}y=y_{0}|y_{1}|y_{2}|y_{3},y_{i}\in \{0,1\}^{8}  \ \ \ \ \ 3.1\ \ ^{t}(y_{0},y_{1},y_{2},y_{3})=M_{1}\ ^{t}(T_{0},T_{1},T_{2},T_{3})