יצירת קשר עם התמיכה

אנחנו משיבים בדוא״ל, בדרך כלל בתוך יומיים.

למניעת שימוש לרעה, Google reCAPTCHA בודק את הפנייה הזאת; נתונים נשלחים אל Google. הסקריפט נטען רק עם פתיחת הטופס הזה.

→ כל הרשומות

מה עולה סיסמה בחומרה צנועה

על התוכן ועל בדיקתו

במאמר הזה

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

נמדד במחשב שמפעיל את האתר הזה, PHP 8:

PASSWORD_DEFAULT560 ms(מתורגם לעלות 12)
עלות 12595 ms
עלות 11277 ms
עלות 10138 ms
עלות 10138 msעלות 11277 msעלות 12595 msPASSWORD_DEFAULT

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

למה ברירת המחדל היא הבחירה הלא מתאימה כאן

השפה PHP העלתה את עלות ברירת המחדל של bcrypt מ־10 ל־12. בשרת מחשב שולחני זה שדרוג סביר — מדובר בכמה עשרות אלפיות השנייה. בחומרה צנועה מדובר ביותר מחצי שנייה של זמן מעבד בלבד, במחשב שגם מצייר באותו זמן תמונות מונה לכל האחרים.

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

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

החלק שקל לפספס

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

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

פרסומת