מצב הפעלה של צופן בלוקים

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש

בקריפטוגרפיה מצב הפעלהאנגלית: Mode of operation) מתייחס לאלגוריתם שמגדיר כיצד להפעיל צופן בלוקים סימטרי דטרמיניסטי להצפנת טקסט-גלוי באורך שעולה על אורך הבלוק שהצופן מסוגל להצפין בבת אחת. צופן בלוקים כשלעצמו מסוגל רק להבטיח סודיות של 'בלוק' טקסט גלוי, שהוא מחרוזת סיביות באורך קבוע מוגדר מראש. מעצם ההגדרה, בהינתן צופן בלוקים דטרמיניסטי כמו AES ומפתח הצפנה זהה, הצופן ימיר תמיד בלוק קלט זהה לבלוק טקסט-מוצפן זהה. לכן ניתן לזהות הצפנה חוזרת של בלוקים זהים עם אותו מפתח. זהו מאפיין שעלול להוות חיסרון כי בהצפנה ישירה דולף בדרך אגב מידע ליריב פוטנציאלי שעלול להיות מנוצל להתקפה כנגד המערכת.

ריפוד[עריכת קוד מקור | עריכה]

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

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

וקטור אתחול[עריכת קוד מקור | עריכה]

Postscript-viewer-shaded.png ערך מורחב – וקטור אתחול

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

מצבי הפעלה בסיסיים[עריכת קוד מקור | עריכה]

להלן תיאור חמשת מצבי ההפעלה הבסיסיים ביותר: ECB,‏ CBC,‏ CFB,‏ OFB ו-CTR.

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

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

מצב ECB[עריכת קוד מקור | עריכה]

ECB Mode.png

במצב הפעלה Electronic CodeBook (ספר-קוד) מחלקים את המסר לבלוקים בגודל סיביות, מרפדים את הבלוק האחרון בשיטת ריפוד מוסכמת אם אורך המסר אינו מתחלק בדיוק ב- ופשוט מצפינים כל בלוק בנפרד כדלהלן:

הצפנה
עבור כל בלוק במסר , בצע:
.
פענוח
אופן הפענוח זהה לחלוטין כאשר פונקציית הפענוח היא , עבור כל בלוק כאשר בצע:
.

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

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

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

תכונות ECB:

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

מצב CBC[עריכת קוד מקור | עריכה]

CBC Mode.png

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

הצפנה
, עבור כל בלוק במסר כאשר בצע:
.
פענוח
עבור כל בלוק כאשר בצע:
. הפונקציה היא פונקציית הפענוח.

תכונות CBC:

  • ביטחון; תהליך זה הסתברותי, כי תוצאת הצפנת כל בלוק גלוי תלויה גם בטקסט המוצפן מהבלוק קודם. לכן במצב ששני בלוקים זהים הוצפנו עם אותו מפתח יתקבלו בלוקים מוצפנים שונים (הבלוק הראשון תלוי בוקטור האתחול שנבחר באקראי). הוכח שאם פונקציית ההצפנה היא תמורה פסאודו-אקראית אז CBC יהיה בטוח לפי מודל התקפת גלוי-נבחר בתנאי שוקטור האתחול הוא ערך חד-פעמי שנבחר באקראי בהתפלגות אחידה.
  • התנפחות; הטקסט המוצפן מתרחב בבלוק נוסף שהוא וקטור האתחול שצריך להישלח גם הוא לצד המקבל. הביטחון המוכח האמור בסעיף הקודם נכון רק אם וקטור האתחול נבחר באקראי. וקטור האתחול יכול להיות מספר סידורי. ואז השולח אינו חייב לשלוח את וקטור האתחול כי שני הצדדים יכולים להתחיל מ-1 ולקדם את ערכו אחרי כל הצפנה. אך יש לזכור שבמקרה זה מצב CBC לא יהיה בטוח לפי מודל התקפת גלוי-נבחר.
  • שרשור; בהינתן בלוק טקסט-גלוי, מפתח הצפנה ווקטור אתחול זהים, יופק תמיד בלוק מוצפן זהה. לכן חובה לבחור וקטור האתחול חדש בכל הצפנה.
  • תלות הדדית; מנגנון השרשור של CBC גורם לתלות של כל בלוק צופן בבלוק שלפניו. סידור מחדש של בלוקים עלול להשפיע ישירות על תוצאות הפענוח של אותם בלוקים ועל כן יתגלה.
  • כשל מצטבר. סיבית אחת או יותר שגויים בבלוק כלשהו, עשויים לגרום לתוצאות פענוח שגויות בבלוק הנוכחי ובבלוק הבא אחריו. יתרה מזו פענוח הבלוק הנוכחי יהיה אקראי (50% שגיאה) ובבלוק הבא אחריו תופיע השגיאה בדיוק באותן סיביות בהן ארעה בבלוק הקודם. לכן במחיר של איבוד בלוק אחד (הבלוק הראשון) היריב מסוגל לבצע שינויים זדוניים בסיביות מסוימות של הבלוק הבא אחריו מבלי שיתגלו.
  • התאוששות עצמית; שיטת CBC בעלת סנכרון עצמי, במובן שבמקרה שגיאה אפילו כגון אם בלוק שלם או יותר מתוך הצופן שגויים או נעדרים לגמרי, רק הבלוק הבא לאחריהם לא יפוענח כראוי, כל היתר לא יפגעו. אולם יש לשים לב שבמקרה של כשל בקריאה או חוסר של סיביות במספר שאינו גודל הבלוק עשוי לגרום לפריצת גבולות הבלוק ולכן התאוששות תהיה בלתי אפשרית בבלוקים הבאים.
  • גישה אקראית; מצב ההפעלה CBC אינו מתאים במקרה שדרושה גישה ישירה, כיוון ששגיאה בבלוק אחד בזמן הצפנה תגרור שגיאה בכל הבלוקים הבאים אחריו.
  • מקביליות; היות שכל בלוק תלוי בקודמו CBC אינו מתאים ליישום מקבילי. מאותה סיבה כאשר יש צורך לשנות רק חלק מהבלוקים צריך להצפין מחדש את כולם.

