בקריפטוגרפיה, **EAX** הוא מצב הפעלה של צופן בלוקים עם הצפנה מאומתת, שפותח ב-2004 על ידי מיהיר בלייר, פיליפ רוגווי ודייוויד וגנר אוניברסיטת קליפורניה בברקלי והוצע כאלטרנטיבה ל-CCM לצורך תקן הצפנה מאומתת. האלגוריתם שייך לקטגוריה AEAD - הצפנה מאומתת עם מידע נלווה ופועל בשתי ריצות. בהינתן מסר M, וקטור אתחול N שנקרא גם Nonce וכותר H באורך שרירותי כלשהו, האלגוריתם מצפין תחילה את M תוך שימוש בצופן בלוקים בטוח לפי העדפת המשתמש ומייצר טקסט מוצפן C ולאחר מכן מייצר תג אימות T להבטחת שלמות C והמידע הנלווה H, תוך ביצוע {\displaystyle 2\left\lceil |M|/n\right\rceil +\left\lceil |H|/n\right\rceil +\left\lceil |N|/n\right\rceil } ריצות של צופן הבלוקים כאשר n הוא אורך הבלוק בסיביות (128 סיביות במקרה של AES).‏ EAX הוא און ליין, אפשר להתחיל הצפנה או פענוח לפני שמתקבל כל המסר ואורכו לא חייב להיות ידוע מראש וכן ניתן לחשב חלקים קבועים מראש כדי להפחית את כמות העבודה פר מסר. EAX מוכח כבטוח תחת הנחות סטנדרטיות ויעיל ופשוט יותר מ-CCM וכן כמו המתחרה, למיטב ידיעת המפתחים נקי מזכויות יוצרים וחופשי לשימוש לכל מטרה.

הצפנה מאומתת
------------

 ערך מורחב – **הצפנה מאומתת**  

הצפנה מאומתת היא סכמת הצפנה סימטרית שבה מלבד הבטחת הסודיות של הטקסט המוצפן מטרתה להבטיח את שלמותו ולאמת את מקורו. הרעיון הוא שבאמצעות המפתח הסודי המשותף לשולח והמקבל, השולח מייצר תג אימות שמאפשר למקבל לבדוק האם המסר המוצפן שקיבל שונה או הוחלף בעת העברתו. תג האימות מבטיח כי לא יהיה אפשרי ליריב בעל כוח חישוב סביר לזייף מסר מוצפן עם תג אימות מתאים בלא ידיעת המפתח הסודי המשותף כך שפונקציית האימות של המקבל תחזיר "אמת", דהיינו הזיוף לא ייחשף והתג ייראה לגיטימי, כביכול התקבל מהשולח המחזיק במפתח הסודי המתאים. 

קיימות מספר סכמות תיקניות להצפנה מאומתת ביניהן כאלו שנקראות 'גנריות' המשלבות הצפנה עם אימות בשני שלבים נפרדים ובלתי חופפים, כך שאפשר להחליף אלגוריתם הצפנה או אימות לפי הצורך, וכאלו שמשלבים הצפנה עם אימות יחד. וכן כאלו שפועלים בריצה אחת או בשתי ריצות. בשל פטנטים וזכויות יוצרים שמקשים על תיקנון אלגוריתמים יעילים כמו OCB, פותחו CCM ו-EAX שאמנם פחות יעילים אך חופשיים לשימוש. לעיתים עולה הצורך באימות ללא סודיות של חלק מהמידע. לדוגמה קובץ כותר המכיל הוראות והגדרות כמו כתובות שאמור להיות גלוי לעיני השרת המקבל, לכן התפתחה קטגוריה של מצבי הפעלה שנקראת AEAD שמנסה לענות על צורך זה.

סימנים מוסכמים
--------------

