הפונקציה הפנימית מיושמת על כל הבלוקים formula_86 בזה אחר זה. כל בלוק מוצפן עם מפתח formula_87 שהוא תוצאה של הצפנת הבלוק הקודם, כאשר formula_88 הוא המפתח הסודי המסופק על ידי המשתמש ו-formula_89. אפשר להחליף את פונקציית הגיבוב בצופן בלוקים formula_90 כמתואר בתרשים. תוצאת הפונקציה האחרונה או חלק ממנה היא תג האימות. גם במקרה זה אופן הריפוד זהה וכן כדי שהשיטה תהיה בטוחה ההצפנה האחרונה צריכה להיות עם מפתח אחר, אחרת הסכמה תהיה פגיעה להתקפה המתוארת לעיל. לביטחון נוסף יש המשרשרים ערך ריפוד קבוע כלשהו לפני ההצפנה האחרונה כך: formula_91. ביטחון המבנה המתואר נשען על ביטחון הפונקציה הפנימית. ככל שהיא בטוחה, מבנה NMAC בטוח גם הוא, תחת מודלים קריפטוגרפיים סטנדרטיים. כלומר בהתקפת כוח גס ניסיון לזייף את התג שקולה לניסיון לפרוץ צופן הבלוקים או פונקציית הגיבוב שבשימוש. התקפת יום הולדת כנגד פונקציית גיבוב, פחות מעשית במקרה זה כי התג תלוי במפתח סודי.
CMAC/OMAC.
דרך אחרת שפותרת מהצורך להוסיף 'בלוק-דמה', נקראת OMAC קיצור של One key MAC או CMAC (קיצור של Cipher based MAC). היא מבוססת על CBC-MAC, פועלת עם שלושה מפתחות ומתחלקת לשני סוגים OMAC1 ו-OMAC2. תחילה מצפינים את כל הבלוקים עם המפתח הראשון בשיטת CBC, בסוף התהליך אם אורך המסר הוא כפולה של גודל הבלוק מצפינים את התוצאה האחרונה עם המפתח השני, אם לא, מצפינים עם המפתח השלישי והתוצאה של ההצפנה האחרונה תהיה התג (ראו תרשים). כאן שני המפתחות הנוספים הם פונקציה של המפתח הראשון (שהיא פונקציה אקראית 'אוניברסלית' באמצעות חישוב כפל מודולרי בפולינומים). בגרסת OMAC1 תחילה מחשבים את formula_92, דהיינו הצפנה של מחרוזת אפסים באורך formula_11 באמצעות המפתח הראשון ואז המפתח השני הוא formula_94 (הסימן formula_95 הוא הזזה לשמאל של כל הסיביות פוזיציה אחת, כשהסיבית השמאלית ביותר נפלטת) ואם הסיבית הגבוהה (MSB) של המפתח היא '1' מחסרים מהתוצאה באמצעות XOR את הקבוע formula_96 (התחילית formula_97 מייצגת בסיס הקסדצימלי כנהוג בשפת C). באופן דומה מחשבים את המפתח השלישי: formula_98, ושוב אם הסיבית הגבוהה היא '1' מבצעים XOR עם אותו קבוע. גרסת OMAC2 שונה במעט, המפתח השלישי הוא formula_99 והוא מחושב על ידי הזזה לימין במקום לשמאל וחיבור XOR מותנה עם הפולינום הקבוע formula_100.
אלגוריתם CMAC שנקרא בתחילה XCBC, פותח על ידי בלאק ורוגווי (Black &amp; Rogaway) במיוחד כדי להתגבר על החיסרון העיקרי באלגוריתם אימות מסרים מבוסס CBC-MAC (הבטוח לשימוש רק עבור מסרים באורך קבוע). אלגוריתם זה הומלץ על ידי NIST כתקן אימות מסרים SP800-38B במאי 2005.
כפל בפולינומים מעל שדה סופי.
הפעולה המתוארת היא כפל פולינומים מעל שדה בינארי מורחב formula_101 כלומר הערך formula_102 הוא פולינום עם מקדמים בינאריים (המכיל 128 אפסים למעט 'אחד' בפוזיציה השנייה, או formula_103 בייצוג הקסדצימלי). לפי חוקי הכפל בפולינומים הפעולה formula_104 מקבילה לכפל ב-2 שזה מסתכם בפעולת הזזה בסיביות שמאלה צעד אחד (Shift left). אם הסיבית הגבוהה של התוצאה היא '1' מתקבל ערך שחורג מהשדה ולכן יש צורך לבצע צמצום מודולרי על ידי חילוק בפולינום אי פריק המייצג את השדה שזהו הקבוע formula_105 ונטילת השארית. בגלל הכפל ב-2 הגלישה אינה גדולה לכן אפשר להסתפק בפעולת חיסור אחת שמבוצעת באמצעות XOR אחד בלבד. אפשר להתעלם מהסיבית המשמעותית, כלומר הקבוע formula_106 בייצוג הקסדצימלי. באותה דרך מחשבים את formula_107 שקול להזזה בסיביות לימין צעד אחד וחיסור מותנה ב-XOR עם הקבוע formula_108.
גרסת MAC מקבילית שנקראת PMAC (קיצור של Parallelizable MAC) פותחה על ידי בלאק ורוגווי ב-2002 כדי להתגבר על בעיה בקוד אימות CBC שהוא סדרתי באופיו לכן במקרה של צורך בשינוי בלוק אחד, צריך לבצע את כל תהליך החתימה מהתחלה. בנוסף לא ניתן לחלק את הביצוע בין מספר מעבדים באופן מקבילי. PMAC מבצע (ראו תרשים) הצפנה בנפרד של כל בלוק עם המפתח הסודי formula_109 בנוסף ל-XOR עם ערך נוסף שהוא פונקציה בשדה סופי המחושבת באופן רקורסיבי כדלהלן: תחילה formula_110 (כלומר הצפנת מחרוזת אפסים עם צופן הבלוקים והמפתח הסודי formula_109) ואז בכל שלב formula_112 והמפתח להצפנת כל הבלוקים של המסר למעט הבלוק האחרון formula_113 הוא formula_114 המחושב רקורסיבית: formula_115 כאשר formula_116. הפונקציה formula_117 מייצגת את מספר האפסים המסיימים בערך formula_118, לדוגמה formula_119 וכן formula_120. כל הבלוקים המוצפנים מחוברים ב-XOR ומתקבל formula_121. את הבלוק האחרון formula_113 מצפינים בדרך שונה התלויה במצב הריפוד, כלומר אם אורך המסר אינו כפולה של גודל הבלוק בדיוק שאז נדרש ריפוד (בשיטה המתוארת לעיל), מתבצע XOR של הבלוק האחרון עם formula_121. אם הבלוק האחרון שלם ולא נדרש ריפוד, מבצעים XOR נוסף עם הערך formula_107. התג יהיה חלק מתוצאת ההצפנה של formula_121.
לצורך מקביליות חלק המערכים שאינם תלויים במסר ניתנים לחישוב מראש. למעט השלב האחרון, כל בלוק מוצפן באופן עצמאי כך שניתן לחלק את העבודה בין מספר יחידות חישוב במקביל.
HMAC הוא קוד אימות מסרים גנרי הדומה ל-NMAC ופועל בצורה של פונקציית גיבוב קריפטוגרפית בשילוב עם מפתח סודי. HMAC פותח על ידי מיהיר בלייר, רן קנטי והוגו קרווציק ב-1996 והוכח כבטוח תחת הנחה שפונקציית הגיבוב בטוחה לפי מודלים רגילים. כלומר הפונקציה אמורה להיות חד-כיוונית וחסינת התנגשויות (אם כי הדרישה האחרונה אינה הכרחית תמיד והיא תלוית יישום). מבנה HMAC משתמש בפונקציית הגיבוב כקופסה שחורה באופן שאפשר ליישמו עם קוד ספרייה או חומרה נפוצה בדרך פשוטה וניתן להחליף את פונקציית הגיבוב באחרת ללא מאמץ. HMAC יעיל מאוד והוכח שהוא משמר את ביטחון פונקציית הגיבוב עליה הוא מבוסס, כלומר אם פונקציית הגיבוב חסינת התנגשויות אז המבנה כולו חסין התנגשויות. בפועל מציינים בשם האלגוריתם את שמה של פונקציית הגיבוב שבשימוש, לדוגמה בשילוב עם SHA-2 הקוד ייקרא HMAC-SHA-256 או HMAC-SHA-512 וכיוצא בזה. הגדרה הכללית של האלגוריתם ללא תלות בפונקציית הגיבוב כמתואר בתרשים משמאל, היא כדלהלן:
formula_109 הוא המפתח הסודי ו-formula_128 הוא המסר לאימות, formula_129 היא פונקציית הגיבוב המועדפת, הערכים formula_130 ו-formula_131 הם קבועים מוסכמים שאינם סודיים, הנקראים כך בשל אופן שימוש בהם, 'פד פנימי' ו'פד חיצוני' בהתאמה. והסימן formula_132 מייצג שרשור, ביתר פירוט:
אלגוריתם אימות מסרים UMAC (קיצור של Universal MAC) פותח על ידי בלאק, הלוי, קרייצ'יק, קרובץ ורוגאווי ב-1999 והורחב בשנת 2000. הוא בנוי על פרימיטיבים קריפטוגרפיים ידועים ונחשב לבטוח ומהיר מקודמיו כמו כן האלגוריתם אינו מוגן בזכויות יוצרים כלשהם. אלגוריתם UMAC הוא קוד אימות מסרים בסגנון וואגמן וקרטר המבוסס על משפחת פונקציות הגיבוב NH שהן עצמן פישוט של הפונקציות MMH ו-NMH של הלוי וקרייצ'יק מ-1997. אילו הן פונקציות גיבוב אוניברסליות. פונקציית גיבוב תקרא formula_141-אוניברסלית אם עבור כל זוג מסרים שונים ההסתברות שהגיבוב שלהם יתנגש (שיופק אותו ערך גיבוב עבור שניהם) הוא לכל היותר formula_141. כשההסתברות היא מעל בחירה אקראית של פונקציה מהמשפחה. פונקציית הגיבוב NH בבסיס האלגוריתם פועלת כדלהלן: מתייחסים למסר formula_128 כאל רצף של formula_144 מספרים שלמים, formula_145 כאשר כל formula_146 מתאים למילה באורך formula_147 סיביות (מסיבות של יעילות רצוי ש-formula_147 יתאים לגבולות מילה של המעבד, כגון formula_149 או formula_150). פונקציה ספציפית היא רצף של formula_151 שלמים formula_152 באורך formula_147. מחשבים את formula_154 כך:
כל החישובים האריתמטיים מותאמים וממוטבים למחשב. הגבול התחתון למציאת התנגשות בפונקציה זו הוא מסדר גודל של formula_156. וכן אין להשתמש ב-formula_109 פעמים נוספות.
VMAC הוא קוד אימות מסרים מבוסס צופן בלוקים שהוצע ב-2007 על ידי Ted Krovetz ו-Wei Dai. האלגוריתם משתמש בגרסה של פונקציית גיבוב אוניברסלית ועוצב במיוחד לביצועים גבוהים על מעבדי 32 ו-64 ביט. למשל בארכיטקטורת 64 ביט האלגוריתם צורך חצי מחזור שעון לבית קלט אחד (0.5 cpb). פחות מ-5 מחזורי שעון בארכיטקטורת 32 ביט וכ-10 מחזורי שעון לבית במערכות משובצות.
VMAC הוא קוד אימות מסרים סימטרי בסגנון ווגמן וקרטר. הוא משתמש בפונקציית גיבוב אוניברסלית מהירה על קלט formula_128 בכל אורך רצוי ומפיק ערך גיבוב קצר formula_159 שיכול להיות באורך בין 64 סיביות ועד כפולה כלשהי של בלוק הצופן שבשימוש, אותו הוא מצפין על ידי חיבור עם פד פסאודו-אקראי לקבלת תג אימות הסופי של VMAC. השולח והמקבל חייבים לשתף מראש פונקציית גיבוב אקראית סודית formula_129 ומחרוזת פסאודו-אקראית אותה מפיקים באמצעות פונקציה פסאודו-אקראית formula_76. את התג מחשבים באופן פורמלי על ידי:
כאשר המפתחות formula_163 ו-formula_164 הם מפתחות סודיים אקראיים המשותפים לשולח והמקבל. Nonce הוא ערך חד-פעמי (כמו מספר סידורי) לא סודי שחייב גם הוא להגיע לידיעת המקבל. הפונקציה formula_76 היא בעצם צופן הבלוקים AES ועבור הפונקציה formula_129 האלגוריתם משתמש בווריאציה של פונקציית גיבוב עם מפתח הנקראת VHASH.
עמק הנופלים
עמק הנופלים (בספרדית: Valle de los Caídos) הוא אתר הנצחה לחללי מלחמת האזרחים בספרד.
היסטוריה.