מצב CFB[עריכת קוד מקור | עריכה]

CFB Mode.png

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

הצפנה
תחילה כאשר הנו אוגר זיזה.

עבור כל בלוק במסר בצע:

  1. יהי שווה הסיביות הנמוכות ביותר (הראשונות) של .
  2. (שדר סיביות צופן כבלוק ).
  3. . (הזז את סיביות למעלה צעדים).
פענוח
תהליך הפענוח זהה:
  1. תחילה . לאחר מכן עבור כל בלוק מבצעים:
  2. ,

כאשר מחושבים בדיוק כמו בתהליך ההצפנה. במצב זה לא משתמשים בפונקציית פענוח.

תכונות CFB:

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

מצב OFB[עריכת קוד מקור | עריכה]

OFB Mode.png

מצב ההפעלה Output Feedback (משוב פלט) מדמה צופן זרם והוא שמיש במקרים בהם יש צורך להצפין זרם מידע באורך לא ידוע וכן יש צורך להימנע מכשל מצטבר. מצב זה דומה ל-CFB ומאפשר הצפנת בלוקים בכל גודל רצוי, אולם שונה בכך שפלט פונקציית ההצפנה עצמה משמש להזנה חוזרת, בשונה מהמצב הקודם שבו חלק מהטקסט המוצפן (לאחר XOR) משמש להזנה. תיאור המצב לפי תקן איזו 10116:

הצפנה
תחילה: , ועבור כל בלוק במסר בצע:
  1. . (חשב את המפתח הבא להצפנת הבלוק הבא).
  2. עבור כלשהו, , בצע: שווה הסיביות הראשונות של .
  3. (הצפן ושדר את הסיביות הנוכחיות).
  4. . (עדכן את הבלוק הבא).
פענוח
בדומה להצפנה,
  1. תחילה ועבור כל בלוק בצע:
  2. כאשר , , מחושבים בדיוק כמו בתהליך ההצפנה, ללא שימוש בפונקציית פענוח.

גרסה נוספת של OFB לפי תקן FIPS 81: גרסה זו זהה למצב הפעלה OFB המתואר למעט השורה האחרונה המוחלפת ב:

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

