Php парола хеширане

Този раздел обяснява причините за хеширане на пароли за целите на сигурността, както и ефективни методи за хеширане.

Защо трябва да хеш пароли в молбата си?

Чрез използването на хеширане алгоритъм за пароли на потребителите, преди да ги съхранява в базата данни, трябва да бъде пречка за решаване на първоначалната си парола на нападателя си база данни, като същевременно се запази възможността за сравняване на получената хеш към оригиналната парола.

Важно е да се отбележи обаче, че хеширане на пароли само ги предпазва от компромиси в магазина си, но не непременно от намесата на злонамерен код в молбата Ви.

Защо популярен хеширане функции като md5 () и sha1 () неподходящи за пароли?

Такива алгоритми за хешване като MD5, SHA1 и SHA256 са проектирани много бързо и ефективно. С модерни технологии и оборудване, вече е съвсем лесно да разберете резултатите от тези алгоритми, като "груба сила", за да се определи първоначалната входните данни.

Заради скоростта, с която съвременните компютри могат да "рисуват" тези хеширане алгоритми, много професионална компютърна сигурност, е строго не се препоръчва да ги използват за парола хеширане.

Ако популярни функции хеширане не се побират, как мога след това трябва да хеширате паролите си?

Има две важни съображения при хеширане на пароли: Това е цената на компютърни и сол. Най-високата цена на изчислителна хеширане алгоритъм, колкото по-дълго е необходимо, за да пробие в неговия метод оттегляне "груба сила".

Друга възможност е функцията на крипта (). който поддържа множество хеш алгоритми в PHP 5.3 и по-късно. С тази функция, можете да бъдете сигурни, че избрания от вас алгоритъм е на разположение като PHP съдържа своя собствена реализация на всеки поддържан алгоритъм, дори и ако някои от тях не се поддържат от вашата система.

препоръчителна Blowfish алгоритъм, който се използва също по подразбиране в хеширане на паролата API, тъй като това значително по-сложните изчисления от SHA1 или MD5, докато все още гъвкави пароли хеширане.

Имайте предвид, че ако използвате функцията за крипта (), за да се провери на паролата, ще трябва да се предупреждават срещу атаки с течение на времето, с помощта на сравняване на низове, която се постоянно време. Нито PHP == и ===. не функция strcmp () не са. password_verify функцията () просто прави това, което ви трябва. Препоръчително е да използвате вградената парола API хеширане. ако има такава възможност.

Криптографска сол е данните, които се използват в процеса на хеширане да се предотврати възможността за решаване на първоначалното въвеждане чрез хеширане търсене списък резултат предварително изчислени входни хеш двойки, известни също като "преливащи" маса.

В по-прости думи, солта - това е част от допълнителните данни, които правят вашия хашиш е много по-устойчиви на напукване. Има много онлайн услуги, които предоставят подробни списъци на предварително изчислена хешове с оригиналния си вход. Използването на сол прави търсенето на получената хеш в списък с малко вероятно или дори невъзможно.

password_hash () генерира случаен сол, ако тя не се предава, а често е най-добрият и най-безопасният избор.

Как трябва да се съхранява тяхната сол?

При използване password_hash функция () или крипта (). връщане стойност вече съдържа сол като част от създадената хеш. Тази стойност трябва да се съхранява, както е в базата от данни, тъй като тя съдържа информация за хеширане функция, която е била използвана, и могат да бъдат директно прехвърлени на password_verify () или криптата () с проверка на паролата.

Таблицата по-долу показва формата на върнатите стойности на функции крипта () или password_hash (). Както можете да видите, те съдържат пълна информация за алгоритъма и сол, необходими за бъдещата проверка парола.

sha1 във връзка с една или повече стойности на солта не е необходимо да бъде толкова несигурен както по-горе прави, за да бъде. например на Fossil ВСС създава sha1 парола хеш базиран на явен текст паролата на потребителя в съчетание с името на потребителя и споделена тайна, известна само на конкретния източник хранилището, за който е зададен от потребителя изправи.