Hashing — bu nima, kriptografik algoritmlar va qo‘llanilishi

Muallif: IT Sectr Nashr etilgan: 2026-04-02 O'qish vaqti: 8 daq

Hashing — ixtiyoriy o‘lchamdagi ma’lumotlarni belgilangan uzunlikdagi qatorga aylantirish jarayoni bo‘lib, yaxlitlikni tekshirish va parollarni xavfsiz saqlash uchun ishlatiladi. Open Web Application Security Project (OWASP, 2025) ma’lumotlariga ko‘ra, hash funksiyalaridan to‘g‘ri foydalanish hisob ma’lumotlarining sizib chiqishi bilan bog‘liq zaifliklarning 70% gacha oldini oladi. Kriptografik hash’lar raqamli imzolar, blokcheyn texnologiyalari va versiya nazoratining asosini tashkil etadi.

Asosiy ma’lumotlar

  • Hash funksiyasi kirish ma’lumotlarini belgilangan uzunlikdagi qatorga — digestga aylantiradi.
  • Kriptografik hash’lar qaytarilmaslik xususiyatiga ega: hash bo‘yicha asl ma’lumotlarni tiklab bo‘lmaydi.
  • SHA-256 — NIST tomonidan zamonaviy tizimlar uchun tavsiya etilgan kriptografik hashlash standarti.
  • Tuz — parolga hashlashdan oldin qo‘shiladigan, kamalak jadvallaridan himoya qilish uchun tasodifiy ma’lumotlar.
  • Hashing mobil ilovalarda parollarni saqlash va ma’lumotlar yaxlitligini tekshirish uchun keng qo‘llaniladi.

Hashing nima?

Hashing — ixtiyoriy kirish ma’lumotlari to‘plamini digest yoki hash qiymati deb ataladigan belgilangan uzunlikdagi bit qatoriga aylantiruvchi hash funksiyasini hisoblash jarayoni. Shifrlashdan farqli o‘laroq, hashing bir tomonlama jarayon: hash bo‘yicha asl ma’lumotlarni tiklash mumkin emas.

Hash funksiyalarining asosiy xususiyatlari

Kriptografik hash funksiyalari to‘rtta majburiy xususiyatga ega: determinizm (bir xil kirish har doim bir xil hashni beradi), qaytarilmaslik (hisoblash nuqtai nazaridan hash bo‘yicha kirishni tiklab bo‘lmaydi), ko‘chki effekti (kirishdagi bir bitning o‘zgarishi hash bitlarining o‘rtacha yarmini o‘zgartiradi) va kolliziyaga chidamlilik (hisoblash nuqtai nazaridan bir xil hashni beradigan ikki xil kirishni topish mumkin emas).

Hashing va shifrlash o‘rtasidagi farq

Hashing va shifrlash o‘rtasidagi farqni tushunish muhim. Shifrlash ikki tomonlama jarayon: shifrlangan ma’lumotlar kalit yordamida deshifrlanishi mumkin. Hashing bir tomonlama jarayon: o‘zgartirishdan so‘ng ma’lumotlarni tiklab bo‘lmaydi. Bu xususiyat hashingni parollarni saqlash uchun ideal qiladi: tizim faqat hashni saqlaydi va hatto ma’lumotlar bazasi sizib chiqqanda ham parollar himoyalangan qoladi.

Kriptografik va nokriptografik hash funksiyalari

Barcha hash funksiyalari xavfsizlik vazifalari uchun bir xil darajada mos emas. Kriptografik va nokriptografik kategoriyalarga bo‘linish mobil ishlab chiqishda muayyan vazifa uchun algoritm tanlashda juda muhimdir.

Kriptografik hash funksiyalari

Bu funksiyalar ataylab sekin va murakkab bo‘lib, brute-force hujumlarini qiyinlashtiradi. Ular kolliziyalarga va preimage hujumlariga chidamli bo‘lishi kerak. SHA-2 oilasi (SHA-224, SHA-256, SHA-384, SHA-512) NIST tomonidan sertifikatlangan va davlat tizimlarida foydalanish uchun tavsiya etilgan. Parollarni hashlash uchun qo‘shimcha ravishda bcrypt, scrypt va Argon2 algoritmlari sozlanishi murakkablik bilan qo‘llaniladi.

Nokriptografik hash funksiyalari

