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
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.
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 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.
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.
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.
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.
| Tur | Misollar | Qo‘llash sohasi |
|---|---|---|
| Kriptografik | SHA-256, SHA-3, bcrypt | Parollar, imzolar, TLS |
| Nokriptografik | MurmurHash, xxHash | Hash jadvallari, kesh |
| Parol KDF | bcrypt, scrypt, Argon2 | Parollarni 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 — 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 — 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.
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) }
}
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.
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 — 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.
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.
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.
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.
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.
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
}
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 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.
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.
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 — 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.
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.
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.
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.
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
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.