PracticU

גיבוב האשינג של סיסמאות משתמשים - Hashing User Password

בלי כתוביותעם כתוביות
PracticU › קורס NodeJS › גיבוב האשינג של סיסמאות משתמשים - Hashing User Password
מילון מושגים:
האש - פונקציה שממירה מידע לערך קצר באורך קבוע. שינוי קטן בקלט משנה את התוצאה, והיא חד-כיוונית.
הצפנה - המרת מידע לצורה בלתי קריאה בעזרת מפתח, כך שרק מי שמחזיק במפתח המתאים יכול לפענח ולקרוא אותו.
Node.js - סביבת ריצה שמאפשרת להריץ קוד JavaScript מחוץ לדפדפן, בעיקר בצד השרת.
אלגוריתם - רצף מוגדר של צעדים לפתרון בעיה או לביצוע משימה, שאפשר לממש בקוד.
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.
סקריפט - קובץ המכיל רצף פקודות שמבוצעות על ידי מפרש, לרוב כדי להפוך משימות לאוטומטיות.
SHA - משפחת פונקציות האש קריפטוגרפיות, המשמשות לאימות שלמות מידע ולחתימות דיגיטליות.
MD5 - פונקציית האש ותיקה שמפיקה ערך באורך קבוע. נחשבת לא בטוחה לשימושים קריפטוגרפיים.

גיבוב האשינג של סיסמאות משתמשים - Hashing User Password
סיסמאות ב-plain text בטבלת המשתמשים הן בעיה, כי כל מי שיש לו גישה למסד הנתונים רואה אותן. ההרצאה מסבירה למה הצפנה אינה הפתרון, מה זה hashing, ומיישמת אותו ב-Node.js.
הרעיון
1. למה לא הצפנה: אם מצפינים ומפענחים, מי שמכיר את האלגוריתם בתוכנית יכול לפענח בעצמו. לכן לסיסמאות משתמשים ב-hashing (גיבוב) ולא ב-encryption.
2. מה זה hash: אלגוריתם שהופך טקסט למחרוזת מגובבת שאי אפשר לחזור ממנה למקור.
3. שלוש תכונות: אותו קלט עם אותו אלגוריתם נותן תמיד אותו hash. קלט אחר לא נותן אותו hash. ואין דרך לחזור אחורה.
4. איך מתחברים בלי לפענח: בהרשמה שומרים את ה-hash של הסיסמה. ב-login מבצעים hash לסיסמה שהוזנה ומשווים אותו ל-hash השמור.
מימוש
1. פונקציית hash: בתיקיית helpers יוצרים hash.js שמשתמש במודול crypto, עם פונקציה שמקבלת סיסמה ומחזירה crypto.createHash("sha512").update(password).digest("hex"). חושפים אותה ב-module.exports.
2. בהרשמה: בלוגיקת ה-auth מבצעים hash ל-user.password לפני השמירה.
3. ב-login: מבצעים hash ל-credentials.password לפני השאילתה.
4. מסד הנתונים: הסיסמאות הקיימות בטבלה צריכות להיות hash, ולכן מריצים סקריפט SQL מוכן שמחליף את ערכי הטבלאות. לאחר הרצה מחדש של האפליקציה, ה-login עובד, וגם משתמש חדש (Kermit) נרשם. בטבלה מופיע ה-hash הארוך שלו, וה-login עם הסיסמה המקורית מצליח.
פקודות והגדרות
- crypto.createHash("sha512") ואחריו update ו-digest("hex"), כאשר SHA-512 הוא האלגוריתם החזק שנבחר, ו-SHA-1 נחשב ישן ולא בטוח.
- אלגוריתמים שהוזכרו: SHA, MD5, HMAC.
אפשר עכשיו לשמור סיסמאות כ-hash ולאמת login על ידי השוואת ה-hash.
השיעור הבא בקורס: הסבר על Salting בסיסמה

פרקי ההרצאה: גיבוב האשינג של סיסמאות משתמשים - Hashing User Password

  1. 00:00

    סיסמאות גלויות בטבלת המשתמשים

  2. 00:42

    הסכנה בסיסמאות plain text

  3. 01:36

    הצפנה ופענוח של סיסמה

  4. 03:07

    למה לא מצפינים סיסמאות

  5. 03:51

    מהו hashing

  6. 05:08

    אלגוריתמי SHA ו-MD5 ותכונותיהם

  7. 06:27

    השוואת hash בהרשמה ובכניסה

  8. 07:24

    פונקציית hash בתיקיית helpers

תמלול ההרצאה: גיבוב האשינג של סיסמאות משתמשים - Hashing User Password