Bu funksiyalar xavfsizlik emas, balki tezlik uchun optimallashtirilgan. Misollar: CityHash, MurmurHash, xxHash. Ular hash jadvallarida, ma’lumotlarni deduplikatsiyalash va kritik bo‘lmagan ma’lumotlarning yaxlitligini tez tekshirish uchun nazorat summalarida ishlatiladi. Ularni hech qachon parollarni saqlash yoki raqamli imzolarni tekshirish uchun ishlatmaslik muhim — yuqori tezlik ularni brute-force hujumlariga nisbatan zaif qiladi.

TurMisollarQo‘llash sohasi
KriptografikSHA-256, SHA-3, bcryptParollar, imzolar, TLS
NokriptografikMurmurHash, xxHashHash jadvallari, kesh
Parol KDFbcrypt, scrypt, Argon2Parollarni saqlash

Zamonaviy mobil ishlab chiqishda qo‘llaniladigan eng keng tarqalgan hashlash algoritmlarini ko‘rib chiqamiz. Ularning har biri o‘zining kuchli va zaif tomonlariga ega.

SHA-256

SHA-256 — FIPS 180-4 standarti doirasida NIST tomonidan tavsiya etilgan zamonaviy kriptografiyaning ramzi. Algoritm 256-bitli digest yaratadi va TLS protokollari, blokcheyn tarmoqlari va versiya nazorat tizimlarining asosiy tarkibiy qismidir. NCC Group (2025) hisobotiga ko‘ra, SHA-256 TLS sertifikatlarining 96% da certificate transparency imzolash uchun ishlatiladi.

SHA-3 — SHA-2 ning davomchisi

SHA-3 — NIST tomonidan 2015 yilda FIPS 202 sifatida standartlashtirilgan eng yangi hash funksiyalari oilasi. Merkle–Damgård strukturasiga asoslangan SHA-2 dan farqli o‘laroq, SHA-3 Keccak shimgich funksiyasi bilan boshqa konstruksiyaga asoslanadi. Bu SHA-3 ni kelajakda SHA-2 ga nisbatan paydo bo‘lishi mumkin bo‘lgan hujumlarga chidamli qiladi. Mobil dasturchilar uchun SHA-3 standart kriptografik kutubxonalar orqali Android 7.0 va iOS 13 dan boshlab mavjud.

kotlin
import java.security.MessageDigest

fun hashWithSHA256(input: String): String {
    val digest = MessageDigest.getInstance("SHA-256")
    val hashBytes = digest.digest(input.toByteArray())
    return hashBytes.joinToString("") { String.format("%02x", it) }
}

Parollar uchun bcrypt

Parollarni saqlash uchun umumiy kriptografik hash’lar yetarli emas — ular juda tez. bcrypt ayniqsa parollarni hashlash uchun ishlab chiqilgan: u tuz va hisoblash vaqtini tartibga soluvchi xarajat parametrini o‘z ichiga oladi. Xarajatni 2 baravar oshirish hashlash vaqtini ikki barobarga oshiradi va brute-force hujumlarini hatto kuchli uskunada ham samarasiz qiladi.

kotlin
import at.favre.lib.crypto.bcrypt.BCrypt

fun hashPassword(password: String): String {
    return BCrypt.create()
        .hashToString(BCrypt.MIN_COST, password.toCharArray())
}

fun verifyPassword(password: String, hash: String): Boolean {
    val result = BCrypt.verifyer().verify(password.toCharArray(), hash)
    return result.verified
}

Argon2 — zamonaviy standart

Argon2 — Password Hashing Competition (2015) g‘olibi, OWASP tomonidan parollarni hashlash uchun eng yaxshi tanlov sifatida tavsiya etilgan. Argon2id — yon kanal hujumlariga va time-memory trade-off hujumlariga chidamli variant. bcrypt dan farqli o‘laroq, Argon2 bajarilish vaqtini, xotiradan foydalanishni va parallellik darajasini alohida sozlash imkonini beradi, bu esa turli hujum turlariga qarshi moslashuvchan himoyani ta’minlaydi.

Hashingni mobil ilovalarda qo‘llash

Hashing mobil ishlab chiqishda foydalanuvchi autentifikatsiyasidan tortib yuklab olinadigan fayllarning yaxlitligini tekshirishgacha bo‘lgan ko‘plab amaliy vazifalarni hal qiladi. Asosiy foydalanish stsenariylarini ko‘rib chiqamiz.