תרשים לדוגמה של הצפנה מאומתת בשיטת EAX
בבסיס האלגוריתם קיים צופן בלוקים שההנחה היא שהוא תמורה פסאודו-אקראית (PRP), למשל ההנחה היא ש-AES מתאים להגדרה זו. סימונו הכללי הוא {\displaystyle E:K\times \{0,1\}^{n}\rightarrow \{0,1\}^{n}} כאשר n הוא גודל הבלוק בסיביות. בסימון מקוצר {\displaystyle C=E\_{K}(M)} - פירושו C הוא התוצאה של הפעלת האלגוריתם E עם המפתח K על המסר M. הביטוי {\displaystyle 0^{n}} פירושו הסיבית אפס כשהיא משוכפלת n פעמים (לדוגמה {\displaystyle 0^{5}=00000}). הביטוי {\displaystyle L\ll 1} פירושו הזזה לשמאל של כל סיביות האופרנד L פוזיציה אחת, כאשר הסיבית הפחות משמעותית תהיה אפס והסיבית המשמעותית ביותר נפלטת. הסימון {\displaystyle |M|} פירושו אורכה של המחרוזת M בסיביות. האופרטור XOR מסומן בקיצור \oplus והסימון "{\displaystyle {\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 הרגיל שבו מחרוזת הקלט משורשרת עם מחרוזת נוספת המייצגת את וקטור האתחול ואז מחשבים את תג האימות על המחרוזת החדשה.

הכוונה בביטוי {\displaystyle 2L} באלגוריתם OMAC להלן היא שמתייחסים למחרוזת הסיביות L כאל פולינום מעל השדה {\displaystyle GF(2^{n})} תוך שימוש בפולינום 'קנוני' המייצג את השדה. זהו פולינום פרימיטיבי אי-פריק בעל משקל בינארי נמוך, למשל במקרה של בלוקים בגודל 128 סיביות ההמלצה היא {\displaystyle x^{128}+x^{7}+x^{2}+x+1}. אפשר לראות באלמנטים של שדה בינארי מורחב {\displaystyle GF(2^{n})} כפולינומים עם מקדמים בינאריים ממעלה הנמוכה מ-n ואז פעולת החיבור בשדה היא חיבור המקדמים מודולו 2 שמקבילה בעצם לאופרטור XOR וכפל ב-2 הוא בעצם הזזה (Shift) של כל המקדמים (סיביות) של הפולינום שמאלה פוזיציה אחת. במקרה של כפל ב-2 אם הסיבית המשמעותית היא 1 התוצאה תהיה פולינום ממעלה הגבוהה או שווה ל-128 תוצאה שחורגת מהשדה לכן יש צורך לצמצם את המספר, כלומר לחלק אותו בפולינום האי-פריק ולקחת את השארית (ראו חשבון מודולרי). כל מה שנדרש הוא פעולת חיסור אחת שבשדה זה זהה לחיבור כי XOR הופכי של עצמו לכן הפעולה מסתכמת ב-{\displaystyle 2L=(L\ll 1)\oplus 0^{120}10000111} במקרה שהסיבית המשמעותית היא 1, או פשוט {\displaystyle L\ll 1} במקרה שהסיבית המשמעותית היא אפס. בדרך זו, אפשר לחשב את {\displaystyle 4L=2(2L)}. כדי למנוע התקפת תזמון צריך לשים לב שפעולת הכפל תתבצע בזמן קבוע (בין אם הסיבית המשמעותית היא 1 או 0).

להלן פירוט האלגוריתמים הבסיסיים ש-EAX משתמש בהם:

{\displaystyle {\textbf {CBC}}\_{\textit {\textbf {K}}}({\textit {\textbf {M}}})}

{\displaystyle M=M\_{1},M\_{2},...M\_{m},{\text{ where }}|M\_{i}|=n}
{\displaystyle C=0^{n}}
{\displaystyle {\text{For }}i=1{\text{ to }}m{\text{ do: }}C=E\_{K}(M\_{i}\oplus C)}
{\displaystyle {\text{Return }}C}

{\displaystyle {\textbf {CTR}}\_{{\textit {\textbf {K}}},{\textit {\textbf {N}}}}({\textit {\textbf {M}}})}

{\displaystyle m=\left\lceil |M|/n\right\rceil }
{\displaystyle S=E\_{K}(N)\ \|\ E\_{K}(N+1)\ \|\ \cdots \ \|\ E\_{K}(N+m-1)}
{\displaystyle {\text{Return }}M\oplus S[{\text{first }}|M|{\text{ bits}}]}

