1 / 40

מציאת המפתח ב- RC4 בהינתן המצב הפנימי

מציאת המפתח ב- RC4 בהינתן המצב הפנימי. מגישים: אמיר חצרוני וארז פרייברגר מנחה: יניב כרמלי. אלגוריתם RC4. אלגוריתם RC4 הוא pseudo random number generating algorithm , כאשר הגרעין הוא המפתח. האלגוריתם עובד בשני שלבים:

Télécharger la présentation

מציאת המפתח ב- RC4 בהינתן המצב הפנימי

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. מציאת המפתח ב-RC4 בהינתן המצב הפנימי מגישים: אמיר חצרוני וארז פרייברגר מנחה: יניב כרמלי

  2. אלגוריתם RC4 • אלגוריתם RC4 הוא pseudo random number generating algorithm, כאשר הגרעין הוא המפתח. • האלגוריתם עובד בשני שלבים: • KSA (key scheduling algorithm): יצירת המצב הפנימי הראשוני מהמפתח; מופעל פעם אחת • PRGA (pseudo random generating algorithm): החזרת ערך פסיאודו-אקראי ועדכון המצב הפנימי; מופעל מספר פעמים כאורך השטף הרצוי

  3. KSA אלגוריתם ה-KSA סימולציה

  4. KSA אנחנו נתמקד ב-Key Scheduling Algorithm. ה-KSA בונה לנו פרמוטציה S מעל המספרים 0…255 שתלויה במפתח K.

  5. KSA אתחול: for i = 0 to N - 1 S[i] = i ערבול: j = 0 for i = 0 to N – 1 j = j + S[i] + K[i mod l] swap(S[i], S[j])

  6. KSA לצורך הדגמה, נבחר את הסיסמה: K = “password” או ב-hexadecimal: K = [70,61,73,73,77,6F,72,64]

  7. KSA אתחול: S[0] = 0 S[1] = 1 S[2] = 2 S[3] = 3 S[4] = 4 ...

  8. KSA ערבול: j = 00

  9. KSA j = ערבול: for i = 0..N-1 { j += S[i] + K[i mod l] Swap(S[i], S[j]) }

  10. KSA j = ערבול: j=j+S[0]+K[0] Swap(S[0],S[j]) j=j+S[1]+K[1] Swap(S[1],S[j]) j=j+S[2]+K[2] Swap(S[2],S[j]) ...

  11. KSA j = ערבול: j=j+S[0]+K[0] Swap(S[0],S[j]) j=j+S[1]+K[1] Swap(S[1],S[j]) j=j+S[2]+K[2] Swap(S[2],S[j]) ...

  12. KSA j = ערבול: j=j+S[0]+K[0] Swap(S[0],S[j]) j=j+S[1]+K[1] Swap(S[1],S[j]) j=j+S[2]+K[2] Swap(S[2],S[j]) ...

  13. KSA j = ערבול: j=j+S[0]+K[0] Swap(S[0],S[j]) j=j+S[1]+K[1] Swap(S[1],S[j]) j=j+S[2]+K[2] Swap(S[2],S[j]) ...

  14. KSA j = ערבול: j=j+S[0]+K[0] Swap(S[0],S[j]) j=j+S[1]+K[1] Swap(S[1],S[j]) j=j+S[2]+K[2] Swap(S[2],S[j]) ...

  15. KSA j = ערבול: j=j+S[0]+K[0] Swap(S[0],S[j]) j=j+S[1]+K[1] Swap(S[1],S[j]) j=j+S[2]+K[2] Swap(S[2],S[j]) ...

  16. KSA ערבול: j=j+S[0]+K[0] Swap(S[0],S[j]) j=j+S[1]+K[1] Swap(S[1],S[j]) j=j+S[2]+K[2] Swap(S[2],S[j]) ...

  17. KSA כעת מחדש: נושא הפרויקט שלנו הוא: בהינתן הפרמוטציה S, למצוא את המפתח K.

  18. אבחנה התכונות שבעזרתן נמצא את המפתח

  19. אבחנה K = נסתכל על ערכו של האיבר השני בפרמוטציה: S[1] בתחילת תהליך הערבול: (i, j) = (0, 0) באיטרציה הראשונה: j = j + S[0] + K[0] = 0 + 0 + K[0] ולכן: (i, j) = (0, K[0]), ומתבצע ה-swap הבא: Swap(S[0], S[ K[0] ]) או במקרה של המפתח שלנו, זה ה-swap הבא: Swap(S[0], S[70])

  20. אבחנה K = באיטרציה השנייה: j = j + S[1] + K[1] = K[0] + 1 + K[1] ולכן: (i, j) = (1, K[0] + 1 + K[1]),ומתבצע ה-swap הבא: Swap(S[1], S[ K[0]+1+K[1] ]) הערך של K[0] + 1 + K[1] הוא D2, ולכן בסוף האיטרציה השנייה S[1] שווה ל-D2. במהלך שארית הערבול, לא התבצע עוד swap עם האיבר S[1], ולכן בסוף הערבול, ערך זה נשמר.

  21. אבחנה K = בצורה דומה באיטרציה השלישית: (i, j) = (2, K[0] + 1 + K[1] + 2 + K[2]) ומתבצע ה-swap הבא: Swap(S[1], S[3+K[0]+K[1]+K[2]]) הערך של 3 + K[0] + K[1] + K[2] הוא 47, ולכן בסוף האיטרציה השנייה S[2] שווה ל-47. גם עבור S[2], לא מתבצע עוד swap איתו עוד סוף הערבול, ולכן בפרמוטציה הסופית S[2] = 47.

  22. אבחנה השוויון ש-S[1] ו-S[2] מקיימים הוא כדלקמן: אם הפרמוטציה הייתה מתפלגת אחיד, אז לכל תא ההסתברות ששוויון זה יתקיים הייתה256-1  0.004, ולכן בממוצע היה בדיוק איבר אחד בפרמוטציה שהיה מקיים את השוויון. בפועל, ההסתברות לשוויון זה היא גדולה בהרבה, ובעזרתו ננסה לחלץ את המפתח.

  23. אבחנה הסתברות במקרה שלנו הסתברות במקרה של התפלגות אחידה ההסתברות שיתקיים המאורע ניתנת בקירוב ע"י:

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

  25. מציאת המפתח איך נשתמש באבחנה לצורך אלגוריתם מציאת המפתח

  26. מציאת המפתח כל השוויונות מגדירים לנו צירופים ליניאריים על הערכים של המפתח. עבור מפתח באורך l, נחפש l משוואות בלתי תלויות נכונות, ומתוכן נחלץ את המפתח.

  27. מציאת המפתח • הבעיה: • אף אחד מהשוויונות שמצאנו אינו מתקיים בהסתברות שגבוהה מ-40%. • הפתרון: • ספירת אוסף גדול של הצעות ואיחוד המונים של אלו שמתלכדות, ובכך להגביר את ההסתברויות לניחושים. • לאחר כל ניחוש, איחוד המונים של משוואות שהניחוש מלכד.

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

  29. ביצועים הסתברות למציאת סכום ערכי המפתח(שורש הרקורסיה):

  30. ביצועים האלגוריתם המלא:

  31. הפרויקט מה עשינו הסמסטר

  32. טיב האלגוריתם • ההסתברות להצלחה תלויה ב: • מציאה "חכמה" של הצעות, כאלו שמשקיפות בצורה האופטימאלית את הסתברותן להיות נכונות • בחירת l המשוואות בצורה הטובה ביותר • מהירות המימוש; ככל שהאלגוריתם מהיר יותר, כך ניתן להגדיל את מספר הניסיונות למפתח

  33. לפני אמצע הסמסטר הבנה לעומק ברקע התיאורטי המוצג במאמר מימוש של סימולאטור אינטראקטיבי של RC4 מציאת סכום איברי המפתח בהסתברות גבוהה ככל האפשר

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

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

  36. תנאים לקיום המשוואות • אפשר לרשום שלושה תנאים פשוטים ולא מאוד תלויים לקיום המשוואה עבור S[i’]: • כל האיברים במשוואה לא התחלפו לפני ש-i היה שווה לאינדקס שלהם. • גם האיבר שאיתו S[i’] מתחלף לא הוחלף לפני אותו השלב. • S[i’] מתחלף רק פעם אחת במהלך ה-KSA.

  37. משוואות שחופפות באינדקסים לאחר שאנחנו מעריכים את סכום ערכי המפתח, ניתן להניח על משוואות שגוזרות אותו שהתנאים הדרושים מתקיימים עליהם. מכאן כי ההסתברות שמשוואות נוספות עם אינדקסים משותפים גם מתקיימות. מהניסויים עולה שניתן למצוא כ-12 הצעות נוספות בממוצע למפתח, מתוכן 11 נכונות. זה הביא לשיפור בביצועים של האלגוריתם(כ-1% עבור מפתחות באורך 5)

  38. שימוש במשוואות אחרות מהמאמר במקרים בהם S[i]<i אפשר להניח ששלושת התנאים לא התקיימו ולכן המשוואה שנקבל כנראה לא נכונה. במאמר הוצגו משוואות אחרות למקרה הזה. בפועל הן היו נכונות בערך ב-1% אחד מהמקרים, שזה יותר טוב מהתפלגות אחידה אבל פחות טוב מהממוצע של שאר המשוואות ולכן לא הועיל לטיב האלגוריתם. מסקנה: לא למנות את המקרים בהם S[i]<i

  39. האצת האלגוריתם ככל שיורדים בעומק הרקורסיה, כך אחוזי השגיאה עולים. על מנת להאיץ את האלגוריתם, ניתן למזג את שתי הבחירות האחרונות, ובמקום לאחד מונים בין שתי הבחירות, ניתן לעבור על זוגות של משוואות בלתי תלויות. התוצאה היא האצת האלגוריתם בכ-30% וכן העלאה ניכרת באחוזי ההצלחה.

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

More Related