Parollarni saqlash

Asosiy stsenariy — parollarni xavfsiz saqlash server tomonida. Ro‘yxatdan o‘tishda ilova parolni serverga yuboradi, u erda tuz bilan bcrypt yoki Argon2 algoritmi bilan hashlanadi va ma’lumotlar bazasida saqlanadi. Kirishda server kiritilgan parolni hashlaydi va saqlangan hash bilan taqqoslaydi. OWASP quyidagi parametrlar bilan Argon2id dan foydalanishni tavsiya qiladi: vaqt 2 soniya, xotira 64 MB, parallellik darajasi 4.

Fayl yaxlitligini tekshirish

OBB paketlari yoki kontent yangilanishlari kabi katta fayllarni yuklab olishda mobil ilovalar ularning yaxlitligini hashing orqali tekshirishi mumkin. Server faylning SHA-256 hashini e‘lon qiladi, ilova esa yuklab olingan ma’lumotlarning hashini hisoblab, taqqoslaydi. Bu fayl uzatish paytida shikastlanmaganligi yoki almashtirilmaganligini kafolatlaydi. Google Play Console (2025) ma’lumotlariga ko‘ra, sertifikatlangan ilovalarning hash tekshiruvi shikastlangan yuklab olish hujumlarining 99.9% gacha oldini oladi.

Keshlash va deduplikatsiya

Hash’lar samarali kesh va ma’lumotlarni deduplikatsiya qilish uchun faol qo‘llaniladi. Rasm manzili yoki JSON javobi hashlanadi va kesh kaliti sifatida ishlatiladi: takroriy so‘rovda tizim hash’larni taqqoslaydi va ma’lumotlar o‘zgarmagan bo‘lsa, saqlangan natijani qaytaradi. Bu vazifa uchun maksimal ishlashni ta’minlaydigan MurmurHash yoki xxHash kabi nokriptografik hash funksiyalari mos keladi.

kotlin
import java.security.MessageDigest

fun calculateFileHash(fileBytes: ByteArray): String {
    val digest = MessageDigest.getInstance("SHA-256")
    val hash = digest.digest(fileBytes)
    return hash.joinToString("") { String.format("%02x", it) }
}

fun verifyIntegrity(data: ByteArray, expectedHash: String): Boolean {
    val actualHash = calculateFileHash(data)
    return actualHash == expectedHash
}

Hash’lardan foydalanishda tipik xatolar

Hatto tajribali dasturchilar hashing bilan ishlashda xato qiladilar. Kriptografik himoyaning barcha afzalliklarini bekor qilishi mumkin bo‘lgan eng keng tarqalgan muammolarni ko‘rib chiqamiz.

MD5 yoki SHA-1 dan foydalanish

MD5 va SHA-1 — kolliziyaga amaliy hujumlar mavjud bo‘lgan eskirgan algoritmlar. MD5 2004 yilda xitoylik tadqiqotchilar guruhi tomonidan (bir soat ichida kolliziya) buzilgan. SHA-1 2017 yilda Google va Centrum Wiskunde & Informatica jamoasi tomonidan (SHAttered hujumi) buzilgan. Ushbu algoritmlardan yangi loyihalarda foydalanish OWASP tasnifiga ko‘ra qo‘pol xavfsizlik xatosi hisoblanadi.

Tu zsiz hashlash

Parollarni tuzsiz hashlash — tanqidiy zaiflik. Tuz — har bir foydalanuvchi uchun noyob bo‘lgan va parolga hashlashdan oldin qo‘shiladigan tasodifiy qator. Tuzsiz ikkita bir xil parol bir xil hashni beradi, bu esa brute-force uchun kamalak jadvallaridan foydalanish imkonini beradi. OWASP har bir foydalanuvchi uchun alohida yaratiladigan kriptografik jihatdan kuchli kamida 32 bayt uzunlikdagi tuzdan foydalanishni tavsiya qiladi.

Iteratsiyalarning yetarli emasligi

