EAX
סימנים מוסכמים

בבסיס האלגוריתם קיים צופן בלוקים שההנחה היא שהוא תמורה פסאודו-אקראית (PRP), למשל ההנחה היא ש-AES מתאים להגדרה זו. סימונו הכללי הוא  E:K\times \{0,1\}^{n}\rightarrow \{0,1\}^{n} כאשר  n הוא גודל הבלוק בסיביות. בסימון מקוצר  C=E_{K}(M) - פירושו  C הוא התוצאה של הפעלת האלגוריתם  E עם המפתח  K על המסר  M. הביטוי  0^{n} פירושו הסיבית אפס כשהיא משוכפלת  n פעמים (לדוגמה  0^{5}=00000). הביטוי  L\ll 1 פירושו הזזה לשמאל של כל סיביות האופרנד  L פוזיציה אחת, כאשר הסיבית הפחות משמעותית תהיה אפס והסיבית המשמעותית ביותר נפלטת. הסימון  |M| פירושו אורכה של המחרוזת  M בסיביות. האופרטור XOR מסומן בקיצור  \oplus  והסימון " {\stackrel {}{\oplus }}{\rightarrow }" פירושו כאשר המחרוזות אינן באותו אורך, המחרוזת הקצרה יותר מיושרת לסוף המחרוזת הארוכה ואז מבוצע XOR. בנוסף האלגוריתם עושה שימוש בכמה פרימיטיבים ידועים; CBC, CTR, OMAC*‎ ו-pad. לפירוט האלגוריתמים תחילה CBC (קיצור של CBC MAC) הוא קוד אימות מסרים בסיסי ופשוט המשתמש במצב ההעפלה Cipher block chaining. האלגוריתם CTR הוא סגנון הפעלה במצב מונה של צופן בלוקים. pad משמש כשיטת עזר לריפוד המסר עבור OMAC*‎. האחרון הוא קיצור של One key MAC שהוא פונקציה פסאודו-אקראית (PRF), פרי פיתוח של בלאק ורוגווי בשנת 2000 כחלק מקוד אימות מסרים XCBC. הכוכבית מסמנת שגרסה זו שונה מהמקורית בכך שהיא מקבלת פרמטר נוסף  t הנקרא "tweak" שהוא סוג של וקטור אתחול או Nonce. זהו בעצם אלגוריתם OMAC הרגיל שבו מחרוזת הקלט משורשרת עם מחרוזת נוספת המייצגת את וקטור האתחול ואז מחשבים את תג האימות על המחרוזת החדשה.
הכוונה בביטוי  2L באלגוריתם OMAC להלן היא שמתייחסים למחרוזת הסיביות  L כאל פולינום מעל השדה  GF(2^{n}) תוך שימוש בפולינום 'קנוני' המייצג את השדה. זהו פולינום פרימיטיבי אי-פריק בעל משקל בינארי נמוך, למשל במקרה של בלוקים בגודל 128 סיביות ההמלצה היא  x^{128}+x^{7}+x^{2}+x+1. אפשר לראות באלמנטים של שדה בינארי מורחב  GF(2^{n}) כפולינומים עם מקדמים בינאריים ממעלה הנמוכה מ- n ואז פעולת החיבור בשדה היא חיבור המקדמים מודולו 2 שמקבילה בעצם לאופרטור XOR וכפל ב-2 הוא בעצם הזזה (Shift) של כל המקדמים (סיביות) של הפולינום שמאלה פוזיציה אחת. במקרה של כפל ב-2 אם הסיבית המשמעותית היא 1 התוצאה תהיה פולינום ממעלה הגבוהה או שווה ל-128 תוצאה שחורגת מהשדה לכן יש צורך לצמצם את המספר, כלומר לחלק אותו בפולינום האי-פריק ולקחת את השארית (ראו חשבון מודולרי). כל מה שנדרש הוא פעולת חיסור אחת שבשדה זה זהה לחיבור כי XOR הופכי של עצמו לכן הפעולה מסתכמת ב- 2L=(L\ll 1)\oplus 0^{120}10000111 במקרה שהסיבית המשמעותית היא 1, או פשוט  L\ll 1 במקרה שהסיבית המשמעותית היא אפס. בדרך זו, אפשר לחשב את  4L=2(2L). כדי למנוע התקפת תזמון צריך לשים לב שפעולת הכפל תתבצע בזמן קבוע (בין אם הסיבית המשמעותית היא 1 או 0).
להלן פירוט האלגוריתמים הבסיסיים ש-EAX משתמש בהם:
{\textbf {CBC}}_{\textit {\textbf {K}}}({\textit {\textbf {M}}})
{\textbf {CTR}}_{{\textit {\textbf {K}}},{\textit {\textbf {N}}}}({\textit {\textbf {M}}})
{\textbf {pad}}({\textit {\textbf {M}}},{\textit {\textbf {B}}},{\textit {\textbf {P}}})
הסבר: אם אורך המסר מתחלק ללא שארית בגודל הבלוק, אזי מבצעים XOR עם הפרמטר  B כשהוא מיושר לסוף  M ומחזירים את התוצאה. אחרת מרפדים את הבלוק האחרון בסיבית '1' ובאפסים כמידת הצורך כדי להשלימו לגודל בלוק שלם ומחזירים את התוצאה לאחר XOR עם הפרמטר  P כשהוא מיושר לסוף  M.
{\textbf {OMAC}}_{\textit {\textbf {K}}}^{t}({\textit {\textbf {M}}})
הסבר: תחילה משרשרים את  n הסיביות הראשונות של  t למסר  M, מחשבים את שני הפרמטרים  (P,B) לצורך הריפוד ומחזירים את תג האימות שהוא תוצאה של CBC של המסר לאחר הריפוד.