אלגוריתם הצפנת סיסמה SHA בשפת PHP

אלגוריתם הצפנת סיסמה SHA בשפת PHP

  • פרסומת

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

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

נא להכיר: פונקציית SHA, הפונקצייה שאי אפשר לפרוץ.

  • SHA הינם ראשי התיבות של Secure Hash Algorithm.
  • פונקציית ה-SHA הינה אלגוריתם.
  • היא משמשת להצפנת קודים וסיסמאות.
  • סיסמא שהוצפנה עם SHA, לא ניתן להפוך בחזרה.

איך הפונקצייה עובדת?

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

<?php 
$str = 'Hello'; 
sha1($str);

נקבל את הפלט הבא:
aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d

שימוש בפונקציית ההצפנה SHA

דוגמה בסיסית לשימוש בפונקצייה היא בצורה הבאה

<?php
$password = sha1('Hello');    // זו הסיסמא ששמורה במסד הנתונים
$user_input = 'Hello';    // זו הסיסמא שהמשתמש מזין
if($password == (sha1($user_input))) {    // כאן נבדקת ההתאמה בין שתי הסיסמאות
    echo 'Passwords match!';
}
else echo 'Passwords don\'t match!';

בדוגמה הנ"ל, אם המשתמש יזין סיסמא נכונה, הפונקציה תציג את הפלט הבא:
Passwords match!
במקרה של סיסמא לא נכונה, יתקבל הפלט הבא:
Passwords don't match!

האם באמת לא ניתן לפרוץ את הפונקצייה?

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

למה לא ניתן להחזיר סיסמאות שהוצפנו בעזרת SHA?

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

בדיקת איכות הסיסמה

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