קוד אימות מסרים

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

בקריפטוגרפיה, אלגוריתם קוד אימות מסרים - Message Authentication Code בקיצור MAC, הוא שם כולל לתת-קבוצה של פונקציות גיבוב קריפטוגרפיות, הכוללות שימוש במפתח סודי ומשמשות לאימות מסרים. פונקציית MAC מקבלת כקלט מפתח סודי ומסר באורך שרירותי המיועד לאימות ומפיקה פיסת מידע קצרה המשמשת לאימות וזיהוי מסר. כאשר מעצם ההגדרה יהיה קשה מבחינה מעשית למצוא קלט המפיק ערך זהה בלא ידיעת המפתח הסודי. פלט הפונקציה נקרא קוד MAC או ערך MAC (לעתים נקרא גם תג) והוא משמש להגנה על שלמות המסר כמו גם על זהותו, על ידי מתן אפשרות למאמת המסר (המחזיק במפתח סודי מתאים) לאתר כל שינוי אם נעשה בתוכן המסר. יש המכנים אלגוריתם זה MIC, קיצור של Message Integrity Code.

דיאגרמת קוד אימות מסרים

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

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

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

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

הרעיון של אימות מסרים החל בפברואר 1977 כאשר הציע קמפבל (Campbell) לראשונה להשתמש ב-DES כבסיס לאלגוריתם אימות מסרים. השם הכולל MAC ניתן לאלגוריתמים אילו בסביבות 1979 במהלך פיתוח תקן ANSI X9.9. אלגוריתמי MAC מיושמים בדרך כלל בשיטות סימטריות. אפשר להכין אלגוריתם MAC מפרימיטיבים קריפטוגרפיים רבים כמו פונקציית גיבוב: אלגוריתם MD5-MAC המבוסס על אלגוריתם תמצית מסרים MD5, או אלגוריתם HMAC-SHA1 המבוסס על אלגוריתם תמצית מסרים SHA, האחרון בשימוש מעשי כיום במערכות מסוימות.

ניתן ליישם קוד אימות מסרים באמצעות כל צופן גושים ידוע (כגון AES). משפחה זו של אלגוריתמים לאימות מסרים נקראת בשם הכולל CBC-MAC, שהוא בעצם מצב הפעלה של צופן גושים הקרוי CBC (קיצור של Cipher block chaining). הרעיון הכללי הוא כדלהלן: בהינתן פונקציית הצפנה \ E_k עם מפתח סודי \ k, המייצגת צופן גושים כלשהו והמסר \ x כשהוא מחולק לגושים בגודל קבוע \ x_1,x_2,...,x_t, חישוב ערך ה-MAC (כאן \ H) נעשה כדלהלן: \ H_1=E_k(x_1); \ H_i=E_k(H_{i-1}\oplus x_i) עבור \ 2 \le i \le t כאשר \ t הוא מספר הגושים (גודלם תלוי בצופן הגושים שבשימוש). מסתבר ששיטה זו בטוחה רק עבור מסרים בגודל קבוע.

קיימים גם אלגוריתמים ייעודיים לאימות מסרים ביניהם Message Authenticator Algorithm בקיצור MAA שפותח בשנת 1983 על ידי דוויס וקליידן (Davis & Clayden) לבקשת שירותי הבנק האוטומטיים בבריטניה כחלק מתקן ISO. לאחר שהתגלו בו ליקויים אינו מומלץ כיום. וכן CRC-MAC שהוא אלגוריתם MAC המשתמש בצופן זרם ומבוסס על CRC. רעיון השימוש ב-CRC נולד בעקבות רעיון של ווגמן וקרטר (Wegman & Carter) לשלב פנקס חד פעמי ופונקציית גיבוב אקראית (אוניברסלית כהגדרתם) ליצירת אלגוריתם אימות מסרים. שיטה זו מספקת בטיחות מוכחת בהנחה שקיימת פונקציה פסבדו אקראית בטוחה.

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

בין האלגוריתמים החדשים לאימות מסרים המבוססים על CBC-MAC ניתן למנות את OMAC (נקרא גם One-key MAC) המתחלק לשני סוגים OMAC1 ו-OMAC2 וכן PMAC שניהם אלגוריתמים לאימות מסרים שמשתמשים בצופן גושים כבסיס. אלגוריתם CMAC (קיצור של Cipher based MAC) שנקרא בתחילה XCBC, פותח על ידי בלאק ורוגווי (Black & Rogaway) במיוחד כדי להתגבר על החסרון העיקרי באלגוריתם אימות מסרים מבוסס CBC-MAC (הבטוח לשימוש רק עבור מסרים באורך קבוע). אלגוריתם זה הומלץ על ידי NIST כתקן אימות מסרים במאי 2005.

אלגוריתם חדש לאימות מסרים נקרא UMAC[1] (קיצור של Universal MAC) שפותח על ידי בלאק, הלוי, קרייציק, קרובץ ורוגאווי ב-1999 והורחב בשנת 2000. האלגוריתם מבוסס על פרימיטיבים קריפטוגרפיים קיימים ואינו מחדש דבר, אך נחשב לבטוח ומהיר מקודמיו כמו כן האלגוריתם אינו מוגן בזכויות יוצרים כלשהם. UMAC הוא קוד אימות מסרים בסגנון וואגמן וקרטר, משתמשים בשילוב של פונקציית גיבוב אוניברסלית, מחולל אקראי ושני מפתחות הצפנה סודיים. מפיקים ערך גיבוב קטן מהמסר, אותו ממסכים ב-XOR עם ערך אקראי הנקרא "פד פסאודו אקראי" והתוצאה נקראת תג-UMAC שיכול להיות בכמה גדלים (32, 64, 96 או 128 סיביות). השילוב מתבצע כך: \ H_{K_1}(M) \oplus F_{K_2}(\mbox{Nonce}). הפונקציה \ H היא פונקציית גיבוב שכאן משולבת עם מפתח הצפנה. הפונקציה \ F היא פונקציה פסאודו אקראית (במקרה זה מבוססת על צופן גושים AES) והערך Nonce הוא ערך חד-פעמי כלשהו כלומר לכל תג-UMAC יש לייצר ערך אחר שצריך להיות ידוע גם למקבל אך אינו חייב להיות סודי. מפתחות ההצפנה והמספר האקראי צריכים להיות משותפים לשני הצדדים השולח והמקבל ובטיחות האלגוריתם תלויה בסודיות המפתחות. תיאור האלגוריתם על ידי המחברים מכיל מפרט מדויק למימוש בטוח של הפונקציות השונות המרכיבות את האלגוריתם.

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

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

  1. ^ "UMAC: Fast and Secure Message Authentication". John Black, Shai Halevi, Hugo Krawczyk, Ted Krovetz, and Phillip Rogaway. Advances in Cryptology - CRYPTO '99. Lecture Notes in Computer Science, vol. 1666, Springer-Verlag, 1999, pp. 216-233.