Hashing — ixtiyari ölçülü məlumatları sabit uzunluqlu sətrə çevirmə prosesidir, məlumat bütövlüyünü yoxlamaq və şifrələri təhlükəsiz saxlamaq üçün istifadə olunur. Open Web Application Security Project (OWASP, 2025) məlumatlarına görə, heş funksiyalarının düzgün istifadəsi etimad məlumatlarının sızması ilə bağlı zəifliklərin 70%-ə qədərinin qarşısını alır. Kriptoqrafik heşlər rəqəmsal imzaların, blokçeyn texnologiyalarının və versiya nəzarətinin əsasını təşkil edir.
Əsas məqamlarlar
Hashing — ixtiyari giriş məlumatları dəstini digest və ya heş dəyəri adlanan sabit uzunluqlu bit sətrinə çevirən heş funksiyasının hesablanması prosesidir. Şifrələmədən fərqli olaraq, hashing birtərəfli prosesdir: heş əsasında orijinal məlumatları bərpa etmək mümkün deyil.
Kriptoqrafik heş funksiyaları dörd məcburi xüsusiyyətə malikdir: determinizm (eyni giriş həmişə eyni heşi verir), geri döndürülməzlik (hesablama baxımından heş əsasında girişi bərpa etmək mümkün deyil), uçqun effekti (girişdəki bir bitin dəyişməsi heşin bitlərinin təxminən yarısını dəyişir) və kolliziyaya davamlılıq (hesablama baxımından eyni heşi verən iki fərqli giriş tapmaq mümkün deyil).
Hashing ilə şifrələmə arasındakı fərqi başa düşmək vacibdir. Şifrələmə ikitərəfli prosesdir: şifrələnmiş məlumatlar açar köməyilə deşifrə edilə bilər. Hashing birtərəfli prosesdir: çevrilmədən sonra məlumatları bərpa etmək mümkün deyil. Bu xüsusiyyət hashing-i şifrələrin saxlanması üçün ideal edir: sistem yalnız heşi saxlayır və hətta məlumat bazası sızdıqda belə şifrələr qorunmuş qalır.
Bütün heş funksiyaları təhlükəsizlik tapşırıqları üçün eyni dərəcədə yararlı deyil. Kriptoqrafik və qeyri-kriptoqrafik kateqoriyalara bölgü mobil inkişafda müəyyən tapşırıq üçün alqoritm seçərkən kritik əhəmiyyət kəsb edir.
Bu funksiyalar qəsdən yavaş və mürəkkəbdir ki, brute-force hücumlarını çətinləşdirsin. Onlar kolliziyalara və preimage hücumlarına davamlı olmalıdır. SHA-2 ailəsi (SHA-224, SHA-256, SHA-384, SHA-512) NIST tərəfindən sertifikatlaşdırılıb və dövlət sistemlərində istifadə üçün tövsiyə olunur. Şifrələrin heşlənməsi üçün əlavə olaraq bcrypt, scrypt və Argon2 alqoritmləri konfiqurasiya oluna bilən mürəkkəbliklə tətbiq olunur.
Bu funksiyalar təhlükəsizlik üçün deyil, sürət üçün optimallaşdırılıb. Nümunələr: CityHash, MurmurHash, xxHash. Onlar heş cədvəllərində, məlumat deduplikasiyasında və qeyri-kritik məlumatların bütövlüyünü sürətli yoxlamaq üçün nəzarət məbləğlərində istifadə olunur. Onları heç vaxt şifrələrin saxlanması və ya rəqəmsal imzaların yoxlanması üçün istifadə etməmək vacibdir — yüksək sürət onları brute-force hücumlarına qarşı həssas edir.
| Növ | Nümunələr | Tətbiq sahəsi |
|---|---|---|
| Kriptoqrafik | SHA-256, SHA-3, bcrypt | Şifrələr, imzalar, TLS |
| Qeyri-kriptoqrafik | MurmurHash, xxHash | Heş cədvəlləri, keşlər |
| Parol KDF | bcrypt, scrypt, Argon2 | Şifrələrin saxlanması |
Müasir mobil inkişafda istifadə olunan ən geniş yayılmış heşləmə alqoritmlərini nəzərdən keçirək. Onların hər birinin öz güclü və zəif tərəfləri var.
SHA-256 — FIPS 180-4 standartı çərçivəsində NIST tərəfindən tövsiyə olunan müasir kriptoqrafiyanın rəmzidir. Alqoritm 256-bitlik digest yaradır və TLS protokollarının, blokçeyn şəbəkələrinin və versiya nəzarət sistemlərinin əsas tərkib hissəsidir. NCC Group (2025) hesabatına görə, SHA-256 TLS sertifikatlarının 96%-də certificate transparency imzalamaq üçün istifadə olunur.
SHA-3 — NIST tərəfindən 2015-ci ildə FIPS 202 kimi standartlaşdırılmış ən yeni heş funksiyaları ailəsidir. Merkle–Damgård strukturuna əsaslanan SHA-2-dən fərqli olaraq, SHA-3 Keccak süngər funksiyası ilə fərqli bir konstruksiyaya əsaslanır. Bu, SHA-3-ü gələcəkdə SHA-2-yə qarşı yarana biləcək hücumlara davamlı edir. Mobil tərtibatçılar üçün SHA-3 standart kriptoqrafik kitabxanalar vasitəsilə Android 7.0 və iOS 13-dən etibarən mövcuddur.
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) }
}
Şifrələrin saxlanması üçün ümumi kriptoqrafik heşlər kifayət deyil — onlar çox sürətlidir. bcrypt xüsusilə şifrələrin heşlənməsi üçün hazırlanmışdır: o, duz və hesablama vaxtını tənzimləyən xərc parametrini ehtiva edir. Xərci 2 dəfə artırmaq heşləmə vaxtını iki qat artırır və brute-force hücumlarını hətta güclü avadanlıqda belə səmərəsiz edir.
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) qalibi, OWASP tərəfindən şifrələrin heşlənməsi üçün ən yaxın seçim kimi tövsiyə olunur. Argon2id — yan kanal hücumlarına və time-memory trade-off hücumlarına davamlı variantdır. bcrypt-dən fərqli olaraq, Argon2 icra müddətini, yaddaş istifadəsini və paralellik dərəcəsini ayrıca konfiqurasiya etməyə imkan verir ki, bu da müxtəlif hücum növlərinə qarşı çevik qoruma təmin edir.
Hashing mobil inkişafda istifadəçi autentifikasiyasından tutmuş yüklənən faylların bütövlüyünün yoxlanmasına qədər bir çox praktiki tapşırığı həll edir. Əsas istifadə ssenarilərinə baxaq.
Əsas ssenari — şifrələrin təhlükəsiz saxlanması server tərəfində. Qeydiyyat zamanı tətbiq şifrəni serverə göndərir, orada duz ilə bcrypt və ya Argon2 alqoritmi ilə heşlənir və məlumat bazasında saxlanılır. Giriş zamanı server daxil edilən şifrəni heşləyir və saxlanılan heşlə müqayisə edir. OWASP aşağıdakı parametrlərlə Argon2id istifadəsini tövsiyə edir: vaxt 2 saniyə, yaddaş 64 MB, paralellik dərəcəsi 4.
OBB paketləri və ya məzmun yeniləmələri kimi böyük faylları yükləyərkən, mobil tətbiqlər onların bütövlüyünü hashing vasitəsilə yoxlaya bilər. Server faylın SHA-256 heşini dərc edir, tətbiq isə yüklənmiş məlumatların heşini hesablayıb müqayisə edir. Bu, faylın ötürülmə zamanı zədələnmədiyini və ya dəyişdirilmədiyini təmin edir. Google Play Console (2025) məlumatlarına görə, sertifikatlaşdırılmış tətbiqlərin heş yoxlaması zədəli yükləmə hücumlarının 99.9%-nə qədərinin qarşısını alır.
Heşlər səmərəli keşlər və məlumat deduplikasiyası qurmaq üçün fəal istifadə olunur. Şəkil ünvanı və ya JSON cavabı heşlənir və keş açarı kimi istifadə olunur: təkrarı sorğu zamanı sistem heşləri müqayisə edir və məlumatlar dəyişməyibsə, saxlanılan nəticəni qaytarır. Bu tapşırıq üçün maksimum performans təmin edən MurmurHash və ya xxHash kimi qeyri-kriptoqrafik heş funksiyaları uyğundur.
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
}
Hətta təcrübəli tərtibatçılar hashing ilə işləyərkən səhvlərə yol verirlər. Kriptoqrafik qorumanın bütün üstünlüklərini puç edə biləcək ən geniş yayılmış problemləri nəzərdən keçirək.
MD5 və SHA-1 — kolliziya hücumlarının praktiki mövcud olduğu köhnəlmiş alqoritmlərdir. MD5 2004-cü ildə Çinli tədqiqatçılar qrupu tərəfindən (bir saat ərzində kolliziya) qırılmışdır. SHA-1 2017-ci ildə Google və Centrum Wiskunde & Informatica komandası tərəfindən (SHAttered hücumu) qırılmışdır. Bu alqoritmlərin yeni layihələrdə istifadəsi OWASP təsnifatına görə kobud təhlükəsizlik səhvi hesab olunur.
Şifrələrin duz olmadan heşlənməsi — kritik zəiflikdir. Duz, hər istifadəçi üçün unikal olan və şifrəyə heşləmədən əvvəl əlavə edilən təsadüfi sətrdir. Duz olmadan iki eyni şifrə eyni heşi verəcək, bu da brute-force üçün göy qurşağı cədvəllərindən istifadəyə imkan verir. OWASP hər istifadəçi üçün ayrıca yaradılan kriptoqrafik cəhətdən güclü ən azı 32 bayt uzunluğunda duz istifadəsini tövsiyə edir.
Hətta bcrypt və ya Argon2 istifadə edərkən belə, çox aşağı xərc parametri seçməklə qorumanı zəiflətmək olar. OWASP (2025) məlumatlarına görə, bcrypt üçün minimum iterasiya sayı 10 (2^10 = 1024 iterasiya), Argon2id üçün isə hədəf platformada hesablama müddəti ən azı 1 saniyə olmalıdır. Çox aşağı parametrlər brute-force hücumlarını GPU fermalarında praktiki olaraq həyata keçirilə bilən edir.
Tez-tez verilən suallar
Hashing — nəticəsi orijinal məlumatlara çevrilə bilməyən birtərəfli prosesdir. Şifrələmə ikitərəfli prosesdir: şifrələnmiş məlumatlar açar köməyilə deşifrə edilə bilər. Hashing şifrələrin saxlanması və bütövlüyün yoxlanması üçün, şifrələmə isə müştəri ilə server arasında məlumatların məxfi ötürülməsi üçün istifadə olunur.
OWASP GPU hücumlarına və yan kanal hücumlarına qarşı konfiqurasiya oluna bilən qoruma sayəsində şifrələrin heşlənməsi üçün Argon2id-i ən yaxşı seçim kimi tövsiyə edir. Alternativlər: bcrypt (sınaqdan keçmiş və konfiqurasiyası asan), scrypt (ASIC hücumlarına davamlı) və PBKDF2. SHA-256 və SHA-512 şifrələr üçün uyğun deyil — onlar çox sürətlidir və kütləvi brute-forcedən qorumur.
Kolliziya — iki fərqli giriş məlumat dəstinin eyni heşi verdiyi vəziyyətdir. Kriptoqrafik heş funksiyaları üçün kolliziyaların tapılması hesablama baxımından qeyri-mümkün olmalıdır. Məsələn, iki təsadüfi mesaj üçün SHA-256 kolliziyası ehtimalı təxminən 2^128-də 1-dir — bu cüzi dərəcədə kiçik dəyərdir.
Xeyr, bcrypt öz alqoritminə avtomatik olaraq duz daxil edir. BCrypt.hashToString() çağırıldıqda, kitabxana kriptoqrafik cəhətdən güclü 16 baytlıq duz yaradır və onu heş və xərc parametri ilə birlikdə çıxış sətrinə daxil edir. Scrypt və Argon2 də eyni şəkildə işləyir. Ekspertlərin şifrələrin qorunması üçün ümumi heş funksiyaları əvəzinə ixtisaslaşdırılmış KDF istifadəsini tövsiyə etməsinin səbəblərindən biri də budur.
Bəli, heşlər faylların ağ və qara siyahılarını yaratmaq üçün istifadə olunur. Antivirus bazaları tanınmış zərərli proqramların heşlərini ehtiva edir. Lakin hücumçular proqramda bir baytı dəyişdirə bilər, bu da heşi tamamilə dəyişdirəcək. Buna görə müasir sistemlər yalnız dəqiq uyğunluqları deyil, həm də semantik cəhətdən oxşar faylları tapan fuzzy-hashing (SSDeep, TLSH) istifadə edir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun