לדלג לתוכן

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ובפרוטוקול האבטחה שלבלוטות'.

הצפנה מאומתת

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

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

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

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

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

עבור CCM גנרי ישנם שני פרמטרים לקבוע. הראשון הואשמגדיר את אורך שדה האימות. ערכו שלהוא מעין שקלול בין התרחבות המסר המוצפן לבין הסיכויים שמתקיף יצליח לזייפו בלי שהמשתמשים יבחינו בכך. ערכים אפשריים הם 4,6,8,10,12,14,16 בתים. הבחירה השנייה היאשמגדיר את מספר הבתים המוקצה לשדה אורך המידע המיועד להצפנה. ערך זה הוא פשרה בין אורך מקסימלי של מידע שאפשר להצפין לבין אורךוקטור האתחולערכו שללא יכול להיות קבוע כי הוא תלוי ביישום. ערכים אפשריים הם בין שני בתים לשמונה בתים. הערךשמור. הטבלה הבאה מסכמת את הפרמטרים הבסיסים של CCM:

שם תיאור אורך שדה בסיביות קידוד השדה
מספר הבתים בשדה תג האימות 3 סיביות
מספר הבתים בשדה האורך 3 סיביות

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

  • מפתח הצפנההמתאים לצופן הבלוקים שנבחר לשמש כבסיס למערכת (לדוגמה צופן AES עם מפתח באורך 128 סיביות).
  • ערך חד-פעמי המסומן כאןבאורךבתים. חשוב ש-יהיה ייחודי עבור כל מפתח נתון ואין לחזור ולהצפין שני מסרים שונים עם אותו מפתחואותואחרת ביטחון המערכת נהרס לחלוטין.
  • מסרהמכילבתים כאשר.מגבלת האורך מבטיחה שניתן יהיה לקודד את ערךבתוך שדה באורךבתים.
  • מידע נלווהאם ישנו, באורךבתים כאשר.המידע הנלווה מאומת אך נותר גלוי והא אינו חלק מפלט 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.

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

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

משרשרים את וקטור האתחול, המידע הנלווה והמסר המיועד להצפנה למחרוזת אחת ארוכה, אותה מחלקים למקטעים בגודל 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 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
  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 שניהם פרימיטיבים ידועים ובטוחים.
  • מבנה גנרי שאינו תלוי באלגוריתמים ספציפיים, מה שמאפשר את החלפתם במידת הצורך.
  • יש צורך רק בפונקציית הצפנה, הן להצפנה והן לפענוח. במקרה של AES זהו חיסכון בקוד כי פונקציית הפענוח שונה מההצפנה.
  • הצפנה במצב מונה ניתנת לביצוע מקבילי, אך לא שלב האימות.
  • דרוש רק מפתח הצפנה סודי יחיד שממנו נגזר מפתח האימות. למרות הסיכון שבדבר, המפתחים היו זהירים מספיק כדי למנוע פרצה.
  • אפשר להכין מראש את זרם-המפתח להצפנת גוף המסר אך לא את מפתח האימות.
  • התנפחות הצופן מעבר לאורך המסר המקורי היא בסדר גודל בין 4 ל-14 בתים בהתאם לגודל התג.
  • אין דרישות זיכרון מיוחדות מעבר לדרישות הזיכרון של צופן הבלוקים.

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

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

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

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

הערות שוליים

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