Asosiy kontentga o‘tish

Maqolalar

Darslik · 2026-06-10 · ~2 daqiqa o‘qiladi · boshlang'ich

Parollarni to‘g‘ri saqlash: hash, salt va Argon2

#security #auth #python

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#

  1. Hech qachon o‘zingiz kriptografiya o‘ylab topmang
  2. Parol uchun: Argon2id (yoki bcrypt) — oddiy hash emas
  3. Salt — kutubxona ichida avtomatik, qo‘lda boshqarmang
  4. Parol uzunligiga yuqori chegara qo‘ymang (72 baytlik bcrypt istisnosidan boshqa holatda), pastki chegara — kamida 8–12