{\displaystyle {\textbf {pad}}({\textit {\textbf {M}}},{\textit {\textbf {B}}},{\textit {\textbf {P}}})}

{\displaystyle {\text{If }}|M|\in \{n,2n,3n,...\}{\text{ then return }}M\ {\stackrel {}{\oplus }}{\rightarrow }\ B}
{\displaystyle {\text{else return }}\left(M\ \|\ 10^{n-1-(|M|{\text{ mod }}n)}\right)\ {\stackrel {}{\oplus }}{\rightarrow }\ P}

הסבר: אם אורך המסר מתחלק ללא שארית בגודל הבלוק, אזי מבצעים XOR עם הפרמטר B כשהוא מיושר לסוף M ומחזירים את התוצאה. אחרת מרפדים את הבלוק האחרון בסיבית '1' ובאפסים כמידת הצורך כדי להשלימו לגודל בלוק שלם ומחזירים את התוצאה לאחר XOR עם הפרמטר P כשהוא מיושר לסוף M.

{\displaystyle {\textbf {OMAC}}\_{\textit {\textbf {K}}}^{t}({\textit {\textbf {M}}})}

{\displaystyle L=E\_{K}(0^{n})}
{\displaystyle {\text{Return }}{\text{CBC}}\_{K}({\text{pad}}([t]\_{n}\ \|\ M,2L,4L))}

הסבר: תחילה משרשרים את n הסיביות הראשונות של t למסר M, מחשבים את שני הפרמטרים {\displaystyle (P,B)} לצורך הריפוד ומחזירים את תג האימות שהוא תוצאה של CBC של המסר לאחר הריפוד.

תיאור האלגוריתם
---------------

#### אלגוריתם הצפנה עם אימות

**קלט:** אורך התג הרצוי \tau, מפתח K, מסר M, כותר H, וקטור אתחול N. 

**פלט:** טקסט מוצפן C ותג אימות T.

{\displaystyle {\textbf {EAX-ENCRYPT}}\_{{\textit {\textbf {K}}},{\textit {\textbf {N}}},{\textit {\textbf {H}}}}({\textit {\textbf {M}}},\tau )}

{\displaystyle {\mathcal {N}}={\text{OMAC}}\_{K}^{0}(N)}
{\displaystyle {\mathcal {H}}={\text{OMAC}}\_{K}^{1}(H)}
{\displaystyle C={\text{CTR}}\_{K,N}(M)}
{\displaystyle {\mathcal {C}}={\text{OMAC}}\_{K}^{2}(C)}
{\displaystyle {\text{Tag}}={\mathcal {N}}\oplus {\mathcal {C}}\oplus {\mathcal {H}}}
{\displaystyle T={\text{Tag}}[{\text{first }}\tau {\text{ bits}}]}
{\displaystyle {\text{Return }}C\ \|\ T}

הסבר: תחילה מייצרים תג אימות עבור קובץ הכותר H וכן עבור וקטור האתחול N באמצעות OMAC. לאחר מכן מצפינים את המסר במצב מונה ומייצרים תג אימות מהטקסט המוצפן C. מחברים ב-XOR את שלושת התגים שנוצרו ולוקחים חלק מהתוצאה האחרונה כתג אימות T שנשלח יחד עם C.

#### אלגוריתם פענוח עם אימות

**קלט:** אורך התג הרצוי \tau, מפתח K, טקסט מוצפן C, כותר H, וקטור אתחול N, תג אימות T. 

**פלט:** מסר מקורי M או סמל מיוחד **INVALID** שפירושו שהאלגוריתם נכשל בפענוח, עקב שינוי באחד הערכים.

{\displaystyle {\textbf {EAX-DECRYPT}}\_{{\textit {\textbf {K}}},{\textit {\textbf {N}}},{\textit {\textbf {H}}}}({\textit {\textbf {C}}}\ \|\ {\textit {\textbf {T}}},\tau )}