תכונות OFB :

  • כמו ה-CFB מצב זה הסתברותי ומוגדר כבטוח לפי מודל התקפת גלוי-נבחר אם וקטור האתחול אקראי.
  • מצב זה סידרתי באופיו ולכן אינו מתאים ליישום מקבילי, אם כי אפשר להכין את זרם המפתח מראש.
  • שרשור; כמו במצבים הקודמים CBC ו-CFB וקטור האתחול אחראי לכך שבלוקי מסר זהים יוצפנו לבלוקי צופן שונים.
  • תלות הדדית; זרם המפתח עצמאי ואינו תלוי בטקסט הגלוי. משמעות הדבר שווקטור האתחול חייב להיות שונה, אם משתמשים באותו מפתח להצפנת טקסט אחר, אחרת כמו בפנקס חד-פעמי XOR של שני בלוקים מוצפנים עם מפתח זהה למעשה מסיר את המפתח ונשארים רק עם בלוקים של טקסט-גלוי כשהם מעורבב זה בזה.
  • כשל מצטבר; סיבית אחת או יותר שגויים בבלוק צופן נתון, ישפיעו אך ורק על אותם סיביות בבלוק הגלוי המתאים. כאשר סיביות אלו בבלוק המפוענח יהפכו למשלימים של סיביות המקוריות באותם המקומות.
  • התאוששות עצמית; מצב OFB מסוגל להתאושש ממצב של סיביות שגויות אך לא ממצב של חוסר סיביות. בשל כך, כשל בקריאת בלוק צופן אחד או יותר, משבש את התיאום בין הבלוקים לבין זרם המפתח ותוצאת הפענוח מנקודה זו ואילך תהיה שגויה.
  • הספק; אם הספק הפונקציה נמוך, בדיוק כמו ב-CFB. אולם מאחר שזרם המפתח אינו תלוי בבלוקי המסר או הצופן, ניתן לחשבו מראש (בהינתן וקטור אתחול כלשהו ומפתח K), מה שמאפשר ייעול תהליך ההצפנה.
  • אפשר לראות שבמצב OFB כאשר המפתח אקראי כך ש- הוא משתנה אקראי בטווח תמורות האפשריות, המחזוריות הצפויה של סיביות ההזנה לפני שהן חוזרות על עצמן היא . אולם במקרה שמספר סיביות ההזנה נמוך מ- (כמו במקרה של תקן FIPS 81) המחזוריות הצפויה תהיה לכן מומלץ להשתמש במלוא סיביות אוגר ההזזה.

מצב CTR[עריכת קוד מקור | עריכה]

CTR Mode.png

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

עבור כל בלוק של המסר כאשר ו- הוא מונה המכיל ערך התחלתי כלשהו בדרך כלל וקטור אתחול הנקרא Nonce בהקשר זה. עם הפונקציה Increment שאחראית לעדכונו, בצע:

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

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

יתרונות[עריכת קוד מקור | עריכה]

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

החיסרון של מצב המונה המתואר הוא ששינוי סיבית אחת של הצופן משפיע רק על הסיבית המקבילה בטקסט המקור. בתנאים מסוימים הדבר מאפשר התקפת הבחנה שבה התוקף מבצע Bit flipping (הפיכת סיביות) כדי להשיג מידע על הטקסט המוצפן, לכן המתכונת המתוארת אינה מוכחת בטוחה לפי מודל התקפת מוצפן-נבחר המחמיר יותר. אפשר לפתור את הבעיה על ידי הוספת קוד אימות מסרים.

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

מצב TBC[עריכת קוד מקור | עריכה]

אם משתמשים בצופן בלוקים בר התאמה במקום בצופן בלוקים רגיל, אפשר לקבל מצבי הפעלה יעילים ובטוחים יותר מאילו המנויים, זאת משום שווקטור האתחול מובנה בתוך הצופן. הרעיון הוצע לראשונה על ידי מוזס ליסקוב, רונלד ריבסט ודייויד וגנר[1]. הם פיתחו את מצב ההפעלה Tweak Block Chaining המבוסס על CBC ומיישם צופן בלוקים בר התאמה, המקבל מלבד המסר ומפתח ההצפנה ערך נוסף ייחודי וחד פעמי (שאינו סודי) כך שתוצאת ההצפנה תלויה גם בו. ערך זה נקרא בהקשר של צופן בלוקים בר התאמה "tweak" והוא בעצם וקטור אתחול או Nonce.

מצב ההפעלה TBC פועל באופן הבא: ה-tweak הראשוני מתפקד כמו וקטור האתחול . הבלוק הראשון מוצפן עם מפתח ההצפנה הסודי ו-, כל בלוק הבא אחריו מוצפן באמצעות המפתח הסודי ו- כאשר , כלומר ה-tweak לבלוק הנוכחי הוא תוצאת ההצפנה של הבלוק הקודם.

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

מצב CTS[עריכת קוד מקור | עריכה]

מבנה CBC-CS1. שים לב ש- אינו חלק מהטקסט המוצפן שנשלח למקבל. בפענוח הבלוק האחרון מתקבל: , משם המפענח נוטל את החלק החסר ומשלים את הבלוק הלפני אחרון ואז מפענחו עם היתר.

