שלח תשובה

זירת השאלות

1 תשובות

  1. n0p הגיב:

    אני לא ממליץ להשתמש בהצפנות פשוטות, אבל זה תלוי מאוד בתוכן ה- Plaintext (הטקסט שלפני ההצפנה).
    אם אתה מצפין סיסמאות לתוך דאטאבייס (דוגמה: יש לך מערכת כניסה לאתר שמשתמשת בשם משתמש וסיסמה) אני חייב לציין פיתרון שמצאתי לפני כמה שנים ברשת ומאוד אהבתי (סליחה, אני לא זוכר איפה…): לכתוב את ה- Hash של הסיסמה לדאטאבייס במקום סיסמה מוצפנת.
    Hash הוא סוג אלגוריתם, שמטרתו לשמור "טביעת אצבע" של הטקסט. אם אתה משתמש ב- PHP, וודאי תבין את הקוד הבא:
    $first = md5("password");
    $second = md5("password");
    if ($first == $second) {
      echo "שווה";
    } else {
      echo "לא שווה";
    }

    הפונקציה md5() היא פונקציה שהקלט שלה הוא טקסט והפלט שלה הוא MD5 של אותו הטקסט (MD5 הוא סוג Hash, למרות ש- SHA-256 ודומיו נחשבים לבטוחים יותר).
    התוצאה של הקוד הזה הוא "לא שווה", דבר שלא יהיה נכון בכל הצפנה. חלק מההצפנות משתמשות ב- CBC Block לשיפור האבטחה (ההצפנה בוחרת תוספת למפתח של הצפנה בצורה רנדומאלית. חיפוש בגוגל יכול לעזור), ושימוש באותו מפתח, אותו ה- Plaintext ואותה ההצפנה יניב Ciphertext (טקסט מוצפן) שונה.
    בשטיה שהזכרתי קודם, כשהמשתמש נרשם לאתר הסיסמה שבחר לא נשמרת בדאטאבייס, אלא אותו פלט של ה-Hash. כשהמשתמש רוצה להתחבר לאתר, האפלקציה בודקת עם הפלט של אותו Hash שווה לתא המתאים בדאטאבייס.
    בצורה פשוטה ביותר, ב- PHP:
    function register($username, $password) {
      // After you connected the database…
      $query = mysql_query("INSERT INTO users (user, pass) VALUES (‘" . $username . "’, ‘" . md5($password) . ");");
      if ($query) {
        echo "You are registered.";
      } else {
        echo "Error: the sql query failed. Please webmaster@somewhere.com";
      }
      // Don’t forget to close the connection!
    }

    function check_login($username, $password) {
      // After you connected the database…
      $query = mysql_query("SELECT * FROM users WHERE user = ‘" . $username . "’ AND pass = ‘" . md5($password) . "’;";
      if (mysql_num_rows($query) > 0) {
        // Welcome! You’re in.
      } else {
        // Nope.
      }
      // Close the connection
    }

    דרך אגב, היתרונות המרכזיים בשיטה זו הם שהשיטה היא פשוטה לשימוש (בקוד), ואם פורצים לדאטאבייס אי אפשר לדעת את הסיסמה. אם כבר מדברים על אבטחה, ניתן לשים לב שדיברתי רק על "טביעת אצבע" של הטקסט, ולא הצפנה באמת. זאת אומרת, שלכמה סיסמאות תיהיה אותה "טביעת אצבע" – דבר שעלול להווה סיכון. אין מה לדאוג – הסבירות שלכמה סיסמאות תיהיה אותה "טביעת אצבע" היא קטנה מאוד. אפשר להשתמש בשיטה הזאת ללא חשש. אם בכל זאת רוצים אבטחה חזקה יותר, מומלץ להשתמש ב- SHA-512 (שמחזיר "טביעת אצבע" באורך של 512 תווים).

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

    מידע נוסף:
    http://csrc.ncsl.nist.gov/CryptoToolkit/ – האתר של ממשלת ארה"ב בנושא.
    http://www.zone-h.com/en/download/category=33 – כולל כמה מאמרים בנושא. לצערי יש שם כמה הצפנות פשוטות מידי, כך שמומלץ להיזהר לפני שמשתמשים בהם.

    מקווה שעזרתי

שלח תשובה