- ה-salt הוא מחרוזת אקראית שנוספת לסיסמה לפני ה-hash כדי להשיג hashes ייחודיים לכל משתמש.
- לינוקס הוא מאחסן hash, salt ואלגוריתם ב-/etc/shadow, ומחזק את האבטחה מפני התקפות dictionary וטבלאות rainbow.
- שיטות עבודה טובות דורשות מלחים ארוכים, אקראיים וייחודיים, יחד עם אלגוריתמי גיבוב חזקים. מסדי נתונים מוגן היטב.
- יש לשלב סיסמאות חזקות (Salting) במדיניות אבטחה רחבה יותר הכוללת סיסמאות חזקות, MFA ומנהלי סיסמאות.

אם אתם עובדים עם מערכות GNU/Linux או פשוט מודאגים לגבי אבטחת החשבונות שלכם, סביר להניח ששמעתם על... מלח בגיבוב הסיסמהזהו אחד מאותם מושגים שמוזכרים הרבה, אך לעתים קרובות מובנים רק למחצה: זה נשמע טכני, אבל במציאות זה מה שעושה את ההבדל בין מערכת שקל לפרוץ למערכת שעמידה הרבה יותר בפני התקפות.
בקיצור, מלח הוא אלמנט מפתח בהפיכת גיבובי סיסמה לבלתי צפוייםזה עובד על ידי הוספת נתונים אקראיים לפני החלת אלגוריתם ה-hash, כך שגם אם לשני משתמשים יש את אותה סיסמה, התוצאה המאוחסנת במסד הנתונים תהיה שונה. משם, המימוש הספציפי בלינוקס, הקשר שלו עם /etc/shadow, כלים כמו mkpasswd ושיטות עבודה מומלצות מודרניות לאבטחה הם עולם ומלואו בפני עצמו, אותו נחקור בפירוט.
מהו בדיוק ה-salt ב-hash של סיסמה?

בקריפטוגרפיה, א מלח (מלח) הוא מחרוזת תווים אקראית אשר נוסף לסיסמת המשתמש לפני החלת פונקציית גיבוב. המטרה היא שהגיבוב המתקבל יהיה ייחודי גם אם סיסמת הטקסט הרגיל זהה עבור מספר משתמשים.
כאשר משתמש יוצר או משנה את הסיסמה שלו, המערכת יוצרת מלח אקראיהוא משלב אותו עם הסיסמה (לפני, אחרי או בפורמט מסוים בהתאם לסכימה) ומחיל אלגוריתם גיבוב על שילוב זה, כגון SHA-256 o SHA-512הסיסמה אינה נשמרת במסד הנתונים, אלא ב- גיבוב של (סיסמה + מלח), וברוב התוכניות המלח עצמו מאוחסן גם יחד עם החשיש.
טכניקה זו מעבדת רבים מה- טכניקות תקיפה המבוססות על גיבוב מחושב מראש, כמו טבלאות קשת בענן, ומסבך מאוד התקפות מילון וכוח גס בקנה מידה גדול. תוקף כבר לא יכול לנצל את העובדה שמשתמשים מרובים חולקים סיסמה, מכיוון שלכל אחד מהם יהיה גיבוב שונה.
חשוב להבין שמלח אינו סוד בפני עצמו: זו לא סיסמה או מפתח פרטיתפקידו הוא להכניס אקראיות וייחודיות לתהליך הגיבוב. האבטחה עדיין תלויה בשימוש סיסמאות חזקות y אלגוריתמי גיבוב מתאימים, רצוי שתוכנן במיוחד עבור סיסמאות (כגון bcrypt, scrypt, Argon2), למרות שמערכות לינוקס קלאסיות רבות משתמשות בגרסאות של SHA-256 או SHA-512.
איך המלחה של סיסמאות עובדת שלב אחר שלב

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

