**Integrity-Aware Parallelizable Mode** הוא מצב הפעלה של צופן בלוקים סימטרי, שפותח ב-2001 על ידי Charanjit Jutla מ-IBM, המספק הצפנה מאומתת מוכחת ויעילה עם תמיכה במקביליות. האלגוריתם משתמש בצופן בלוקים כמו AES כבסיס, איתו הוא גם מצפין וגם מאמת כל מסר באורך שרירותי בריצה אחת, תוך שימוש בשני מפתחות הצפנה ווקטור אתחול. IAPM הוא האלגוריתם הראשון שהומצא המספק הצפנה מאומתת בריצה אחת והוא יעיל מאוד בהשוואה למצבי הפעלה אחרים. בשיפורים אחדים מגיע למהירות כמעט כמו של הצפנה לא מאומתת. מסיבה זו כונה "הצפנה עם אימות כמעט בחינם". האלגוריתם הוצע ל-IPSec והוא פטנט רשום של IBM וייתכן אף של אחרים, מסיבה זו השימוש בו בעייתי.

IAPM מצב הפעלה מקבילי עם אימות בריצה אחת. שימו לב שבהינתן ההיסטים {\displaystyle S\_{0},S\_{1},...} כל בלוק מוצפן בנפרד ולכן אפשר להצפין מספר בלוקים במקביל. כמו כן אפשר להתחיל פענוח בצד השני בטרם התקבלו כל הבלוקים, אך לצורך האימות יש צורך להמתין לקבלת כולם.
Charanjit Jutla המציא למעשה שני אלגוריתמים דומים, על שניהם רשום פטנט והוכח שהם בטוחים תחת ההגדרות הסטנדרטיות, בהנחה שצופן הבלוקים בטוח. והם: Integrity-Aware CBC (בקיצור IACBC) שהוא למעשה CBC משופר, שבו נוספה טכניקה הקרויה 'הלבנה' (whitening) שהיא פעולת XOR לפני ואחרי הצפנת כל בלוק עם גרעין אקראי מסוים שנגזר מווקטור האתחול. חסרונו כמו כל מצב המבוסס על CBC שאינו תומך במקביליות, כי כל בלוק תלוי בקודמו. השני IAPM דומה יותר למצב ECB משופר, מיישם טכניקת הלבנה דומה, אך יתרונו בכך שהוא מאפשר הצפנה מקבילית ולכן עיקר ההתעניינות בו כיוון שהוא יעיל יותר. אלגוריתם OCB הוא וריאציה משופרת של IAPM.

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

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

הצפנה מאומתת נולדה עקב צורך מעשי להבטיח לא רק את סודיות המידע העובר ברשת אלא גם את שלמותו. כך שתוקף זדוני לא יוכל להתערב, לשנות, למחוק או להוסיף בלוקים של טקסט מוצפן מבלי שהמשתתפים יבחינו בכך. בתחילה הצפנה מאומתת לא הייתה מוגדרת היטב מבחינה תאורטית ואנשים נטו לפתח שיטות אד הוק, כיום קיימות הגדרות קונקרטיות להצפנה מאומתת בטוחה. השיטה הישירה נקראת 'בנייה גנרית' והיא שילוב של שני פרימיטיבים קריפטוגרפיים נפרדים כמו: מצב הפעלה CBC עם MAC באופן שכל אחד מהם פועל עצמאית. ישנן כמה דרכים לעשות זאת, מהן די מהירות למשל HMAC. מצב ההפעלה המועדף מהיבט של יעילות הוא CTR בגלל תמיכה מובנית במקביליות. הדרכים הישנות פועלות בשתי ריצות ואינן יעילות, מסיבה זו נעשים מאמצים למצוא דרכים חלופיות יותר יעילות. ישנן כמה סיבות מדוע הצפנה מאומתת מועדת לשגיאות. טעות נפוצה אחת היא להשתמש במפתח הצפנה משותף גם לאימות. טעות אחרת היא לנסות להבטיח שלמות על ידי פונקציית גיבוב לא קריפטוגרפית ללא מפתח הצפנה. הוכח שגישות מסוג זה כמעט כולן ניתנות לפריצה בקלות ולמרות זאת הן קיימות. גרסת WEP המקורית למשל כללה אלגוריתם אימות לא בטוח כלל שפעל עם קוד תיקון שגיאות CRC.

הלבנה
-----

 ערך מורחב – **הלבנה (קריפטוגרפיה)**  

טכניקת ההלבנה עושה שימוש בסדרה של ערכים *בלתי תלויים הדדית* (pairwise independent sequence) אותם מפיקים מווקטור האתחול r באורך n סיביות כאשר n מתייחס לאורך בלוק הצופן בסיביות (128 במקרה של AES). המפתח לצורך ההלבנה הוא K\_1. Jutla הציע שתי דרכים להפקת הערכים לצורך ההלבנה.

