👨💻 Что такое хэширование пароля?
Участвую в конкурсе «Продолжи мысль» от @systems_education.
Пароли пользователей хранятся в базе данных не в открытом виде. Их принято хэшировать. Так, злоумышленник, получив доступ к БД, все равно не узнает точную комбинацию символов которую вводит пользователь.
Шифрование и хэширование — разные методы защиты информации. Первый подразумевает наличие ключа, которым можно расшифровать данные. Второй — необратимый процесс.
❌ Необратимый, потому что алгоритма дехэширования нет. Символы пароля и хэша не маппятся друг с другом один-в-один. Чтобы "дехэшировать" нужно банально подобрать хэш, но число вариантов для перебора будет огромно. Так называемые "радужные таблицы" позволяют его подбирать более оптимальным способом, из-за чего выясняется, что некоторые алгоритмы (например, MD5 и SHA-1) не в состоянии надежно хэшировать данные, а потому, их не рекомендуют использовать для защиты паролей. Алгоритмы отличаются друг от друга математическими операциями, которые не должны порождать коллизий, то есть не генерировать одинаковый хэш для разных входных данных.
🧂Чтобы обеспечить дополнительную защиту, хэш-функции усложняют пароль, добавляя так называемую "соль" (salt), т.е. сторонние символы. Важно понимать, что соль касается только хэширования, и нужна на случай взлома базы данных. Поэтому сами пароли должны быть длинной разносимвольной тарабарщиной, а не условный qwerty.
✏️ В языках программирования присутствуют как встроенные хэш-функции, так и можно использовать сторонние модули. Один из самых популярных модулей — bcrypt, основанный на алгоритме Blowfish.
🐍 Набросал фиддл на Python где:
(1) импортируется модуль bcrypt;
(2) создается пароль, преобразованный в байты;
(3) генерируется соль с фактором стоимости (cost factor) в 12 кругов итераций (для большей устойчивости к атакам);
(4) создается хэш пароля функцией hashpw();
(5) проверяется, что поданный на вход пароль соответствует тому, который был хэширован.
Выполнил по документации bcrypt-модуля.
Стандартная библиотека Python также содержит модуль для хэширования, называющийся hashlib.
🟢 Хэширование средствами базы данных. В PostgreSQL есть отдельный модуль pgcrypto, который предоставляет широкие возможности для генерации хэшей разными способами.
Помимо этого, в PostgreSQL просто есть функции задействующие хэширование разными алгоритмами (допустим, тот же SHA), описанные в документации.
#продолжи_мысль_SE
#Программирование #Python #SQL
Артем Лещев
Post #78
282