{\displaystyle {\text{If }}|(C\ \|\ T)|<\tau {\text{ then return INVALID}}}
{\displaystyle {\mathcal {N}}={\text{OMAC}}\_{K}^{0}(N)}
{\displaystyle {\mathcal {H}}={\text{OMAC}}\_{K}^{1}(H)}
{\displaystyle {\mathcal {C}}={\text{OMAC}}\_{K}^{2}(C)}
{\displaystyle {\text{Tag}}'={\mathcal {N}}\oplus {\mathcal {C}}\oplus {\mathcal {H}}}
{\displaystyle {\text{If }}T\neq {\text{Tag}}'[{\text{first }}\tau {\text{ bits}}]{\text{ then return INVALID}}}
{\displaystyle M={\text{CTR}}\_{K,N}(C)}
{\displaystyle {\text{Return }}M}

תכונות
------

EAX הוא סכמת הצפנה מאומתת בשתי ריצות, בתור שכזה יעילותו נמוכה מאלגוריתמים הפועלים בריצה אחת. ל-EAX מספר יתרונות:

* ביטחון מוכח, בהנחה שצופן הבלוקים שבבסיסו בטוח. למשל ההנחה היא ש-AES הוא PRP בטוח. כמו כן ביטחונו נשען על OMAC שגם לגביו קיימת הוכחה שהוא PRP בטוח.
* התנפחות הצופן מינימלית, כגודל תג האימות.
* שימוש במצב מונה מאפשר מקביליות וכן חישובים מוקדמים.
* האלגוריתם הוא "און ליין" ומתאים למשל להזרמת מדיה.
* כאשר המידע הנלווה קבוע, כמו כותר קבוע למספר גדול של הודעות, ניתן לחשבו רק פעם אחת ולחסוך בזמן.

ראו גם
------

* CCM
* CWC

הערות שוליים
------------

1. ↑  A Conventional Authenticated-Encryption Mode
2. ↑  The EAX Mode of Operation (A Two-Pass Authenticated-Encryption Scheme Optimized for Simplicity and Efficiency)

  

  


| * צ
* ש
* ע
קריפטוגרפיה |
| --- |
| 

| מושגי יסוד |
| --- |
| 
* פנקס חד-פעמי
* צופן בלוקים
* צופן בלוקים בר התאמה
* צופן זרם
* סודיות מושלמת
* ביטחון סמנטי
* הצפנה סימטרית
* הצפנה אסימטרית
* חתימה דיגיטלית
* הצפנה הומומורפית
* הצפנה מרובה
* הצפנה מאומתת
* הצפנה הסתברותית
* סכמת ריפוד אסימטרית אופטימלית
* אריזת מפתח הצפנה
* סודיות מושלמת קדימה

 |

 |
| 

| הצפנה קלאסית |
| --- |
| 
* מכונת הצפנה
* צופן החלפה
* צופן אתב"ש
* צופן קיסר
* צופן ויז'נר
* צופן ורנם
* צופן פלייפייר
* צופן היל
* אולטרה
* אניגמה
* ציקלומטר
* קולוסוס
* PURPLE
* ג'ייד
* מג'יק
* צופן שחלוף

 |

 |
| 

| צופן בלוקים |
| --- |
| 
* לוציפר
* AES
* 3DES
* DES
* Threefish
* Twofish
* Blowfish
* FEAL
* SEED
* CAST
* IDEA
* RC2
* RC6
* MARS
* RC5
* GOST
* Serpent
* MISTY
* KASUMI
* קמליה
* ARIA
* SAFER
* TEA
* LEA
* CLEFIA
* SEA
* Hummingbird
* PRESENT
* KATAN
* KeeLoq
* Simon & Speck
* אנוביס

 |

 |
| 

| אופני הפעלה |
| --- |
| 
* אופן הפעלה של צופן בלוקים
* EAX
* OCB
* IAPM
* CWC mode
* GCM
* CCM

 |

 |
| 

| צופן זרם |
| --- |
| 
* RC4
* Salsa20
* SOSEMANUK
* Grain
* E0
* A5/1
* A5/2
* A5/3
* A5/4
* MICKEY
* HC-128
* SNOW
* Trivium
* Rabbit
* ZUC
* ChaCha

 |

 |
| 

| הצפנה אסימטרית |
| --- |
| 
* פרוטוקול דיפי-הלמן
* חידות מרקל
* חתימת למפורט
* הצפנת תרמיל
* RSA
* הצפנת רבין
* חתימה דיגיטלית רבין
* צופן אל-גמאל
* חתימה דיגיטלית אל-גמאל
* DSA
* הצפנת בלום-גולדווסר
* ECC
* הצפנת קריימר-שופ
* הצפנת פאיי
* הצפנת מקאליס
* GGH
* NTRU
* עקום 25519
* חתימה דיגיטלית של שנור
* הצפנת אוקמוטו-אושיאמה

 |

 |
| 

| פרוטוקולים |
| --- |
| 
* עץ מרקל
* פרוטוקול אתגר-מענה
* פרוטוקול נידהאם-שרודר
* פרוטוקול קרברוס
* הוכחה באפס ידע
* פרוטוקול פייגה-פיאט-שמיר
* העברה עלומה
* חלוקת סוד
* TLS (SSL)
* Secure Shell
* MQV
* X.509
* פרוטוקול שיתוף מפתח
* מיסור שלא לפרסום
* פרוטוקול סיגנל

 |

 |
| 

| פרימיטיבים תאורטיים |
| --- |
| 
* מחולל פסבדו-אקראי קריפטוגרפי
* פונקציה חד-כיוונית
* תמורה חד-כיוונית
* סיבית קשה
* פונקציה פסבדו-אקראית קריפטוגרפית
* תמורה פסאודו-אקראית
* פונקציית גיבוב קריפטוגרפית
* וקטור אתחול
* פונקציית ספוג
* הצפנה מבוססת סריג

 |

 |
| 

| קריפטואנליזה |
| --- |
| 
* ניתוח תדירויות
* כוח גס
* התקפת איזון זמן/זיכרון
* תקיפת היפגשות באמצע
* קריפטואנליזה ליניארית
* קריפטואנליזה דיפרנציאלית
* התקפת גלוי-ידוע
* התקפת גלוי-נבחר
* התקפת מוצפן-נבחר
* פירוק לגורמים של מספר שלם
* התקפת ערוץ צדדי
* התקפת קורלציה
* התקפת שיבוש
* מודל אורקל אקראי
* התקפת התנגשויות

 |

 |
| 

| בעיות מתמטיות ואלגוריתמים |
| --- |
| 
* בעיית לוגריתם דיסקרטי
* תחשיב אינדקסים
* נפה ריבועית
* אלגוריתם rho של פולרד
* נפת שדה מספרים
* אלגוריתם רו של פולרד ללוגריתמים
* אלגוריתם פוליג-הלמן

 |

 |
| 

| פונקציות גיבוב קריפטוגרפיות |
| --- |
| 
* SHA
* MD5
* MD4
* SHA-1
* SHA-2
* SHA-3
* RIPEMD
* Skein
* BLAKE
* Grøstl
* SipHash

 |

 |
| 

| אימות וזיהוי |
| --- |
| 
* אימות זהות
* סיסמה
* קוד אימות מסרים
* Poly1305
* סיסמה חד-פעמית

 |

 |
| 

| נושאים נלווים |
| --- |
| 
* מספר אקראי
* מספר ראשוני
* יתירות
* מפתח שיחה
* סטגנוגרפיה
* הצפנה קוונטית
* הצפנה פוסט-קוונטית
* עקרון קרקהופס
* אבטחת מידע
* קריפטוגרפיה ויזואלית
* אליס ובוב
* מסיבת חתימה על מפתחות ציבוריים
* שידור מוצפן
* הצפנת דיסקים
* הצפנת סף
* חתימה דיגיטלית מבוססת פונקציית גיבוב
* פונקציה זניחה
* רשת פייסטל
* רשת החלפה-תמורה
* הלבנה
* אימות מסרים
* חתימה עיוורת
* חישוב רב משתתפים בטוח

 |

 |