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

CWC[1] פותח ב-2004 על ידי טאדיושי קונו מאוניברסיטת קליפורניה, ג'ון ויאגה מ-Virginia Tech ודאג ווייטינג מ-Hifn כיום חלק מ-exar. אלגוריתם CWC נכלל ברשימת האלגוריתמים המובילים שמנהל NIST[2] לצורך תקן הצפנה מאומתת[3] ולו חמש תכונות חשובות שמציבות אותו כמועמד מועדף לתקן; ביטחון מוכח, מקביליות, ביצועים גבוהים בחומרה ובתוכנה והעדר זכויות יוצרים. במימוש אופטימלי בחומרה אמור להגיע לתפוקה של 10Gbps. הוא מהיר יותר ממצבי ההפעלה CCM ו-EAX אך פחות מהיר בהשוואה לOCB שמוגן בפטנט. מועמדותו של OCB לתקן IEEE 802.11 נדחתה בגלל נושא זכויות יוצרים.

תיאור כללי

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

סימנים מוסכמים

בתיאור האלגוריתם יופיעו הסימנים הבאים: אם ו- שלמים חיוביים כך שמתקיים אזי הפונקציה פירושה הקידוד של כמחרוזת של סיביות לפי סדר בתים גדול (big-endian). בסדר בתים גדול הסיבית המשמעותית ביותר לא נחשבת כסיבית הסימן. לדוגמה המספר 30 בבסיס בינארי הוא המחרוזת "11110". אם ו- הן מחרוזות סיביות אזי הוא אורך המחרוזת והביטוי הוא XOR של עם . הפונקציה מייצגת את השלם המקביל למחרוזת לפי סדר בתים גדול. לדוגמה . אם נתונה הסיבית הביטוי מתייחס לסיבית כשהיא משוכפלת פעמים למשל . הביטוי פירושו הפלט של הפונקציה עם הקלט ומחרוזת פסאודו-אקראית כלשהי שנבחרה באופן אחיד מתוך מרחב המחרוזות האפשריות, כך ש- היא PRF.

אלגוריתם ההצפנה הסימטרי המסומן בקיצור שבשימוש CWC, מיוצג על ידי אוסף של שלושה אלגוריתמים מעל מרחב מפתח כלשהו , מרחב Nonce (וקטור אתחול) המסומן , מרחב המידע ומרחב המידע הנלווה באורך שרירותי כלשהו. הסימון CWC-BC-tl מתייחס למצב ההפעלה CWC עם צופן בלוקים ספציפי המכונה כאן בקיצור BC ועם אורך תג רצוי למשל במקרה של AES עם תג באורך 96 סיביות אפשר להחליפו בסימון CWC-AES-96. המפתח מופק על ידי יהיה באורך שנקבע לפי האלגוריתם ולפי העדפה (לפחות 128 סיביות). ה-Nonce צריך להיות באורך סיביות. המסר והמידע הנלווה , מחרוזות בינאריות באורך שאינו עולה על בלוקים של 128 סיביות. הביטוי מתייחס להפעלה של צופן הבלוקים עם המפתח על המסר והפלט הוא .

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

CWC מורכב משישה מודולים המתוארים בפסאודו קוד הבא:

אלגוריתם הכנת מפתח

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

אלגוריתם ההצפנה

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

אלגוריתם פענוח

יש לשים לב שכדי למנוע התקפת תיזמון, במקרה שגיאה כשהאלגוריתם מחזיר INVALID רצוי שלא יהיה ניתן להבחין באיזה שלב ארעה השגיאה (שורות 3, 4).

אלגוריתם הפעלת מצב מונה

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

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

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

אלגוריתם MAC

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

תמורה פסאודו-אקראית

ערך מורחב – תמורה פסאודו-אקראית

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

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

מקביליות

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

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

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

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

ראו גם

הערות שוליים