Darslik · 2026-06-10 · ~2 daqiqa o‘qiladi · boshlang'ich
Parollarni to‘g‘ri saqlash: hash, salt va Argon2
Mundarija
Ma'lumotlar bazasi sizib chiqdi deylik. Savol bitta: hujumchi undagi parollar bilan nima qila oladi? Javob parolni qanday saqlaganingizga bog‘liq.
Nega oddiy hash yetmaydi#
SHA-256(parol) — tez hisoblanadi. Bu fazilat emas, muammo: zamonaviy GPU
sekundiga milliardlab hash sinaydi. Ko‘p ishlatiladigan parollar uchun tayyor
jadvallar (rainbow tables) ham bor.
Salt nima beradi#
Salt — har foydalanuvchi uchun tasodifiy qo‘shimcha qiymat. U ikki narsani buzadi: tayyor jadvallar ishlamaydi va bir xil parollar bazada har xil ko‘rinadi. Lekin salt tezlik muammosini yechmaydi — GPU baribir tez.
Yechim: ataylab sekin funksiyalar#
Parol uchun maxsus yaratilgan KDF'lar (key derivation functions) ataylab qimmat: Argon2id (tavsiya), scrypt, bcrypt. Argon2 xotira ham talab qiladi — GPU hujumini yanada qimmatlashtiradi.
from argon2 import PasswordHasher
ph = PasswordHasher() # standart parametrlar aqlli tanlangan
hash_ = ph.hash("parol123") # salt avtomatik ichida
ph.verify(hash_, "parol123") # to'g'ri bo'lsa True, aks holda exception
Django'da bu qanday#
Django buni siz uchun qiladi: make_password / check_password va
PASSWORD_HASHERS sozlamasi. Argon2'ga o‘tish:
# settings.py
PASSWORD_HASHERS = [
"django.contrib.auth.hashers.Argon2PasswordHasher",
# eski hashlar uchun fallback'lar qoladi — login'da avtomatik yangilanadi
"django.contrib.auth.hashers.PBKDF2PasswordHasher",
]
Xulosa qoidalar#
- Hech qachon o‘zingiz kriptografiya o‘ylab topmang
- Parol uchun: Argon2id (yoki bcrypt) — oddiy hash emas
- Salt — kutubxona ichida avtomatik, qo‘lda boshqarmang
- Parol uzunligiga yuqori chegara qo‘ymang (72 baytlik bcrypt istisnosidan boshqa holatda), pastki chegara — kamida 8–12