האחת היא באמצעות הצפנה. תחילה 'מותחים' את וקטור האתחול לווקטור פסאודו-אקראי חדש בגודל {\displaystyle t=\left\lceil {\text{lg}}(m+2)\right\rceil } שנקרא 'גרעין', על ידי הצפנה רקורסיבית עם מפתח ההצפנה K\_1 לפי הנוסחה {\displaystyle W\_{i}=F\_{K1}(r+i)} כאשר {\displaystyle 1\leq i\leq t}. הערך m מייצג את מספר הבלוקים של המסר P לאחר שחולק לבלוקים בגודל n סיביות והפונקציה {\displaystyle {\text{lg}}} היא לוגריתם בבסיס 2. הפונקציה F היא צופן הבלוקים עם המפתח K\_1. לדוגמה אם {\displaystyle m=256} בלוקים אז {\displaystyle t=9}, דהיינו נדרשים 9 קריאות לצופן הבלוקים להכנת הגרעין האקראי (הווקטורים W\_{i} בגודל 128 סיביות כל אחד). עם הגרעין האקראי מכינים 'מסכת הלבנה' (whitening mask) שהיא סדרה של {\displaystyle m+1} ערכים {\displaystyle S\_{0},S\_{1},...S\_{m}} בגודל 128 סיביות כל אחד. לצורך כך משתמשים ברעיון של קוד גריי בשיטה שנקראת סכום-xor. לסיכום האלגוריתם:

{\displaystyle {\text{For }}i=1{\text{ to }}t{\text{ do }}}
{\displaystyle W\_{i}=F\_{K1}(r+i)}
{\displaystyle {\text{For }}i=1{\text{ to }}m+1{\text{ do }}}
{\displaystyle S\_{i-1}=\bigoplus \_{j=1}^{t}(i\_{j}\cdot W\_{j})}

הסימן {\displaystyle \bigoplus } מייצג סכום-xor דהיינו הסכום {\displaystyle (i\_{1}\cdot W\_{1})\oplus (i\_{2}\cdot W\_{2})\oplus \cdots \oplus (i\_{t}\cdot W\_{t})}. הערך i\_j מייצג את הסיבית j של האינדקס i.

### שיטה אלגברית

הדרך השנייה היא בשיטה אלגברית. תחילה בוחרים מספר ראשוני שיהיה קרוב לגודל הבלוק. במקרה של צופן 128 סיביות יהי {\displaystyle p=2^{128}-159}. לאחר מכן מייצרים שני ערכים אקראיים על ידי הצפנה:

{\displaystyle a=F\_{K1}(r+1)},
{\displaystyle b=F\_{K2}(r+2)}
אם {\displaystyle b>p} מצמצמים {\displaystyle b=(b+159){\text{ mod }}2^{128}}. ואז הסדרה לצורך ההלבנה מתקבלת על ידי:

{\displaystyle S\_{0}=a}
{\displaystyle {\text{For }}i=1{\text{ to }}m-1{\text{ do }}}
{\displaystyle S\_{i}=(S\_{i-1}+b){\text{ mod }}2^{128}}
{\displaystyle {\text{If }}b>S\_{i}{\text{ then }}S\_{i}=(S\_{i}+159){\text{ mod }}2^{128}}

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

### הצפנה

המסר P מחולק ל-{\displaystyle m-1} בלוקים בגודל n סיביות (לדוגמה במקרה של AES {\displaystyle n=128} סיביות, אם P מכיל 1,000 סיביות, {\displaystyle m=9} ו-P מחולק ל-8 בלוקים {\displaystyle P\_{1},P\_{2},...P\_{8}} כאשר הבלוק האחרון מרופד ב-24 אפסים). לצורך ההצפנה המאומתת נדרשים שני מפתחות שונים K\_1,K\_2 כל אחד בגודל k סיביות, כאשר k נקבע לפי צופן הבלוקים שנבחר וכן וקטור אתחול חד פעמי r גם הוא בגודל n סיביות שבו משתמשים רק פעם אחת עבור מפתח נתון. להכנה תחילה מפעילים את אלגוריתם הכנה לעיל כדי לקבל את הסדרה S. הטקסט המוצפן {\displaystyle C\_{0},C\_{1},...C\_{m}} מתקבל על ידי:

{\displaystyle C\_{0}=F\_{K2}(r)}
{\displaystyle {\text{For }}i=1{\text{ to }}m-1{\text{ do }}}
{\displaystyle C\_{i}=F\_{K2}(P\_{i}\oplus S\_{i})\oplus S\_{i}}
{\displaystyle {\text{checksum}}=\bigoplus \_{i=1}^{m-1}P\_{i}}
{\displaystyle C\_{m}=F\_{K2}({\text{checksum}}\oplus S\_{m})\oplus S\_{0}}

