מסקנות והיררכיה
אחד הדברים שנובעים מפרדוקס יום ההולדת הוא חסם תחתון על אורך הפלט של פונקציות תמצות. לשם פונקציה בטוחה אנו נחפש פלט מאורך \( M \) כך ש- \( \sqrt{M} \) יהיה מספיק גדול בשביל שלא יהיה אפשרי לחשב אותו בזמן ריאלי. תמצות באורך 40 ביטים אמנם כולל \( M = 2^{40} \) ערכי תמצות שונים אך הוא חשוף למציאת התנגשות בסיכוי של 1:2 לאחר \( Q = 2^{20} \) ניסיונות בלבד. תמצות באורך 160 ביטים כפי שהיה מקובל בפונקציה \( SHA1 \) שנעסוק בה בהמשך יצריך \( 2^{80} \) ניסיונות למתקפת יום הולדת מוצלחת – דבר שאינו ישים.
היררכיה בין הבעיות: כיוון שמציאת התנגשות היא בעיה פשוטה יותר מאשר שתי התכונות האחרות (כאמור הסיכוי להצליח אותה בפחות ניסיונות הרבה יותר גבוה) מספיק שנראה שפונקציית תמצות חסינה לבעיית ההתנגשות ומכך נסיק שהיא חסינה גם לבעיות הקשות יותר. כדי להוכיח פורמאלית את הקשר בין התכונות (איזו תכונה נחשב לבעיה קשה יותר) אנחנו נעזרים בבניה של רדוקציה. רדוקציה היא דרך להמיר בעיה בבעיה אחרת בדוגמה הבאה למשל ניתן לראות את הקשר בין בעיית מציאת המקור לבין בעיית מציאת המקור השני.
נניח שיש ברשותנו מכונה שאינה חסינה מפני בעיית \( Preimage \) ונראה כיצד ניתן לבנות בעזרתה מכונה שתפתור את בעיית ה- \( 2nd Preimage \):
לאור העובדה שתחום הערכים של הפונקציה הוא אינסופי הסיכוי ש- \( x' == x \) הוא אפסי. מכאן שבבנייה שלעיל אנו יכולים לקבל מקור שני לתמונה בהינתן מכונה שפותרת את בעיית המקור הראשון. תשומת הלב שברדוקציה יש אותו זמן ריצה וגם אותו סיכוי להצלחה בהבדלים זניחים עד כדי אפסיים. בניות מהסוג הזה יעזרו לנו בהמשך בעיקר בהוכחות על דרך השלילה (ראו סעיף ג׳ בתרגיל להלן).
תרגול
שאלה: תהי \( f \) פונקציית תמצות \( Preimage Resistant \) מהצורה \( f: 0..1^m \to 0..1^n \) כאשר \( m > n \) ו- \( m \) הוא תחום סופי. לכל \( x \) באורך \( 2m \) שמורכב משרשור של \( x' \) ו- \( x'' \) באורך \( m \) תהיי \( h \) הפונקציה: \( h: {0..1}^{2m} \to {0..1}^n \) כך ש:
\( h(x) = h(x' || x'') = f(x' \oplus x'') \)
האם \( h \) חסינה מפני \( 2nd Preimage \)? האם \( h \) חסינה מפני \( Collision \)? האם \( h \) חסינה מפני \( Preimage \)?
סעיף ראשון: \( h \) אינה חסינה מפני מציאת מקור שני.
ניזכר בהגדרה: האם בהינתן \( x' \) כך ש- \( h(x') = y \) נוכל למצוא \( x'' \) כך ש- \( h(x'') = y \)? להלן שני פתרונות למציאת מקורות שונים לאותה התמונה.
פתרון 1: יהיה \( x = x' || x'' \) כך ש- \( x' \neq x'' \) (כלומר – מקור לא סימטרי) מכאן ש:
\( x' || x'' \neq x'' || x' \)
\( h(x' || x'') = f(x' \oplus x'') = f(x'' \oplus x') = h(x'' || x') \)
כלומר מצאנו מקור נוסף למקור הנתון ע״י שינוי סדר חצאיו של המקור המקורי.
פתרון 2: נעזר ב-XOR ובאפסים - יהי \( x \) כך ש- \( x = x' || x'' \) כאשר \( x' \neq 0...0 \) נתבונן במקור שהוא שרשור של XOR חצאיו של \( x \) עם \( m \) אפסים:
\( h(x' \oplus x'' || 0...0) = f(x' \oplus x'' \oplus 0...0) = f(0...0 \oplus x' \oplus x'') = h(0...0 || x' \oplus x'') \)
סעיף שני: \( h \) אינה חסינה מפני \( Collision \).
בשאלות מהסוג הזה נחפש דוגמא נגדית פשוטה. במקרה הנוכחי נביא דוגמה נגדית לזוג ערכים שמספק אותו XOR למשל:
\( h(0...0) = f(0...0 \oplus 0...0) = f(1...1 \oplus 1...1) = h(1...1) \)
סעיף שלישי: \( h \) אכן חסינה מפני \( Preimage \).
בשאלות מהסוג הזה ניעזר בבניות של רדוקציה ובהוכחות על דרך השלילה. נניח על דרך השלילה ש- \( h \) אינה חסינה מפני מציאת מקור ונראה כיצד יהיה ניתן לבנות בעזרתה מכונה שתמצא מקור ל- \( f \). כיוון שנתון ש- \( f \) אכן חסינה נגיע לסתירה. מההנחה ש- \( h \) אינה חסינה לבעיית מציאת המקור נובע שקיימת מכונה Broken h שבהינתן תמונה \( y \) מספקת לה מקור. אנו ניעזר בה כדי למצוא מקור ל- \( f \).
בהינתן תמונה \( y \) נשים לב שנוכל להזין אותה למכונה שמספקת מקור ל- \( h \). המקור שיתקבל יהיה מהתחום של \( 2m \) (שרשור החלקים). כדי לקבל את המקור של \( f \) נוכל להפעיל XOR על המקור של \( h \) כמוצג באיור הבא:
כיוון שנתון ש- \( f \) חסינה למציאת מקור הגענו לסתירה. הסתירה נבעה מההנחה ש- \( h \) אינה חסינה למציאת מקור ומכאן ש- \( h \) אכן חסינה למציאת מקור.
שאלה: נתונות שתי פונקציות תמצות: \( h1 \) ו- \( h2 \). נתון שרק אחת מהן חסינת התנגשויות. נתונה פונקציה נוספת:
\( h(x | y) = h1(h2(x) \oplus h2(y)) \)
האם \( h \) חסינת התנגשויות?
התשובה שלילית. דוגמה נגדית עבור קלט לא סימטרי \( x || y \) מתקיים:
\( h(x | y) = h1(h2(x) \oplus h2(y)) = h1(h2(y) \oplus h2(x)) = h(y || x) \)
מצאנו קלט שונה שמקבל אותה תמונה ב- \( h \) ומכאן שהיא אינה חסינה להתנגשויות.
בהינתן אותם נתונים האם הפונקציה הבאה חסינת התנגשויות?
\( h(x | y) = h1(x) || h2(y || y) \)
התשובה שלילית. נתון שרק אחת הפונקציות חסינת התנגשויות. אם \( h1 \) אינה חסינה להתנגשויות ניתן למצוא \( x \) ו- \( x' \) שונים כך ש- \( h1(x) = h1(x') \). לכן לכל \( y \) שנבחר \( x || y \) יתנגש עם \( x' || y \) ב- \( h \) שכן:
\( h(x | y) = h1(x) || h2(y || y) = h1(x) || h2(y || y) = h(x' || y) \)
מצאנו קלט שונה שמקבל אותה תמונה ב- \( h \) ומכאן שהיא אינה חסינה להתנגשויות.