שאלה על אבטחה

ד ו ב י ר

New member
שאלה על אבטחה

ב"ה שלום קראתי עכשיו מאמר על אבטחה והנושא היה forms authentication. אחד מהדברים שהיה כתוב שם הוא, שצריך להצפין את הסיסמא. אני מצרף קישור, אם תפתחו את הקישור, ותגללו קצת למטה, תראו קטע קטן באנגלית שכותרתו היא: Encrypting passwords. יש לי כמה שאלות: 1) האם הכוונה היא שצריך שהסיסמאות עצמם יהיו מוצפנות? לדוגמא אצלי השמות משתמשים והסיסמאות שמורות בטבלה ב database, האם צריך לשים בתוך ה DB את הסיסמא כמו שהיא במצב מוצפן? 2) אם כן, איך אני יכול לדעת מהי הסיסמא אחרי ה hashing? 3) האם יש צורך, והאם ניתן לעשות, שהסיסמא תעבור ברשת מהלקוח לשרת, בצורה מוצפנת, ואז אצלי אני פותח את ההצפנה ובודק אם שם שמשתמש והסיסמא תואמים? נראה לי שיש לי איזה בילבול במה שקשור לנושא הזה, אז אם אתם יכולים לעזור לי, ולהבהיר לי את הדבר הזה, אני מאוד אודה לכם. תודה רבה מראש
 

adam222

New member
/////////////////

1. כן 2. אתה מעביר את הסטרינג שנניח הקישו את תהליך ה-Hashing ומשווה בינו לבין המוצפן ב-DB.
 

ד ו ב י ר

New member
איך אני יודע את הסיסמא המוצפנת?

הרי בתוך ה DB צריך להיות הסיסמא המוצפנת, אז איך אני יודע אותה?
 

tberger

New member
סיסמאות

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

ד ו ב י ר

New member
את זה אני יודע. הבעיה שלי היא אחרת

אני עכשיו רוצה להכניס מספר משתמשים למערכת בצורה ידנית. (זאת אומרת, להכנס ל DB, לטבלת המשתמשים, ולהכניס שם כמה שורות) נניח שהסיסמא של מישהו היא: 1234. איך אני יודע מה לרשום ב DB? תודה רבה מראש על כל העזרה
 

tberger

New member
איך אתה יודע שהסיסמא נכונה?

בתוכנית שלך אתה צריך ליצור מנגנון HASH כדי לבדוק שהסיסמא נכונה לעומת המאוחסן ב DB. כ"כ אתה צריך להשתמש באותו מנגנון כדי לרשום משתשמים חדשים ולאחסן את ה HASH שנוצר ב DB. אם אתה רוצה "ידנית" ולא דרך התוכנה לרשום משתמש אתה יכול להשתמש באותה מתודה כדי ליצור את ה HASH. אני לא מבין בדיוק מה הבעיה ומה אתה רוצה לעשות.
 

ד ו ב י ר

New member
שאלה קטנה

איך רושמים את המשפט הבא שרשום ב #C, ב VB.NET?
if (HttpContext.Current.User.Identity is FormsIdentity)​
תודה רבה מראש
 
קבל מבנה של IF

If conditions Then בלה בלה Else בלה בלה בלה End If​
כמובן אפשר בלי ELSE ויש לזה עוד כל מיני הרכבים שונים, אבל זה העיקרון.
 

ד ו ב י ר

New member
זאת לא היתה הכוונה של השאלה שלי.

מה שהתכוונתי לשאול הוא, איך אפשר לשאול ב VB.NET, את השאלה: האם משתנה הוא מטיפוס מסויים? תודה רבה מראש
 

Zeliran

New member
../images/Emo41.gifנצל"ש

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

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

pagis

New member
הצפנת מידע ב DB

תתבצע ע"י אחסון ה HASH, כתבתי על זה לא מזמן בפורום, חפש ב FAQ. בכל מקרה, השיטה של אחסון סיסמה מוצפנת ב RSA כמו שהציעו כאן היא שיטה גרועה מכיוון ש RSA הוא אלגריתם קל מאוד לפריצה. במידה ואתה מעוניין לאפשר אפשרות של שחזור סיסמה (אם אתה עובד עם HASH אתה מאפשר רק יצירת סיסמה חדשה) המתדולוגיה הנכונה היא הצפנה סימטרית של הסיסמה. חשוב להדגיש שהמטרה היחידה להצפנה לא סימטרית היא החלפת מפתחות סימטרים זמניים לשימוש OVER THE WIRE. השיטה הבטוחה ביותר (בשמירה על נגישות) סבירה למשתמש) להצפנת סיסמאות ב DB היא SALTED HASHED PASSWORDS, ואתה יכל למצוא תאור כולל דוגמאות קוד ב FAQ. בעיני אם אתה לא באמת מאבטח מערכת אז למה לאבטח אותה בכלל, כלומר, אם אתה חשוף להתקפת BRUT FORCE אז למה בכלל לטרוח.
 

ד ו ב י ר

New member
עדיין הבעיה שלי לא פתורה

ושאלתי על זה מקודם. בצורה הזו, אני לא יודע איך לאחסן משתמשים ישירות לתוך ה DB (זאת אומרת, לפתוח את access ולהזין משתמשים לתוך האטבלאות), כי אני לא יודע מה תהיה הסיסמא אחרי הצפנה. חשבתי על שתי אפשרויות: 1) או להשתמש עם הפונקציות של ההצפנה ולבדוק מה הפונקציות פולטות עבור סיסמא מסויימת, ואת התוצאה הזאת אני מאחסן ב DB. 2) להגדיר משתמש אחד שהוא יהיה מנהל המערכת (והסיסמא שלו לא תהיה מוצפנת), ואז מתוך האתר להגדיר עוד מנהל מערכת (והסיסמא שלו תהיה מוצפנת), ולמחוק את הראשון. אח"כ תמיד להזין משתמשים מתוך האתר. מה אתם אומרים על האפשרויות האלו? תודה מראש
 

pagis

New member
אתה בעצם שואל

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

ד ו ב י ר

New member
לא. אני בונה איזה פורטל עם

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

DiscoGamba

New member
שאלה

למה זה מועיל שאתה מבצע hashing של הסיסמא ללא ה salt ואחרי זה מבצע את אותה פעולה עם ה salt ? תפקידו של ה salt הוא לא "ליעל" או "לשפר" את האלגוריטם עצמו אלה להוסיף ערך רנדומלי לסיסמא לפני ביצוע ה hashing על מנת לצמצם את האפשרות של ביצוע מתקפת dictionary כנגד ה hash. אם כך אז פעולת ה hashing הראשונה שאתה מבצע(ללא הוספת ה salt) נראת לי מיותרת.
 
למעלה