התקפת brute force מילונית

במאמר קודם דיברנו על brute force ואיך מחשבים אנטרופיה. לא, לא צריך להכנס ללחץ – אפשר לקרוא את המאמר הקודם שכתבתי כדי להזכר.
בסוף המאמר היתה המלצה להשתמש בסיסמה ארוכה במיוחד אם אנו רוצים להגן עליה מהתקפות של brute force. למה? כיוון שאם אני משתמש באלגוריתם נאיבי במיוחד על מנת לפצח את הסיסמה – כזה שמתחיל ב-a עובר ל-b וכך הלאה (מגיע ל-aa ואז ab וכו’ כפי שהסברתי במאמר הקודם) – פיצוח ססמה ארוכה במיוחד הופך לכמעט בלתי אפשרי.
ואז חטפתי מהמגיבים – למה? כי השתמשתי בגישה נאיבית מאוד לפיצוח. במאמר הזה אני מספר על גישה אחרת להתקפה שיכולה לצמצם דרמטית את הזמן הנדרש לססמאות ארוכות.
בואו ונדגים. נניח שיש לי ססמה מאוד ארוכה:

"this is a very long password"

לכמה ניסיונות אדרש על מנת לפצח את הססמה הזו? על פי הגישה הנאיבית – אם יש לסיסמה אורך של 25 תוים ואני יודע שכל התוים האלו הם באנגלית ובאות קטנה, רמת האנטרופיה בביטים של הסיסמה תהיה

log(26) * 25 = 117.51 

מספר הניסיונות המקסימלי שאדרש אליו הוא 2 בחזקת 117.51 שזה המון. האם יש דרך לצמצם את זה? ובכן. בוודאי שיש. אם אני יוצא מנקודת הנחה שאני משתמש במילים באנגלית… אני יכול לצמצם מאוד את כמות הניחושים. איך זה עובד?
ראשית, אצטייד בתזאורוס, בו יש את כל המילים בשפה האנגלית. האלגוריתם שלי יצטרך לעבור מילה מילה.
האם מדובר במילה apple? לא? מה עם banana? לא? מה עם cucumber? גם לא? ככה נעבור על כל המילים. יש 171,476 מילים בשפה האנגלית בסך הכל. לא הצליח? סימן שהמשתמש שלנו השתמש בסיסמה עם יותר ממילה אחת. ועכשיו ננסה: האם הסיסמה היא:

apple apple

או

apple banana

או

apple cucumber

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

Log2(26)

ואז להכפיל באורך הסיסמה, אני צריך לעשות

log2(171,476)

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

log2(171,476) * 5

וזה יוצא 86.93 וזה נמוך משמעותית ביותר מ-117.51, שזו רמת האנרופיה בביטים אם אני משתמש בגישה הנאיבית. להתקפה הזו קוראים התקפה מילונית. נכון, תזאורוס הוא לא מילון אבל אנחנו אנשים פשוטים.
אבל אפשר להוריד עוד את רמת האנטרופיה. יש 171,476 מילים לפי מילון אוקספורד, הכולל ברשימת המילים מילים מאוד איזוטריות שרוב האנשים לא מכירים. אם נצא מנקודת הנחה שרוב האנשים ישתמשו במילים פשוטות כמו password, long, the, a או very ולא במילים מעניינות כמו erinaceous למשל. אם ניקח רשימה של מילים פשוטות, נוכל להוריד את האנטרופיה עוד יותר. אם למשל שימוש בהתקפת מילון של 20,000 מילים לסיסמה על חמש אותיות:

log2(20000 ) * 5

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

happy unicorn day 11/03/1950

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

log2(20000 ) * 5

יהיה לנו

log2(20050 ) * 5

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

this is ahla bahla shel sisma

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

pedo mellon a minno speak friend and enter

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

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

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

pedo mellon a minno speak friend and enter

או סיסמה נוסח:

AbCdE1

?

אתם מוזמנים לחשב את הביטים של האנטרופיה בשני המקרים ולראות מה יותר בטוח.

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

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

אהבתם? לא אהבתם? דרגו!

לא אהבתי בכלללא אהבתיבסדראהבתיאהבתי מאוד (9 הצבעות, ממוצע: 4.56 מתוך 5)

תגיות: פורסם בקטגוריה: יסודות בתכנות

יאללה, שתפו :)

אל תשארו מאחור! יש עוד מה ללמוד!

3 comments on “התקפת brute force מילונית
  1. אילן הגיב:

    אפרופו במקום תעתיק לדוברי עברית יש אפשרות אפילו יותר רנדומלית להשתמש באותיות לועזיות כפי שמופיעות האותיות בעברית (קצת קשה המכשיר נייד).
    לדוגמה thki זה מיקום האותיות של השם שלי.

  2. אביאל הגיב:

    תותח.

    כמו תמיד המאמרים שלך מאוד מעניינים ומרתקים

כתיבת תגובה

האימייל לא יוצג באתר.

רישום