הטקסט המלא של הדקות הראשונות בהרצאה «גיבוב האשינג של סיסמאות משתמשים - Hashing User Password» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:04

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

  2. 00:16

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

  3. 00:42

    מה הבעיה? הבעיה שהסיסמה גלויה בדאטאבייס. למה זה בעצם בעיה? כי אנחנו לא יכולים לדעת למי בעצם בחברה, בעסק, בשרת, אנשי ה-IT, אנשים שמסתובבים שם, יש גישה לדאטאבייס.

  4. 01:02

    סיסמה לא אמורה להיות גלויה בשום מקום, ואנחנו רואים כאן את הסיסמה as is, זה נקרא plain text. עכשיו, יכול להיות שהבחור שאחראי על ה-IT הוא לא כזה אתי ורואה את הסיסמה ואת השם משתמש שלנו ויכול להיכנס במקומנו.

  5. 01:23

    יכול להיות שמישהו במקרה רואה את זה, יכול להיות שהוא רואה שיש לנו גם אימייל ואולי הסיסמה זהה לאימייל ומצליח לפרוץ לנו לאימייל. אנחנו לא רוצים שהסיסמה תהיה as is plain text בדטאבייס, אסור אף פעם שסיסמאות יהיו plain text בדאטאבייס.

  6. 01:40

    אז איך אנחנו פותרים את זה? אז במבט ראשון נראה שכל מה שאנחנו צריכים לעשות זה להצפין את הסיסמה ואז מתישהו לפענח אותה. כלומר, נראה כאילו שאם היוזר מבצע את פעולת ה-register, אז היוזר מכניס לנו סיסמה, לדוגמה הוא אומר אני רוצה את הסיסמה 1, 2, 3, 4, למרות שהיא לא כזאת חזקה, אבל נדבר

  7. 02:05

    על זה בהמשך. ואנחנו מצפינים אותה ואנחנו הופכים אותה כמובן כתלות באלגוריתם ההצפנה ל-X 8 כוכבית כוכבית ודולר.

  8. 02:21

    נניח שזה ההצפנה של 1, 2, 3, 4. זה היה בתהליך הרג'יסטריישן, איך שהוא נכנס כיוזר חדש. ואז כאשר היוזר מבצע לוג אין, מה אנחנו צריכים לעשות?

  9. 02:34

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

  10. 03:03

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

  11. 03:18

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

  12. 03:41

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

  13. 04:16

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

  14. 04:28

    אז אם נניח אנחנו לוקחים ומבצעים האשינג, פה חסר לי h כמובן, על 1, 2, 3, 4, אז יכול להיות שהאלגוריתם ימצא לנו איזה מכרוזת אחרת, לדוגמה r, 6, דולר, שטרודל, P, Q ועוד כמה ערכים.

  15. 04:50

    זה לא חייב להיות באותו אורך, כן? בוא נניח שזה ההאשינג של 1, 2, 3, 4 לפי איזשהו אלגוריתם האשינג מסוים. אי אפשר לקחת את הדבר הזה ולהחזיר אותו ל-1, 2, 3, 4, אבל אנחנו צריכים להבין כמה עקרונות מעניינים בנוגע לאלגוריתם הזה של האשינג.

  16. 05:15

    עיקרון ראשון, אם אנחנו משתמשים באלגוריתם, יש כל מיני אלגוריתמי האשינג, אם אנחנו לוקחים אלגוריתם ספציפי, לדוגמה יש אלגוריתם שנקרא SHA-1, יש כל מיני מספרים, 256, יש SHA-512, יש MD-5, יש כל מיני אלגוריתמי האשינג,

  17. 05:40

    אם אנחנו לוקחים איזשהו אלגוריתם ספציפי, ולוקחים את המספר 1, 2, 3, 4 ועושים לו האשינג, אז פעם הבאה שניקח 1, 2, 3, 4 וכמובן נשתמש באותו אלגוריתם אנחנו נקבל תמיד את אותה המחרוזת של ה-hash.

  18. 05:56

    זאת תכונה ראשונה של השינג. תכונה שנייה, אף מחרוזת אחרת עד גודל מסוים לא תיתן לנו את אותו ה-hashing, זאת אומרת שזה ייחודי.

  19. 06:09

    אז אם למישהו נתן 1, 2, 3, 4 ויצא את זה, רק 1, 2, 3, 4 תחזיר לנו את ה-hashing הזה. זאת תכונה שנייה שיש. ותכונה שלישית, כאמור, נוסחה לוגית שמצליחה להחזיר מפה לפה אוקיי זה בעצם הפטנט שיש כאן אז איך עכשיו אם אי אפשר לפענח את זה אנחנו יכולים להשתמש בהאשינג כי אנחנו עושים את ההאש ברג'יסטריישן בואו ניקח את הרג'יסטר

  20. 06:38

    מבצעים את פעולת ההאשינג ואז היוזר מכניס בתהליך ההרשמה 1234 אנחנו מייצרים לו את זה ושומרים לו בדטאביס הוא נכנס ללוגין מחר מחרתיים בעוד חודש מכניס 1, 2, 3, 4 כי זאת הסיסמה שלו.

  21. 06:54

    איך אנחנו עכשיו לוקחים את זה ומפענחים כמו שעשינו פה בכדי לקבל בחזרה את הסיסמה אנחנו לא יכולים אבל מה אנחנו כן יכולים לעשות? שוב פעם האשינג ואם הוא נתן לנו את אותה מחוזת אנחנו בדיוק נקבל את אותו האש ואז מה שאנחנו צריכים לעשות זה להשוות בין ההאשים ההאש בתהליך ה-registration עם ההאש בתהליך ה-login

  22. 07:21

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

  23. 07:42

    בואו ניקח כאן את, אנחנו בעצם רוצים, אנחנו רוצים את rip, אם אני זוכר נכון,

לקורס המלא: קורס NodeJS אונליין בעברית

ההרצאה הקודמת: קביעת סיסמאות עבור Setting a Password to MySQL

ההרצאה הבאה: הסבר על Salting בסיסמה

הרצאות קשורות מקורסים אחרים

  • User Controls
  • USER MODULE
  • change admin password
  • משתמשים מקומיים - חלק 1

קורסים נוספים במסלול

  • קורס יסודות HTML - בניית אתר אינטרנט פשוט
  • קורס CSS 3 - בדגש על Flex & Grid
  • קורס Javascript כולל JQuery
  • קורס ג'אווה סקריפט מעשי - JavaScript
  • קורס TypeScript
  • קורס ריאקט - React