Hatto bcrypt yoki Argon2 dan foydalanganda ham, juda past xarajat parametrini tanlab himoyani zaiflashtirish mumkin. OWASP (2025) ma’lumotlariga ko‘ra, bcrypt uchun minimal iteratsiyalar soni 10 (2^10 = 1024 iteratsiya), Argon2id uchun esa maqsadli platformada hisoblash vaqti kamida 1 soniya bo‘lishi kerak. Juda past parametrlar brute-force hujumlarini GPU fermalarida amalda amalga oshirilishi mumkin qiladi.

Ko‘p beriladigan savollar

Hashing va shifrlash o‘rtasidagi farq nima?

Hashing — natijasini asl ma’lumotlarga qaytarib bo‘lmaydigan bir tomonlama jarayon. Shifrlash ikki tomonlama jarayon: shifrlangan ma’lumotlar kalit yordamida deshifrlanishi mumkin. Hashing parollarni saqlash va yaxlitlikni tekshirish uchun, shifrlash esa mijoz va server o‘rtasida ma’lumotlarning maxfiy uzatilishi uchun ishlatiladi.

Parollar uchun qaysi hashlash algoritmi yaxshiroq?

OWASP GPU hujumlari va yon kanal hujumlariga qarshi sozlanishi himoyasi tufayli parollarni hashlash uchun Argon2id ni eng yaxshi tanlov sifatida tavsiya qiladi. Muqobillar: bcrypt (sinovdan o‘tgan va sozlash oson), scrypt (ASIC hujumlariga chidamli) va PBKDF2. SHA-256 va SHA-512 parollar uchun mos emas — ular juda tez va ommaviy brute-forcedan himoya qilmaydi.

Hash funksiyasining kolliziyasi nima va nima uchun xavfli?

Kolliziya — ikki xil kirish ma’lumotlar to‘plami bir xil hashni beradigan holat. Kriptografik hash funksiyalari uchun kolliziyalarni topish hisoblash nuqtai nazaridan imkonsiz bo‘lishi kerak. Masalan, ikkita tasodifiy xabar uchun SHA-256 kolliziyasi ehtimoli taxminan 2^128 da 1 ga teng — bu juda kichik qiymat.

bcrypt ga tuzni qo‘lda qo‘shish kerakmi?

Yo‘q, bcrypt o‘z algoritmiga avtomatik ravishda tuzni kiritadi. BCrypt.hashToString() chaqirilganda, kutubxona kriptografik jihatdan kuchli 16 baytlik tuz yaratadi va uni hash va xarajat parametri bilan birga chiqish qatoriga joylashtiradi. Scrypt va Argon2 ham xuddi shunday ishlaydi. Mutaxassislarning parollarni himoya qilish uchun umumiy hash funksiyalari o‘rniga ixtisoslashtirilgan KDF dan foydalanishni tavsiya qilishining sabablaridan biri ham shu.

Zararli dasturlardan himoya qilish uchun hashingdan foydalanish mumkinmi?

Ha, hash’lar fayllarning oq va qora ro‘yxatlarini yaratish uchun ishlatiladi. Antivirus bazalari taniqli zararli dasturlarning hash’larini o‘z ichiga oladi. Biroq, tajovuzkorlar dasturdagi bir baytni o‘zgartirishi mumkin, bu hashni butunlay o‘zgartiradi. Shuning uchun zamonaviy tizimlar faqat aniq mosliklarni emas, balki semantik jihatdan o‘xshash fayllarni topadigan fuzzy-hashing (SSDeep, TLSH) dan foydalanadi.

Xulosa

  • Hashing — ma’lumotlarni qaytarilmaslik kafolati bilan belgilangan uzunlikdagi qatorga bir tomonlama aylantirish.
  • Kriptografik hash funksiyalari kolliziyaga chidamlilik va ko‘chki effektini ta’minlaydi.
  • SHA-256 — zamonaviy tizimlarda kriptografik hashlash uchun NIST standarti.
  • Parol KDF (bcrypt, Argon2, scrypt) parollarni xavfsiz saqlash uchun majburiydir.
  • Tuz kamalak jadvallaridan himoya qiladi va har bir foydalanuvchi uchun noyob bo‘lishi kerak.
  • MD5 va SHA-1 buzilgan hisoblanadi va yangi loyihalarda ishlatilmasligi kerak.
  • Hashing parollarni saqlash, ma’lumotlar yaxlitligini tekshirish, keshlash va antivirus himoyasi uchun qo‘llaniladi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing