CCM

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

Counter/CBC MAC[1] (נקרא גם CCMP) הוא מצב הפעלה גנרי של צופן בלוקים להצפנה מאומתת שמספק סודיות והבטחת שלמות שפותח ב-2003 על ידי דאג ווייטינג מחברת Hifn, רוס האוסלי לשעבר מ-RSA וניילס פרגוסון ממיקרוסופט, כמועמד לתקן הצפנה מאומתת של NIST. האלגוריתם שייך לקטגוריה AEAD (הצפנה מאומתת עם מידע נלווה), בבסיסו שני פרימיטיבים קריפטוגרפיים נפרדים והוא פועל בשתי ריצות; בריצה ראשונה המסר מוצפן באמצעות צופן בלוקים סימטרי במצב מונה המשלב הצפנה של בלוקים מרובים בתוספת אינדקס הבלוק. בריצה השנייה המסר מאומת על ידי קוד אימות מסרים CBC-MAC, המייצר תג אימות של המסר המוצפן יחד עם המסר הנלווה אם ישנו. קיימת הוכחה שמבנה זה בטוח בהנחה שצופן הבלוקים שביסודו בטוח, כמו כן אפשר להשיג בדרך זו סודיות בלבד ו/או הבטחת שלמות ואימות ללא סודיות, אם דרוש. CCM אינו תומך און ליין ואינו מתאים להזרמת מדיה. CCM נתמך בתקן SP 800-38C[2], נמצא בשימוש IPSec הוצע ב-RFC 6655 עבור TLS והוא מצב הפעלה מנדטורי של IEEE 802.11i בתקן 802.15.4-2001 כחלק מפרוטוקול WPA2 וכן בשינויים קלים בפרוטוקול ZigBee.

הצפנה מאומתת

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

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

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

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

תיאור CCM

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

הצפנה ואימות

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

פלט: טקסט מוצפן .

  1. פורמט. מחלקים את הקלט לבלוקים בגודל 128 סיביות כל אחד, לפי ההנחיות להלן.
  2. וקטור אתחול. מצפינים את הבלוק הראשון (שהוא וקטור האתחול): .
  3. חישוב תג אימות.
    עבור עד מבצעים:
    .
    תג האימות הוא .
  4. חישוב המונה. מחשבים את כאשר לפי ההוראות להלן.
  5. הצפנת המונה.
    עבור עד מבצעים:
    (הבלוק משמש להצפנת תג האימות).
    המונה הוא הבלוקים: .
  6. הצפנת המסר. מצפינים את .
  7. הצפנת תג האימות. מצפינים את התג .
  8. פלט. התוצאה היא .

פענוח ואימות

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

פלט: או סמל מיוחד המייצג כישלון INVALID.

  1. מוודים ש- אם לא מחזירים INVALID.
  2. מייצרים את המונה. כאשר .
  3. מצפינים את המונה. עבור עד מבצעים: .
  4. הבלוקים של המונה הם: .
  5. מפענחים את הטקסט המוצפן. .
  6. מחשבים את תג האימות .
  7. מוודים ש- מתאימים להוראות התקן ומחלקים אותם לבלוקים . אם לא מחזירים INVALID.
  8. מצפינים את הבלוק הראשון .
  9. מחשבים את תג האימות. עבור עד מבצעים: .
  10. אם מחזירים את אחרת מחזירים INVALID.

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

פירוט פרמטרים

לצורך קידוד CCM יש לקבוע שני פרמטרים; אורך שדה תג האימות בבתים. גודל זה משפיע על ההסתברות שתוקף יצליח לזייף את תג האימות, ככל שהוא גדול יותר סיכוייו נמוכים יותר. מאידך ערך גדול משפיע על התנפחות הצופן, ערכים קבילים הם בטווח 4 עד 16 בתים (בין 32 ל-128 סיביות). הפרמטר השני הוא גודל השדה המכיל את אורך המסר, בטווח של 2 עד 8 בתים. העובדה ששני הפרמטרים מקודדים בבית אחד משפיעה על כמות הבתים שניתן שניתן להצפין לעומת אורך התג המקסימלי, היות שצריך לקודד את מספר הבתים להצפנה וכן את מספר הבתים שתופס התג, שניהם בבית אחד. את שני הפרמטרים מקודדים בבית הראשון (לפי הפירוט להלן). וקטור האיתחול צריך להיות בגודל בתים וחייב להיות חד-פעמי. אין להצפין שני מסרים עם אותו וקטור איתחול (אם המפתח לא הוחלף) כי מצב כזה ממוטט את בטחון המערכת כליל. אורך המסר המקסימלי שניתן להצפנה מאומתת יהיה עד בתים. מגבלה זו נועדה להבטיח שאפשר יהיה לקודד את אורך המסר בשדה באורך בתים. אורך המידע הנלווה יהיה בין 0 ל- בתים. המידע הנלווה מאומת אך לא מוצפן ואינו חובה.

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

הבית הראשון המכיל את הדגלים מקודד בסדר יורד כדלהלן, סיבית 8 שמורה (תמיד אפס), סיבית 7 מציינת האם קיים מידע נלווה. היא תקבע לאפס אם אורך המידע הנלווה הוא אפס. סיביות 4 עד 6 מכילות את לפי קידוד . הערכים הקבילים הם 1 עד 7. אין להשתמש באפס כי משמעותו 16. סיביות 1 עד 3 מכילות את בטווח הערכים 1 עד 7 לפי קידוד כאשר אפס שמור.

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

שני הבתים הראשונים אורך קידוד טווח
0x0000 אין מידע נלווה שמור
0x0001 עד 0xFEFF 2 בתים בין ל-
0xFF00 עד 0xFFFD אין מידע נלווה שמור
0xFFFE 4 בתים בין ל-
0xFFFF 8 בתים בין ל-

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

פורמט הבית הראשון של בלוק המכיל את הדגלים
סיבית מס' 0 1 2 3 4 5 6 7
תכולה מידע נלווה שמור
פורמט בלוק
בית מס' 0
תכולה דגלים וקטור אתחול קידוד אורך המסר בבתים

לדוגמה אם בלוק מכיל את מחרוזת הסיביות הבאה, 128 סיביות מחולקות לבתים משמאל לימין (הסיבית השמאלית בכל בית היא המשמעותית ביותר):

  1. כיוון שהסיבית לפני האחרונה בבית הראשון (המסומנת באדום) היא 1, המשמעות היא שקיים מידע נלווה.
  2. אורך תג האימות הוא (בגלל ששלוש הסיביות הבאות המסומנות בכחול הן "101" - 5 בייצוג עשרוני).
  3. היות ששלוש הסיביות הבאות (ירוק) הן "110" אורך המסר מקודד בשבעה הבתים האחרונים בסך הכול 56 סיביות.
  4. לפי תכולת שבעה הבתים האחרונים אורך המסר המיועד להצפנה ואימות הוא 20,000 בתים.
  5. וקטור האתחול מאוחסן בשמונת הבתים הנותרים (בסגול) שהם בבסיס הקסדצימלי: "13D4A35D71A50000"

הכנת המונה

לצורך הצפנה במצב מונה (Counter mode), תחילה מייצרים בלוקים של מונה כל אחד בגודל 16 בתים. את המונה אפשר לחשב מראש לפני הגעת המסר. קידוד המונה מתבצע בדרך דומה, לפי סדר בתים גדול, הבית הראשון מכיל את הדגלים, הבתים מכילים Nonce (ערך ייחודי חד-פעמי), הבתים מכילים את המונה. הבית המכיל את הדגלים מקודד כך ששתי הסיביות המשמעותיות (7 ו-8) אינן בשימוש, הסיביות 4 עד 6 מכילות אפס והסיביות 1 עד 3 מכילות את לדוגמה פירושו שאורך המונה הוא 4 בתים (הערך המקסימלי הוא 8 בתים). את המונה מצפינים באמצעות צופן הבלוקים והצפנת המידע עצמו מתבצעת עם המונה המוצפן שמשמש כמפתח בשיטה דומה לצופן זרם, בה מצפינים מילה אחר מילה ב-XOR.


פורמט בלוק מונה
בית מס' 0
תכולה דגלים Nonce מונה

בטחון

קיימת הוכחה שבטחון CCM עומד בשורה אחת עם אלגוריתמים אחרים כמו OCB. כדי שההוכחה תהיה תקפה יש להגביל את כמות המידע הניתן להצפנה עם מפתח יחיד שלא יעלה על בלוקים של 128 סיביות, שזה בערך 16 מיליון טרה-בית. לגבי האימות לפי הגדרת הבטחון של האלגוריתם הסיכויים שיעלה בידי תוקף לזייף טקסט מוצפן כך שאלגוריתם האימות יחזיר אמת, בלי ידיעת המפתח הסודי הוא . לכן לא רצוי להשתמש בתג הקצר מ-64 סיביות. יתרה מזו יש צורך להגביל את מספר הפעמים שהפרוטוקול יחזיר INVALID (כאשר אחד הפרמטרים שגוי) עם מפתח נתון בהתאם לסיטואציה, למשל אם רוחב הפס נמוך לא סביר שהתוקף ינסה פעמים רבות, לעומת זאת אם ביצוע הפרוטוקול מהיר יש חשש שהתוקף ינסה פעמים רבות עד שיצליח לזייף תג אימות או לפענח את המסר. בניסוח פורמלי אם מייצגים את מספר הקריאות שנכשלו (כלומר שהאלגוריתם החזיר INVALID) עם מפתח נתון MaxErrs וכן הסיכוי לזיוף מוצלח מסומן Risk אזי:

.

יתרונות וחסרונות

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

לעומת זאת המבקרים מצביעים על כמה חולשות ביניהן:

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

ראו גם

קישורים חיצוניים

הערות שוליים