< התקפת איזון זמן

התקפת איזון זמן/זיכרון

בקריפטואנליזה Time/Memory Tradeoff היא סוג של התקפת כוח גס גנרית שבה התוקף (או הקריפטאנליסט) מנסה לקצר את זמן החישוב על חשבון שימוש בזיכרון או להפך. שני המשאבים, דרישות זיכרון מצד אחד וזמן עיבוד מהצד השני משלימים זה את זה והתוקף מנסה להגיע לאיזון אופטימלי כך שההתקפה תצליח בזמן הקצר ביותר תוך שימוש בכמות המינימלית של זיכרון. ניצול זיכרון לצורך האצת ביצועים אטרקטיבי לאור העובדה ששטח אחסון נעשה זמין וזול בקצב מהיר. השיטה יכולה לשמש להיפוך כל פונקציה חד-כיוונית ומסיבה זו ישימה במיוחד כנגד פונקציית גיבוב או צופן בלוקים. מקרה פרטי של התקפה זו נקרא Time/Memory/Data Tradeoff, שבו נוסף פרמטר 'דטה' המתייחס לכמות המידע שהתוקף משיג בזמן ריצה (און ליין). היא מבוססת על איזון בין שלושת הפרמטרים הללו והיא טובה במיוחד כנגד צופן זרם.

רקע

התקפת איזון זמן/זיכרון הועלתה לראשונה ב-1980 על ידי מרטין הלמן[1]. למעשה בעיות חיפוש רבות מאפשרות איזון בין זמן לזיכרון. למשל אם קיימים פתרונות אפשריים לחיפוש, איזון זמן/זיכרון מאפשר השגת פתרון מתאים לבעיה נתונה בזמן של (כלומר פעולות חישוב) עם מילים של זיכרון, בתנאי שהמכפלה מתקיימת. התקפה זו מתאימה לפונקציה חד-כיוונית שבה הפתרון אינו ניתן לחישוב באופן ליניארי וההנחה המקובלת היא שצופן בלוקים מתנהג כפונקציה חד-כיוונית (אחרת לא יהיה בטוח כלל). התקפת כוח גס קריפטוגרפית, שהיא חיפוש ממצה של המפתח הסודי היא בעיית חיפוש טיפוסית שהאיזון בין זמן וזיכרון ישים עבורה. כשהמפתח גדול, נגיד 128 סיביות, חיפוש ממצה לחשיפתו ללא שימוש בזיכרון, בדרך כלל דורש עוצמת חישוב בלתי ריאלית כי נדרשות פעולות. סיטואציה זו מתאימה למצב הפרמטרים ו-. לעומת זאת ייתכן שהתוקף יוכל לנצל זיכרון כדי להאיץ את ההתקפה פשוט על ידי ביצוע החיפוש הממצה אוף ליין ושמירת ומיון כל התוצאות בטבלה ענקית, כך שמציאת מפתח כלשהו יכולה להתבצע במהירות, בערך , דהיינו כמעט מיידית (לא מביאים בחשבון את הזמן הדרוש להכנת הטבלה ומיון הערכים, אפשר להניח למשל שעבודת ההכנה כבר נעשתה מוקדם יותר מתוך ראייה שהיא תשמש להרבה התקפות עתידיות. בכל אופן אפשר להתעלם כאן מסיבוכיות ההכנה). בסיטואציה זו ו-. התקפה זו נקראת 'טבלת חיפוש' (table lookup) ושוב השיטה אינה מעשית בשל כמות הזיכרון האסטרונומית הדרושה שהיא בערך כניסות של 128 סיביות כל אחת. המטרה של התקפת איזון זמן/זיכרון היא ליישם התקפה באופן שיידרש זמן ביצוע מקוון נמוך מחיפוש ממצה אך שכמות הזיכרון של טבלת החיפוש יהיה גם הוא סביר.

שיטת הלמן

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

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

לסיכום לצורך ההתקפה מגדירים פונקציה שהיא תוצאת הצפנה של הבלוק לאחר המרה למפתח הצפנה עם הפונקציה (הפונקציה אינה הכרחית אם הבלוק המוצפן יכול לשמש ישירות כמפתח הצפנה):

.

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

תיאור ההתקפה

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

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

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

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

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

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

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

Distingushing Point

Rainbow Table

עדי שמיר, אלכס ביריוקוב Cryptanalytic Time/Memory/Data Tradeoffs for Stream Ciphers

ראו גם

הערות שוליים

This article is issued from Hamichlol. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.