שיטת מרקל-דמגרד
HAIFA

HAsh Iterative FrAmework בקיצור HAIFA הוצע ב-2009 על ידי אלי ביהם ואור דונקלמן כשיפור של מבנה מרקל-דמגרד. HAIFA משמר את התכונות הטובות של מבנה מרקל דמגרד תוך הוספה בביטחון וסקלביליות. הוא פשוט וגמיש, משמר את העמידות מפני התנגשויות של פונקציית הדחיסה, משפר את העמידות שלה נגד התקפת מקור שני ומקשה על התקפת נקודת שבת והתקפות מתקדמות אחרות. אפשר לראות ב-HAIFA כמודל פשוט המשלב יחד כמה מהרעיונות שהוצעו כמו eMD, ROX ו-RMC וניצול התכונות הטובות שלהם.
הרעיון הכללי של HAIFA הוא תוספת מונה וגיוון (salt) לתוך פונקציית הדחיסה. המונה מייצג את מספר הסיביות המצטבר שנקלטו עד כה בכל סבב של האיטרציה. וה- {\text{salt}} הוא ערך אקראי כלשהו לא סודי. בשיטה זו פונקציית הדחיסה תראה כך:
ערך הביניים מחושב על ידי:
כאשר  {\text{nbits}} מייצג את מספר הסיביות שנקלטו עד עכשיו. כדי לגבב את המסר  M והגיוון  s יש לבצע את המהלכים הבאים:
תחילה מרפדים את  M לפי שיטת הריפוד להלן.
מחשבים את וקטור האתחול  IV באורך  m סיביות בשיטה המתוארת להלן.
באופן איטרטיבי מעבדים את המסר המרופד בפונקציה  H עם הערך ההתחלתי  IV והגיוון  s. במקרה שהבלוק האחרון שנוסף למסר בעקבות הריפוד אינו מכיל סיביות מהמסר עצמו אלא רק את הריפוד הערך  {\text{nbits}}=0.
חותכים במידת הצורך ומחזירים את ערך הביניים האחרון.
ריפוד המסר של HAIFA דומה לשיטת הריפוד של מרקל דמגרד.
מוסיפים '1' בסוף המסר.
מרפדים באפסים לפי הצורך כך שאורך המסר יהיה שקול ל- n-(t+r) מודולו  n כאשר  t הוא מספר הסיביות הדרוש לקידוד אורך המסר ו- r מספר הסיביות הדרוש לקידוד אורך התמצית.
מוסיפים את אורך המסר ב- t הסיביות הבאות.
מוסיפים את אורך התמצית בסיביות ב- r הסיביות הבאות.
הכנת ה-IV דורשת עבודה נוספת כדי לתמוך בתמצית מסר באורכים שונים כפי שתקן SHA דורש. תחילה יש לעבד את וקטור האתחול. כלומר בהינתן  IV שנבחר על ידי המשתמש יש לחשב את:
את  m מקודדים ב- r הסיביות הראשונות, מוסיפים '1' ולאחר מכן  n-r-1 אפסים. לאחר קריאה זו אפשר להמשיך ליתר הבלוקים של המסר. הקריאה הזו שונה מיתר הקריאות לפונקציה  H והיא ייחודית בכך שבשיטה זו אפשר לחתוך את פלט פונקציית הגיבוב לכל אורך רצוי. בנוסף במקרים כאשר ידוע מראש שפלט קבוע באורכו אפשר לחשב מראש את הקריאה הזו ולקודד את התוצאה בתוך הפונקציה.
הוספת אורך תמצית המסר נועדה למנוע מצב שבו שני מסרים עם שני וקטורי אתחול שונים יפיקו ערך ביניים זהה. כמו כן שיטת HAIFA מסתמכת על כך שניתן להבחין בבלוק האחרון. זה אפשרי בשיטה זו כיוון שיש מונה. אם  {\text{nbits}}<n-(t+r){\text{ mod }}n וכן  {\text{nbits}}>0 אז זהו הבלוק האחרון של המסר וכן לא קיים אחריו בלוק ריפוד. אחרת קיימות שתי אפשרויות אם  {\text{nbits}}\neq 0{\text{ mod }}n אזי המשמעות היא שקיים בלוק נוסף שמכיל ריפוד, אחרת אם  {\text{nbits}}=0{\text{ mod }}n זהו בלוק הריפוד עצמו שבמקרה אינו מכיל סיביות מהמסר כלל. למשל אם  m=512 ו- n=1536 ונניח ש- t+r=64. היות ש- n מתחלק ב-512 נוסף בלוק ריפוד באורך 512 ובתחילתו תוספת 1 לאחריו 447 אפסים ובסופו קידוד האורך ב-64 ביט ומתקבל בסך הכול 2048. במקרה זה בבלוק האחרון  {\text{nbits}}=0.
מבנה HAIFA שולב בפונקציית הגיבוב BLAKE שהייתה מועמדת לתחרות פונקציות הגיבוב SHA-3 שהתקיימה ב-2008 ונוהלה על ידי NIST. וכן מהווה בסיס לגרסה המתקדמת BLAKE2.
בדומה למבנה מרקל דמגרד אפשר להוכיח שמבנה HAIFA משמר את עמידות הפונקציה הפנימית מפני התנגשויות. כאשר שיטת הריפוד ותוספת המונה יחד עם ה- {\text{salt}} מקשים מאוד על מספר התקפות מתקדמות כמו התקפת נקודת שבת, התקפת רב-התנגשויות וכדומה. ה- {\text{salt}} למעשה מקנה לפונקציה פסאודו-אקראיות. זה מאפשר להגדיר את ביטחון הפונקציה במודלים תאורטיים, זה מעביר את כל ההתקפות שהיו אפשריות במצב אוף ליין למצב און ליין כיוון שה- {\text{salt}} אינו ידוע למתקיף מראש. ה- {\text{salt}} אינו סודי והוא יכול להיות למעשה כל דבר תלוי יישום כמו נומרטור, מחרוזת זיהוי, חותם זמן או סתם מחרוזת אקראית. וכן הוא לא חייב להיות כאורך המסר אלא כאורך הבלוק בלבד.