הסיבה העיקרית לשימוש במלחה היא ש מחזק את אבטחת הסיסמאות המאוחסנות כנגד מגוון רחב של התקפות. אבל כדאי לפרט את היתרונות הספציפיים.
ראשית, המלחה מספקת עמידות בפני התקפות מילוןללא salt, תוקף יכול להכין רשימה ענקית של סיסמאות נפוצות וה-hashes שלהן, ופשוט להשוות אותן למסד הנתונים הגנוב. עם salt ייחודי לכל משתמש, ה-hashes המחושבים מראש הופכים לחסרי תועלת, מכיוון שכל שילוב של סיסמה + salt מייצר ערך שונה.
שנית, השימוש במלח פוגע ביעילות של שולחנות קשת בענןאלו פשוט מסדי נתונים מחושבים מראש של קוד גיבוב עבור סיסמאות פופולריות כדי להאיץ את השחזור. שוב, מכיוון שהתוצאה תלויה ב-salt הספציפי, טבלאות אלו המיועדות לקוד גיבוב ללא מלח הופכות לחסרות תועלת, או לכל הפחות, לא יעילות ביותר.
יתרון ברור נוסף הוא שזה משפר את פרטיות במקרה של דליפהאפילו אם פורץ יקבל גישה לטבלת המשתמשים באמצעות ה-hash וה-salt שלה, הוא לא יוכל לזהות במהירות למי יש את אותה סיסמה כמו לאחרים או לבצע בקלות התקפות המוניות. כל חשבון דורש תשומת לב אישית, דבר שבדרך כלל אינו מעשי בקנה מידה גדול.
יתר על כן, המלחה מוסיפה מורכבות ל... התקפות כוח ברוטבמקום להיות מסוגל לבדוק סיסמה מועמדת מול כל הגיבובים בו זמנית, התוקף נאלץ לקחת בחשבון את ה-salt של כל משתמש, ובכך להכפיל את עומס העבודה הכולל. אם משלבים זאת עם אלגוריתם גיבוב איטי וניתן לפרמטריזציה (כמו bcrypt או Argon2), עלות ההתקפה עולה עוד יותר.
לבסוף, מלח היא טכניקה שמתאימה היטב להתפתחות טכנולוגית. אפילו ככל שציוד המחשבים משתפר ומתקפות חדשות צצות, השילוב של חשיש חזק ומלח ייחודי הוא שומר על רמת קושי גבוהה וניתנת להרחבה: ניתן להגדיל את אורך המלח, לחזק את האלגוריתם, להגדיל את עלות החישוב וכו'.
כיצד לינוקס מיישמת המלחה של סיסמאות (/etc/shadow)
במערכות לינוקס ובגרסאות *NIX אחרות, סיסמאות משתמש אינן מאוחסנות בקובץ /etc/passwd, אלא בקובץ / וכו '/ צלקובץ זה, הנגיש רק למשתמש-על, מאחסן את קוד ה-hash של הסיסמה יחד עם מידע נוסף, והוא המקום שבו נראה בבירור השימוש ב-salt ובאלגוריתם ה-hash.
לשורות בקובץ /etc/shadow יש מבנה דומה ל:
משתמש:$id$sal$hash:שדות_נוספים…
הסמל $ הפרידו את החלקים השונים. החלק הראשון אחרי שם המשתמש מציין את סוג אלגוריתם בשימוש. לדוגמה, $ 1 $ בדרך כלל מייצג MD5, $ 5 $ SHA-256 ו- $ 6 $ SHA-512, שהוא האלגוריתם הנפוץ ביותר בהפצות מודרניות משום שהוא מציע אבטחה רבה יותר מאשר סכמות ישנות יותר המבוססות על DES או MD5.
לאחר הופעת מזהה האלגוריתם, מלחואז ה- ה-hash שנוצרכל זה נמצא באותו שדה. כאשר סיסמה מאומתת, המערכת קוראת את המזהה הזה, ה-salt, מפעילה את האלגוריתם המתאים לסיסמה שהוזנה ומשווה את ה-hash המחושב לזה המאוחסן.
אם ברצונך לבדוק במהירות אילו משתמשים מחזיקים סיסמאות מוצפנות ואיזה אלגוריתם נמצא בשימוש, תוכל להשתמש בפקודה כמו grep '\$' /etc/shadowבהקשר זה, סימן הדולר ($) משמש לאיתור שורות עם גיבוב (hash) בפורמט מודרני. יש להשתמש בקו נטוי הפוך (backs slash) מהסמל מכיוון שבביטויים רגולריים הוא מסמל "סוף שורה".
חשבונות ללא סיסמה או חשבונות נעולים בדרך כלל מציגים ערך כזה בשדה זה. ! o * במקום גיבוב עם דולרים, מה שמצביע על כך שלא ניתן לאמת אותו באמצעות סיסמה סטנדרטית. מבנה זה מבהיר דבר אחד: לינוקס משלבת salting בפורמט שלה אחסון סיסמאות מקורי.
ההבדל בין גיבוב סיסמאות (hashing) למלח (salting)
חשוב להבחין בבירור בין שני מושגים שלפעמים מתערבבים: has has y המלחהגיבוב סיסמה הוא תהליך שבו סיסמה הופכת לערך בלתי מזוהה באמצעות אלגוריתם חד-כיווני. השרת לעולם לא צריך לדעת את הסיסמה המקורית, רק כדי לוודא שהמשתמש יודע את הסיסמה הנכונה מכיוון שהוא מייצר את אותו גיבוב.
הבעיה היא שאם שתי סיסמאות זהות, חשיש לא מלוח יהיה גם הוא זההזה מאפשר לתוקף להשוות ולקבץ משתמשים לפי סיסמה או להשתמש בטבלאות מחושבות מראש. יתר על כן, אם אלגוריתם ה-hash מהיר ומתוכנן לשלמות נתונים (כגון SHA-256 פשוט), הוא הופך לפגיע יותר להתקפות Brute-Force מסיביות.
המלחה באה בדיוק כדי לפתור את החולשה הזו: מדובר בערך הוסף נתונים אקראיים לסיסמה לפני ביצוע גיבוב (hashing). התוצאה היא שגם אם שני משתמשים יבחרו ב-"casa" כסיסמה שלהם, הגיבוב במסד הנתונים יהיה שונה לחלוטין, מכיוון שאחד יכיל, למשל, "casa+7Ko#" והשני "casa8p?M" כמחרוזת pre-hash.
לכן, גיבוב ומלחה אינם מתחרים, אלא משלימים זה את זה. גיבוב מספק את מאפיין חד-כיווניות וקלות אימות; המלח מספק ייחודיות ועמידות בפני התקפות מסיביותיישום של אחסון סיסמאות מאובטח משלב את שתי הטכניקות, באופן אידיאלי באמצעות אלגוריתם שתוכנן למטרה זו, עם עלות ניתנת להגדרה.
שימוש ב-salt בלינוקס עם mkpasswd
בסביבות גנו/לינוקס ובמערכות אחרות יוניקסדרך מעשית מאוד להתנסות בהמלחה היא הכלי mkpasswdפקודה זו משמשת ליצירת סיסמאות מוצפנות בצורה מאובטחת, ומשולב בדרך כלל בתהליכי יצירת משתמשים, סקריפטים של ניהול וכו'.
התחביר הבסיסי של mkpasswd מאפשר לך לציין את הסיסמה שתוצפן וסדרה של אפשרויות כגון סוג האלגוריתם (לדוגמה, des, md5, sha-256, sha-512) באמצעות האפשרות -mבמערכות מודרניות, הדבר הנבון לעשות הוא לבחור ב SHA-512 לכל הפחות, או באמצעות תוכניות חזקות אף יותר אם ההפצה תומכת בהן.
האפשרות המעניינת במיוחד בהקשר של המלחה היא -Sמאפשר להוסיף מלח לסיסמה לפני הצפנתה. אם לא צוין באופן ידני, mkpasswd עשוי ליצור מלח אקראי בכל ביצועכך שגם באמצעות אותה סיסמת כניסה, ה-hash המתקבל שונה בכל פעם.
ניתן לאמת זאת בקלות: אם תצפין את "password123" מספר פעמים עם mkpasswd, תוך שימוש ב-SHA-512 וב-salt אקראי, תקבלו גיבובים שונים לחלוטין. עם זאת, אם תעבירו את אותו ערך salt באמצעות -S, הגיבוב תמיד יהיה זהה, מכיוון ששילוב הסיסמה + salt לא משתנה.
בזכות הכלי הזה, זה מאוד קל הכנת סיסמאות מוצפנות עם מלח כדי להוסיף לקבצי תצורה, לנהל משתמשים באופן ידני, או לבדוק התנהגות salting מבלי שיהיה צורך לתכנת דבר.
כותב נלהב על עולם הבתים והטכנולוגיה בכלל. אני אוהב לחלוק את הידע שלי באמצעות כתיבה, וזה מה שאעשה בבלוג הזה, אראה לכם את כל הדברים הכי מעניינים על גאדג'טים, תוכנה, חומרה, טרנדים טכנולוגיים ועוד. המטרה שלי היא לעזור לך לנווט בעולם הדיגיטלי בצורה פשוטה ומשעשעת.