וקטור אתחול

בהצפנה וקטור אתחול (Initialization vector - IV) הוא מחרוזת סיביות ייחודית כלשהי, באורך מוגדר המשמשת להתחלת תהליך ההצפנה בצופן זרם או בצופן בלוקים כאשר עושים שימוש במצב הצפנה מסוג שרשור (Chaining).

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

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

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

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

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

שמות נוספים לווקטור האתחול הם: "Nonce" שנגזר מהביטוי Nonce word כלומר דבר חד-פעמי שנוצר לצורך אירוע זמני, ביטוי נפוץ בפרוטוקולי תקשורת קריפטוגרפיים, וכן "tweak". האחרון הוא קונספט חדש של צופן בלוקים שניתן להתאמה (tweakable block cipher) ולמעשה משלב באופן יעיל מצב הפעלה בטוח לצורך הצפנת בלוקים מרובים בעיקר באמצעי אחסון, ועושה שימוש בערך ראשוני שנקרא בקצרה tweak המתפקד כווקטור אתחול לכל דבר.

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

הצפנה