בין אם אנחנו משתמשים ובין אם אנחנו מתכנתים – כולנו מכירים את ההצקה הקבועה כאשר נרשמים לשירות. מחייבים אותנו לאורך מינימלי וכמובן לאותיות גדולות וסימנים מיוחדים. לא מעט שירותים בישראל וגם בעולם מחייבים אותנו להכניס תוים מיוחדים – כלומר % או # או ! בסיסמה ולא מאפשרים לנו להרשם בשירות אם אנחנו לא מכניסים לסיסמה שלנו תו אחד לפחות מסוג זה. המהדרין מחייבים אותנו לכלול לפחות ספרה אחת, תו מיוחד אחת ואות גדולה אחת באנגלית. מתכנתים הרבה פעמים עושים את זה באופן עיוור. אנחנו מממשים מנגנון ססמאות באתר? נחייב את המשתמשים שלנו לבחור ססמאות עם אות גדולה, מספר ותו מיוחד. זה כבר מגיע באופן אוטומטי.
נשאלת השאלה "למה?". במקרה הזה לא נדרש להיות מומחה גדול כדי להבין שזה מקטין את היכולת לנחש את הסיסמה. אבל בואו ונצא שניה מהאינטואיציה ונטעם מעט מהעולם המופלא של אבטחת המידע. בואו ונניח שיש לי סיסמה המורכבת מאות אחת בשפה האנגלית (למשל a או u). מהו מספר הניחושים המקסימלי שאותו אני צריך על מנת לנחש את הסיסמה? התשובה היא כמובן מספר האותיות בשפה האנגלית שעומד על 26. אם למשל בחרתי סיסמה וההאקר ירצה לפצח את הסיסמה, הוא יצטרך לנחש את האותיות אחת אחרי השניה. הוא ישאל אותי: "הסיסמה היא a?" במידה וכן, הצליח לו תוך ניסיון פיצוח אחד. אם בחרתי באות z כסיסמה שלי והוא יעבור על כל האותיות לפי הסר מ-a עד z אז מספר הניסיונות שלו יהיה 26. כלומר רמת הקושי של הסיסמה תהיה 26 ניסיונות.
בעולם התכנות מקובלת לייצג את הקושי של הסיסמה במונח 'אנטרופיה'. לוקחים את מספר הניסיונות האפשרי ומכניסים אותו (לא להתעלף מהמתמטיקה בבקשה) ללוגריתם של 26 בבסיס 2. זה נשמע מסובך, אבל קל לחשב את זה עם גוגל בלבד בלי להוציא מחשבון, פשוט חפשו
log2(26)
במנוע החיפוש של גוגל ותקבלו את התוצאה 4.7 – זו האנטרופיה של סיסמה עם ספרה אחת שמכילה אך ורק אות קטנה באנגלית. או יותר נכון אנטרופיה בביטים.
זה נשמע מסובך אבל זה ממש לא – כל מה שצריך לזכור זה (log(x כאשר בתוך ה-x אנחנו מכניסים את מספר האפשרויות.
לא שכנעתי שזה פשוט? בואו ונראה עם עוד דוגמה – אם נגדיר שהסיסמה התיאורטית שלנו תכיל גם אותיות גדולות, אז מה לפי דעתכם יקרה? טוב, סביר להניח שרמת הקושי תגדל. בכמה? עכשיו אנחנו לא צריכים 26 ניסיונות אלא 52 (26 אותיות גדולות ו-26 אותיות קטנות). כמה האנטרופיה תהיה עכשיו?
log2(52)
הנוסחה הזו מניבה את התוצאה 5.7. כלומר הסיסמה הזו היא בעלת חוזק של 5.7 ביטים של אנטרופיה. לא קשה, נכון? זה גם לא קשה גם אם אנחנו צריכים לחשב אנטרופיה של ססמאות שהן יותר מתו אחד. אם הסיסמה שלנו היא 6 תוים, אנחנו נצטרך לנחש 6 פעמים. האנטרופיה של הסיסמה הזו תהיה:
log2(52) X 6 = 34.2
34.2 זה מספר נחמד אבל אפשר להוציא ממנו גם את כמות הניסיונות המקסימלי שצריך בשביל לפצח את הססמה. כל מה שצריך זה להכניס אותו לחזקת 2. 2 בחזקת 34.2 זה יוצא (בערך): 19,770,609,663 – כלומר 19 מיליארד, שבע מאות שבעים מיליון ו-609 אלף ניסיונות מקסימליים. וואו! זה נשמע הרבה, נכון? אבל האמת היא שבחלק מהמקרים זה יקח מספר דקות בודדות לפרוץ את הסיסמה הזו. לא כל ההתקפות הן מבוססות רשת. בהנחה ויש לי קובץ מוגן בסיסמה שאני רוצה לפרוץ והוא נמצא על המחשב שלי או על מחשב שיש לי עליו שליטה והמחשב הוא מחשב חזק, אני יכול לנסות ולפצח את הסיסמה במיליון בקשות לשניה. כלומר תוך 5 וחצי שעות אני יכול, תיאורטית, לפצח את הסיסמה.
זו הסיבה העיקרית שבגללה מטריחים אותנו עם התוים המיוחדים. נחזור לתוים המיוחדים ולסיסמה בעלת התו האחד. אם נחייב את המשתמש להקליד לפחות אות גדולה אחת, אות קטנה אחת, ספרה ותו מיוחד – מספר האפשרויות שיש לתו אחד הוא: 26 אותיות קטנות באנגלית, 26 אותיות גדולות באנגלית, 10 ספרות ו-10 סימנים מיוחדים. בסך הכל 72 תוים. האנטרופיה היא 6.17. לסיסמה בת 6 תוים האנטרופיה תהיה 6.17 כפול מספר התוים. במקרה שלנו 37.019. ההבדל מסיסמה עם אותיות בלבד לא נראה כאן דרמטי, אבל מספר הניסיונות שאני אצטרך עכשיו הוא שתיים בחזקת 37.019: 139,314,069,508 – כלומר 139 מיליארד. שזה הרבה הרבה יותר. במחשב שיכול לנחש מיליון ניחושים לשניה מדובר בכ-38 שעות. לא רע!
אז כן, הוספת תוים מיוחדים מעלה את האבטחה. אבל זה בעייתי.
מה הבעיה עם זה? כמה בעיות – הראשונה היא שלמרות שהאנטרופיה גדלה, עדיין הוספת התוים המיוחדים לא הופכת את הסיסמה לבלתי פריצה. נכון, הפרש של 33 שעות הוא גדול, אבל הוא לא הופך את פיצוח הסיסמה לבלתי אפשרית.
הבעיה השניה היא שחוזק של 37 ביטים של אנטרופיה הוא מעולה, אבל לא מספיק טוב בעידן של מעבדים גרפיים חזקים. בעבר מיליון ניסיונות לשניה נשמעו כמו המון (וזה באמת המון), אבל היום מדברים על מיליארד ניסיונות לשניה. אז הוספת התוים המיוחדים לסיסמאות נראית מגוחכת. אנחנו צריכים לגרום לסיסמה שלנו להיות עם אנטרופיה ממש גבוהה בכמה סדרי גודל.
הבעיה השלישית היא שהוספת התוים המיוחדים מטריפה את המשתמשים שמייד ניגשים לפתרון הקל ביותר: כתיבת הסיסמה על נייר (במקרה הטוב) או באיזושהי טיוטה במייל (במקרה הפחות טוב). אנחנו לא בנויים לזכור תוים מיוחדים ומספרים. זה בלתי אפשרי.
אז מה עושים? מניחים למשתמשים לבחור במה שהם רוצים – אפשר רק אותיות רגילות (כמובן שאם משתמש רוצה אותיות גדולות או רווח מאפשרים לו) אבל קובעים גודל מינימום לסיסמה. למשל 20 תווים מינימום.
רמת האנטרופיות של סיסמה ארוכה תהיה גבוהה משמעותית. במקרה שלנו:
log2(26) X 20 = 94
(וזאת בהנחה שהמשתמש בחר ב-20 תוים בדיוק). זה אומר שהמפצח שלנו יצטרך כמו הזויה של ניסיונות:
1.9928149e+28
מדובר בכמות ניסיונות שבקצב של מיליון ניסיונות לשניה יקח אלפים רבים של שנים לפתח. גם עם המעבדים הגרפיים החזקים ביותר מדובר במשימה ממש לא אפשרית.
נשמע משוגע לגמרי? אחת מהסיסמאות שלי בעבר היתה pedo mellon a minno speak friend and enter
זו סיסמה שממש ממש קל לזכור. זה 'אמור חבר והכנס' בסינדארין ובאנגלית. אין סיכוי לשכוח אותה. במיוחד אם אתה חובב שר הטבעות. האנטרופיה של הסיסמה הזו היא 197. מספר האותיות בסיסמה (כולל הרווחים) שעומד על 42 ומוכפל ב log2(26) שזה האורך של הסיסמה.
log2(26) X 42
עם הבסיס התיאורטי הזה קל להסיק שאם אנחנו רוצים אבטחה מוגברת – הדבר האחרון שאנחנו צריכים זה להטריף את המשתמשים שלנו עם אותיות גדולות, קטנות ותוים מיוחדים. כל מה שצריך זה קביעת אורך מינימלי גבוה מספיק כדי שיעמוד בסטנדרט האנטרופיות שלנו. זה הכל. אולי הגיע הזמן שנפסיק להטריד את המשתמשים שלנו באותיות גדולות וקטנות. אם המערכת שלנו צריכה לעמוד בסטנדרטים של הגנה – כדאי שפשוט נפנה למדע, נגדיר רמת אנטרופיות ונגיע אליה עם אורך.
ולסיכום סיכומי בהחלט, xkcd תמיד נותן בראש:
לא מכירים את xkcd? כדאי לכם להכיר.
19 תגובות
היי רן,
המאמר מעולה! מסביר בצורה פשוטה וברורה את המשמעות האמיתית של אורך הסיסמה והתווים הנבחרים בה.
הייתי שמח לדעת מה דעתך על שימוש בתוכנות ו/או אתרים בתור מנהלי סיסמאות (lasspass dashlane וכדומה).
תודה רבה,
דניאל
מאמר מצוין! האם הדבר רלוונטי גם בשירותים שמגבילים מספר נסיונות? האם בגימייל מישהו יכול לנסות מיליון פעם להכניס סיסמא?
כפי שרן ציין, קבועי הזמן המקובלים (מיליון ניסיונות לשנייה וכו') מבוססים על המקרה הגרוע-אך-אפשרי של הימצאות היעד לפריצה בידי הפורץ, למשל קובץ נעול בסיסמא. במקרה של יעד מרוחק תקשורת האינטרנט מאטה מאוד את קצב הניסיונות האפשרי.
בנוגע לשירותים שמגבילים את מספר הניסיונות – הם קובעים בדרך כלל "תקופת צינון" של מספר דקות ולרוב היא הולכת ומתארכת במידה וממשיכים להתקבל ניסיונות אימות כושלים. אם ננתח אתר שמאפשר 10 ניסיונות אימות ולאחר מכן ננעל לחצי דקה (עונש פשוט – ללא הארכה של משך הצינון). נקבל 1200 ניסיונות אפשריים בשעה במקום 3.6 מיליארד המתאימים לחישובים במאמר שלהלן, כלומר כל שעה במאמר שקולה ל-3 מיליון שעות עבור המקרה שאנו מנתחים, כך שמתקפה המבוססת על bruteforce הופכת לבלתי ישימה.
וכרגיל מוזילה הוא אח
איך לכתוב ססמא מסובכת בקלות:
https://support.mozilla.org/en-US/kb/create-secure-passwords-keep-your-identity-safe
היי רן, מאמר שמנגיש נושא חשוב, תודה!
הבעיה היא שקיימים אתרים (במיוחד ישראליים) שקובעים דווקא אורך סיסמא מקסימלי. מטריד, כמובן, להניח שהסיבה היא שימוש בסיסמא עצמה איפשהו במאגר ולא בהאש שלה.
נתקלתי גם פעמיים באתרים ישראליים שאיפשרו לי להזין תווים מיוחדים בסיסמא ולאחר מספר חודשים חסמו את האפשרות לתווים מיוחדים בעת הזדהות כך שלא יכולתי יותר להיכנס באמצעות הסיסמא שלי. סטארטאפ ניישן.
בוודאי קל יותר לזכור סיסמאות המבוססות על מילים אך חישוב האנטרופיות במקרה כזה אינו מדויק. אם נניח שהתוקף יודע (או מניח) שהסיסמא מורכבת ממילים הוא יכול להשתמש במילון של 1000, 2000 או 5000 מילים נפוצות. במקרה שלך נקבל אנטרופיה של 88 שזה עדיין מעולה אבל זה לא 197. *החישוב לפי מילון בגודל 2000, 8 מילים. זה יוצא שקול לסיסמא בעלת תווים מיוחדים באורך 16 תווים. במקרה שלך – השתמשת גם בסינדארין שבטח לא נמצאת במילון אז אתה בסדר – גם אני כולל בסיסמאות שלי מילה מומצאת.
מאמר נהדר, תודה!
למה לא לאפשר למשתמש להוסיף סימנים מיוחדים, אבל לא לחייב. ובמקביל לדרוש אורך סיסמא כמו שכתבת. כלומר,מי שירצה לפרוץ יידרש לקחת בחשבון 72 תווים אפשריים, אבל המשתמש לא חייב לעשות בהם שימוש.
שאלה נוספת, האם מקש הרווח נחשב כתו? לדוגמא, "בוקר טוב" נספר כשמונה תווים או שבע?
ההנחה שרוב המשתמשים יעדיפו לא להכניס לסיסמא דברים שיסבכו אותם. למשל הגישה של גוגל לגבי 2Factor עובדת כך – בהתחלה זו היתה אופציה וכיום זו כמעט חובה. גם התוקף יניח כך וינסה סיסמאות בלי תוים מיוחדים ויוכל לפרוץ ככה לרוב המשתמשים.
רווח נחשב כתו. אם הסיסמא שלך "בוקר טוב" לא תוכל להיכנס עם "בוקרטוב" או "בוק רטוב".
שאלה על האנארופיה,
האם אנטרופיה של סיסמא שמאפיינה הבסיסים ידועים לך לא פוגמת בעוצמת הסיסמא?
נניח אני יודע שאורך הסיסמא הוא 8 והוא מורכב מספרה אחת אות גדולה אחת ואותיות קטנות.
עכשיו, כמות האתיות הקטנות 26 הגדולות 26 ספרות 10 וסימנים 10
יוצא log(26)*5+log(26)+log(10)+log(10) וכל זה בסדר של 8 מעל 4 אם אני לא טועה(וכנראה שאני כן). מה שאני מנסה להגיד זה שניחוש מושׁכל של מיקום האותיות הקטנות (מאחר ואנחנו מניחים שלקוח יבחר רק סימן אחד מיוחד אות אחת גדולה ומספר אחד, למרות שייתכן ויבחר יותר), מיקום האותיות הגדולות הסימנים והמספרים יוריד, את האנטרופיה. בבקשה תתקן אותי אם אני טועה.
הרעיון הזה הוא לנצל את היותנו אנושיים, כלומר לעשות משהו שלנו כבדי אדם מאד קל (לזכור משפטים ארוכים) ולמחשב מאד קשה (לפצח שרשראות תווים ארוכות).
לגבי המילון – דווקא כדוברי מומקלידי עברית זה פתרון פנטסטי – מקלידים על מקלדת עברית, כאשר התווים הם באנגלית וכך יוצאות "מילים" שאין בשום מילון.
למשל:
cjur ctsnv jh ku vuchy
הי רן,
תודה על הפוסט החשוב!
אגב, גם מכון התקנים האמריקאי כבר הכיר בכך שעדיף סיסמא ארוכה על סיסמא עם סימנים מיוחדים וממליצים על סיסמא באורך מינימלי של 8 תווים, ללא מגבלה על סוג התווים. הם גם ממליצים לא לדרוש שינוי של סיסמאות (למשל באופן תקופתי) אלא אם ידוע על פירצה בצד המוודא – https://pages.nist.gov/800-63-3/sp800-63b.html#-511-memorized-secrets
עכשיו רק צריך שהמעצבנים בבנק יבינו שכשהם מגבילים אותנו ל6-8 תווים עם חוקים מטופשים שצריך להחליף כל 3 חודשים הם פוגעים בבטחון שלנו, ולא מגנים עליו.
למה מסבכים את העניין עם אנטרופיה? יותר פשוט לדעתי לדבר על חזקות.
ובמקרה למעלה (אורך 6 52 תווים, 6 בחזקת 52) זה יוצא בדיוק 19,770,609,664. (ולא 19,770,609,663)
במקרה השני (72 תווים) זה יוצא 139,314,069,504 בדיוק. ולא 139,314,069,508.
מה העניין באנטרופיה ובמציאת הלוג. אשמח להסבר.
כי כשמכניסים אנטרופיה באופן כזה מאוד קל לחשב אותה (אפילו ברמת הג׳אווהסקריפט) ולמדוד אותה 🙂
היי רן,
החישובים שלך מבוססים על בחירה של 20 תוים מתוך רשימה של 26 אפשרויות. האיור של XKCD, לעומת זאת, מדגים עיקרון דומה אבל אחר: בחירה אקראית של 4 מילים מתוך רשימה של 2048 אפשרויות.
נקודה חשובה: התוצאה של חישובי האנטרופיה שימושית רק אם התוים נבחרים באופן אקראי! אם ניקח משפט מבוסס על ספרות פופולרית, אזי התוים אינם אקראיים.
ראה דיון על ה־ title text כאן: https://www.explainxkcd.com/wiki/index.php/936
Title text: To anyone who understands information theory and security and is in an infuriating argument with someone who does not (possibly involving mixed case), I sincerely apologize.
אסיים את הדיון התיאורטי בהפניה לשיטה מעשית לבחירת סיסמה חזקה: https://pypi.org/project/xkcdpass
ההערה במקום והמאמר הזה כמובן הוא מאוד נאיבי. אני אפרסם מאמר המשך המסביר על התקפה מילונית.
כתבה מעולה תודה רבה!!
יש לך syntax error.
"הוא יתטרך לנחש את האותיות אחת אחרי השניה".
I understand the number of combinations, but won't it be easier for a site to limit the guessing to 1 per second (or another interval)?
No person can type a password in less that one second, and with this limitation, the time it takes to try even a small number of password makes it impractical.
תיקון קטן – במקום "אורך" צריך לכתוב בשורה האחרונה מספר האפשרויות, (למרות שגרמת לי לקרוא את המאמר פעמיים נוספות כדי להבין מה הלך שם)
"נשמע משוגע לגמרי? אחת מהסיסמאות שלי בעבר היתה pedo mellon a minno speak friend and enter
זו סיסמה שממש ממש קל לזכור. זה ‘אמור חבר והכנס’ בסינדארין ובאנגלית. אין סיכוי לשכוח אותה. במיוחד אם אתה חובב שר הטבעות. האנטרופיה של הסיסמה הזו היא 197. מספר האותיות בסיסמה (כולל הרווחים) שעומד על 42 ומוכפל ב log2(26) שזה האורך של הסיסמה"
מה הסיסמה של הטלגרם