הסימן {\displaystyle \bigoplus } מייצג סכום-xor דהיינו הסכום {\displaystyle {\text{checksum}}=P\_{1}\oplus P\_{2}\oplus \cdots \oplus P\_{m-1}}. וכן {\displaystyle C\_{0}} הוא וקטור האתחול ו-{\displaystyle C\_{m}} הוא תג האימות. שימו לב שכעת הטקסט המוצפן התרחב בשני בלוקים נוספים, הראשון הוא בלוק וקטור האתחול והאחרון הוא בלוק האימות כשבאמצע הטקסט המוצפן.

### פענוח

כאמור מפתחות ההצפנה משותפים לשולח והמקבל. לפענוח הטקסט המוצפן {\displaystyle C\_{0},C\_{1},...C\_{m}}. תחילה מחלצים את וקטור האתחול עם המפתח השני {\displaystyle r=F\_{K2}^{-1}(C\_{0})}. הפונקציה F^{-1} היא פונקציית הפענוח של צופן הבלוקים. מפעילים את הפונקציה להכנת סדרת ההיסטים לצורך ההלבנה (באחת משתי השיטות לעיל) עם הפרמטרים {\displaystyle (r,m,K\_{1})} כדי לחשב את הסדרה {\displaystyle S\_{0},S\_{1},...S\_{m}} ואז:

{\displaystyle {\text{For }}i=1{\text{ to }}m-1{\text{ do }}}
{\displaystyle P\_{i}=F\_{K2}^{-1}(C\_{i}\oplus S\_{i})\oplus S\_{i}}
{\displaystyle {\text{checksum}}=\bigoplus \_{i=1}^{m-1}P\_{i}}
{\displaystyle P\_{m}=F\_{K2}^{-1}(C\_{m}\oplus S\_{0})\oplus S\_{m}}

הטקסט הקריא הוא {\displaystyle P\_{1},...P\_{m-1}}. לבדיקת האימות מוודים ש-{\displaystyle P\_{m}={\text{checksum}}}. אם לא, הטקסט המוצפן נדחה בגלל שינוי ייתכן זדוני, במהלך ההעברה.

ביטחון
------

ביטחון IAPM מתואר כצירוף של שני מאפיינים: indistingushability כנגד התקפת מוצפן-נבחר ושלמות. בכללות הכוונה שהאלגוריתם מבטיח שהטקסט המוצפן לא יהיה ניתן להבחנה מערך אקראי אמיתי וכן שלא ניתן יהיה לחשב תג אימות מתאים לטקסט מוצפן כלשהו ללא ידיעת מפתח ההצפנה המשותף לשולח והמקבל. אילו הנחות סטנדרטיות שמצפים מצופן בלוקים ו-MAC בהתאמה. ההוכחה של Jutla מראה שאלגוריתם IAPM בטוח אם צופן הבלוקים בטוח. וכן פונקציית ההלבנה היא בעצם פונקציית גיבוב אוניברסלית {\displaystyle \epsilon {\textit {-xor-universal}}}. הוכח שאין צורך בהגדרה מחמירה של פונקציה אקראית אוניברסלית אלא מספיק שהערכים לצורך ההלבנה יהיו 'בלתי תלויים הדדית'. ההתפלגות של פונקציות בלתי תלויות {\displaystyle G:{\mathcal {N}}\times \{0,1\}^{n}\rightarrow (\{0,1\})^{\*}}, נקראת {\displaystyle \epsilon {\textit {-xor-universal}}}, אם עבור כל קבוע {\displaystyle \Delta \in \{0,1\}^{n}} ועבור זוגות ערכים שונים {\displaystyle (j,m,IV),(j',m',IV')} מתקיים 

{\displaystyle \Pr[G\_{j'}(m',IV')\oplus G\_{j}(m,IV)=\Delta ]\leq \epsilon }
אזי הפונקציה G נקראת {\displaystyle \epsilon {\textit {-xor}}} אוניברסלית. m הוא מספר הבלוקים ו-\epsilon  ערך בטווח [0,1].

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

1. ↑  Encryption Modes with Almost Free Message Integrity
2. ↑  A Parallelizable Authenticated Encryption Algorithm

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

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

 |

 |
| 

| הצפנה קלאסית |
| --- |
| 
* מכונת הצפנה
* צופן החלפה
* צופן אתב"ש
* צופן קיסר
* צופן ויז'נר
* צופן ורנם
* צופן פלייפייר
* צופן היל
* אולטרה
* אניגמה
* ציקלומטר
* קולוסוס
* 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
* סיסמה חד-פעמית

 |

 |
| 

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

 |

 |