גניבת טקסט מוצפן (Ciphertext stealing) בקיצור CTS היא שיטה להצפנת מסר באורך שאינו מתחלק במספר הבלוקים שהצופן מקבל ללא צורך בריפוד המסר אך במחיר עליה קלה בסיבוכיות. השיטה יושמה בכמה מצבי הפעלה מתקדמים כמו XTS. במצבי ההפעלה ECB ו-CBC למשל יש צורך לרפד את המסר בדרך כלשהי כדי לקבל רצף של בלוקים שלמים, באופן שיהיה קל להסיר את הריפוד בזמן הפענוח. השיטה הנפוצה היא הוספת אחד בסוף המסר ואחריו אפסים במספר הנדרש עד לקבלת בלוק שלם. החיסרון בזה הוא שבעקבות הריפוד הטקסט המוצפן התרחב בהתאם למספר סיביות הריפוד. שיטת גניבת טקסט מוצפן מנסה להתגבר על הבעיה באופן הבא. אם הבלוק האחרון אינו שלם, פשוט מעבירים סיביות טקסט-מוצפן מהבלוק הקודם לבלוק האחרון לפי הצורך עד שמשלימים אותו לבלוק שלם, באופן זה מספר הסיביות הכולל של ההצפנה לא השתנה כלל. NIST פרסמו שלוש שיטות לגניבת טקסט-מוצפן בנספח לתקן SP800-38A[2] עבור מצב ההפעלה CBC. ההבדלים בין השיטות הם רק באופן סידור סיביות הטקסט המוצפן. להלן תיאור האלגוריתם המחולק לשלוש וריאציות CBC-CS1, CBC-CS2 והשלישית CBC-CS3 שהוצעה עבור קרברוס 5. הקלט הוא שהוא מחרוזת סיביות המסר להצפנה באורך כלשהו והפלט יהיה הטקסט המוצפן כאשר .

  1. יהי אורך הבלוק שהצופן מקבל (128 סיביות במקרה של AES). ויהי השלם הנמוך ביותר המקיים וכן . מחלקים את המסר לבלוקים כאשר כל הבלוקים למעט האחרון שלמים וכן כאשר . כלומר הבלוק האחרון עשוי להיות שלם או חלקי.
  2. מרפדים את הבלוק האחרון ב- אפסים כדי להשלימו לבלוק שלם . ייתכן שלא יהיה צורך בריפוד למשל אם .
  3. מצפינים את כל הבלוקים במצב ההפעלה CBC המתואר לעיל עם המפתח ווקטור האתחול כנדרש ומתקבלים הבלוקים של הטקסט המוצפן .
  4. חותכים את הבלוק כלומר . הפונקציה MSB מציינת שנוטלים את הסיביות החשובות ביותר בבלוק ואת יתר מוחקים.
  5. התוצאה הסופית משתנה בהתאם לגרסה:
    1. בשיטת CBC-CS1: מסדרים את הבלוקים המוצפנים כך: (הכוכבית מציינת שייתכן שהבלוק אינו שלם).
    2. בשיטת CBC-CS2: סידור הבלוקים תלוי. אם מחזירים . אם שני הבלוקים האחרונים מחליפים מקומות: .
    3. בשיטת CBC-CS3: ההחלפה בין שני הבלוקים האחרונים מתבצעת תמיד: .

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

הצפנה מאומתת[עריכת קוד מקור | עריכה]

Postscript-viewer-shaded.png ערך מורחב – הצפנה מאומתת

מצבי ההפעלה נחקרו בעבר רק מהיבט של הבטחת סודיות ויכולת התאוששות במקרה של שגיאות שידור. מצבי הפעלה המשלבים סודיות עם הגנה על שלמות ואותנטיות המידע כיעד נוסף, נקראים הצפנה מאומתת. קיימים מצבי הפעלה רבים כאלה, בהם אפשר למנות את: XCBC,‏ IACBC,‏ IAPM,‏ OCB,‏ EAX,‏ CWC mode,‏ CCM ו-GCM. במצבים אילו לעתים ההצפנה והאימות מושגים בריצה אחת או בשתי ריצות. כמו כן בין השיטות (למשל EAX) כאלו המספקות הגנה על שלמות המידע המוצפן כמו גם על שלמות מידע גלוי נלווה. הקבוצה הזו מסומנת בקיצור AEAD.

ארגון NIST מנהל רשימה של מצבי הפעלה בטוחים שהוצעו לצורך בחינה ותיקנון[3] המחולקים לשלוש קטגוריות עיקריות: מצבי הצפנה שהם מצבי הפעלה המספקים סודיות בלבד, מצבי אימות הנקראים גם קוד אימות מסרים שמספקים אימות בלבד (במקרים בהם רצוי שהטקסט המאומת יישאר גלוי) ומצבי הצפנה מאומתת המשלבים יחד אימות והצפנה.

ראו גם[עריכת קוד מקור | עריכה]

קישורים חיצוניים[עריכת קוד מקור | עריכה]

הערות שוליים[עריכת קוד מקור | עריכה]