Колко бързо се разбиват пароли: хеширане и защита на паролите

Колко време отнема разбиването на пароли при различни хеширащи алгоритми, защо MD5 и SHA-1 не са подходящи, как работят речниковите и хибридните атаки и как да защитите паролите на служители и клиенти.

OfSec 3 мин. четене

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

Скоростта зависи от алгоритъма

Една съвременна видеокарта проверява над 100 милиарда MD5 или NTLM хеша в секунда. Тези алгоритми са създадени да бъдат бързи, затова не са подходящи за пароли. Алгоритмите за пароли (bcrypt, scrypt, Argon2) са нарочно бавни: същата видеокарта проверява само няколко хиляди bcrypt хеша в секунда при настройка (cost) 10.

Ориентировъчно време за пълно претърсване с една видеокарта:

Парола MD5 или NTLM bcrypt, cost 10
8 знака: малки и главни букви и цифри под един час над 1000 години
12 малки букви около 10 дни стотици хиляди години

Нападателите използват много видеокарти едновременно, затова реалното време е по-кратко. При бърз алгоритъм паролите с осем знака падат за минути, а при бавен алгоритъм дългата случайна парола остава недостъпна на практика.

Таблицата важи само за случайни пароли

Пълното претърсване е последната възможност. Първо се пробват речникови атаки със списъци от милиарди пароли, изтекли при предишни пробиви. Следват хибридните атаки, които комбинират думи с правила: главна първа буква, година, удивителен знак, замяна на „a“ с „@“. Парола като Sofia2024! изглежда сложна, но се намира бързо дори при bcrypt, защото е сред първите кандидати на всеки списък с правила.

Какво да направят потребителите

  • уникална парола за всяка услуга, генерирана и пазена в мениджър на пароли;
  • дълга парола или фраза от няколко случайни думи там, където трябва да се запомни, например за компютъра и за мениджъра на пароли;
  • многофакторна автентикация, за да не е достатъчна само разбитата парола за вход;
  • проверка в haveibeenpwned.com дали служебните адреси са засегнати от известни изтичания.

Какво да направят разработчиците

  1. Хеширайте паролите с Argon2id. Ако той не е наличен, използвайте scrypt или bcrypt с cost поне 10. MD5, SHA-1 и еднократният SHA-256 не са подходящи.
  2. Всяка парола получава уникална случайна сол. Съвременните библиотеки го правят автоматично.
  3. Проверявайте новите пароли срещу списъци с изтекли пароли и изисквайте дължина вместо правила за специални символи. Такива са и препоръките на NIST SP 800-63B, който не препоръчва и задължителна периодична смяна.
  4. Ограничете броя на опитите за вход и включете многофакторна автентикация поне за администраторите.
  5. Ако в системата има стари MD5 или SHA-1 хешове, хеширайте паролата с новия алгоритъм при следващия успешен вход на потребителя, а за неактивните профили изисквайте смяна на паролата.
ПаролиУеб приложения