צופן בלוקים בר-התאמה

**צופן בלוקים בר-התאמה** (Tweakable Block Cipher) הוא צופן בלוקים עם פרמטר נוסף שנקרא Tweak (התאמה) שמתפקד כמו וקטור אתחול. הרעיון הוצע לראשונה ב-2002 על ידי מוזס ליסקוב, רונלד ריבסט ודויד וגנר כחלופה אלגנטית למצב הפעלה של צופן בלוקים. הרעיון הוא שבמחיר מועט אפשר לפתח 'פרימיטיב קריפטוגרפי' חדש עם תכונת התאמה שניתן להוכיח שהוא בטוח נגד התקפת מוצפן-נבחר, כך שתוצאות הצפנת שני בלוקים זהים יהיו שונות תמיד גם אם המפתח זהה. 

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

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

הגדרה כללית של צופן בלוקים בר-התאמה נראית כך:
::::\boldsymbol{\tilde E:\{0,1\}^k\times\{0,1\}^t\times\{0,1\}^n\longrightarrow\{0,1\}^n}
הפונקציה מקבלת מחרוזת M\in\{0,1\}^n באורך n סיביות, מחרוזת K\in\{0,1\}^k באורך k סיביות ומחרוזת T\in\{0,1\}^t באורך t סיביות ומחזירה מחרוזת C\in\{0,1\}^n שהיא פונקציה של המסר, המפתח וה-tweak.

בניית צופן בר-התאמה שהוא גם יעיל אינה מלאכה פשוטה. אפשר לבנות צופן בלוקים בר-התאמה מהתחלה או שאפשר להפוך כל צופן בלוקים רגיל לצופן בלוקים בר-התאמה, אך יש להזהר לגבי ביטחונו. לדוגמה מבנה הדומה ל-DESX של ריבסט שהוצע בעבר לחיזוק DES, מחבר תחילה את המסר עם וקטור האתחול T_1 ואת תוצאת ההצפנה מחבר עם T_2 כך: 
::\tilde{E}_K((T_1,T_2),M)=E_K(M\oplus T_1)\oplus T_2. 
מבנה זה התגלה כלא בטוח כיוון שלהפיכת סיביות במיקומים זהים ב-M וב-T_1 אין השפעה על התוצאה הסופית, מה שמאפשר התקפה כנגד הצופן. 
כמו כן ניסיון לחבר את מפתח ההצפנה עם ה-tweak באופן הבא:
:\tilde E_K(T,M)=E_{K \ \| \ T}(M) או \tilde E_K(T,M)=E_{K \oplus T}(M)
לא מציע צופן בלוקים בר-התאמה בטוח כמצופה, התקפת related-key יכולה להיות ישימה כנגד מבנה כזה.

לעומת זאת המבנה של וגנר, ליסקוב וריבסט הוכח כבטוח, כדלהלן:
:\tilde{E}_K(T,M)=E_K(T\oplus E_K(M)))
T וקטור האתחול, K המפתח ו-M הוא המסר. מצד שני מבנה זה פחות יעיל כי נדרשים להפעיל את צופן הבלוקים פעמיים עבור כל בלוק. אם מחליפים קריאה אחת לצופן הבלוקים בפונקציית גיבוב אוניברסלית פשוטה ומהירה אפשר להגיע לביצועים טובים עם מבנה כמו זה:

:\tilde{E}_{K,h}(T,M)=E_K(M\oplus h(T))\oplus h(T)

כאשר h היא פונקציית גיבוב כלשהי כמו UHASH. דוגמה טובה לצפן בלוקים בר-התאמה היא Threefish.

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

## XEX

## ראו גם
* צופן בלוקים
* XTS
* Threefish
## הערות שוליים

קטגוריה:קריפטוגרפיה