Що таке сіль і хешування паролів із погляду розробника?
Хешування паролів є фундаментальною вимогою безпеки під час проєктування будь-яких вебдодатків та баз даних. Коли користувач реєструється в системі, додаток не повинен зберігати його оригінальний пароль у відкритому вигляді. Замість цього використовується одностороння математична функція, яка перетворює текстовий рядок на унікальний набір символів фіксованої довжини. Цей процес називається хешуванням, і повернути його у вихідний рядок теоретично неможливо.
Однак традиційне хешування сьогодні вразливе до атак із використанням заздалегідь заготовлених таблиць можливих комбінацій, відомих як райдужні таблиці. Щоб захистити дані користувачів від таких атак, розробники застосовують додавання солі. Сіль є випадковою послідовністю символів, яка унікальним чином генерується для кожного конкретного користувача та об'єднується з його паролем перед обчисленням хешу.
У результаті два різних користувачі, які встановили однаковий пароль, отримають абсолютно різні хеші в базі даних через унікальність солі. Для реалізації цього захисту не можна використовувати звичайні швидкі алгоритми на кшталт MD5 чи SHA-256, оскільки сучасні графічні процесори здатні перебирати їх мільярди разів на секунду. Замість них слід застосовувати спеціалізовані повільні функції формування ключів і хешування.
До таких рекомендованих алгоритмів належать Argon2, bcrypt та PBKDF2. Вони спеціально сповільнюють процес обчислення хешу, що робить брутфорс-атаки економічно невигідними для зловмисників. Під час проєктування бази даних розробнику також необхідно закладати достатній обсяг поля для зберігання самого хешу, параметрів алгоритму та згенерованої солі.
Правильна реалізація зберігання облікових даних виглядає таким чином.