Hashing — nedir, kriptografik algoritmalar ve uygulamalar

Yazar: IT Sectr Yayınlanma: 2026-04-02 Okuma süresi: 8 dk

Hashing, rastgele boyuttaki verileri sabit uzunlukta bir dizeye dönüştürme işlemidir ve bütünlük doğrulaması ile parolaların güvenli bir şekilde saklanması için kullanılır. Open Web Application Security Project'e (OWASP, 2025) göre, hash fonksiyonlarının doğru kullanımı, kimlik bilgisi sızıntısıyla ilgili güvenlik açıklarının %70'ine kadarını önler. Kriptografik hashler, dijital imzaların, blockchain teknolojilerinin ve sürüm kontrolünün temelini oluşturur.

Önemli Noktalar

  • Hash fonksiyonu, giriş verilerini özet adı verilen sabit uzunlukta bir dizeye dönüştürür.
  • Kriptografik hashler geri döndürülemezlik özelliğine sahiptir: hash'ten orijinal veriler kurtarılamaz.
  • SHA-256, modern sistemler için NIST tarafından önerilen kriptografik hashing standardıdır.
  • Tuz (Salt), gökkuşağı tablolarına karşı korumak için hashing'den önce parolaya eklenen rastgele verilerdir.
  • Hashing, mobil uygulamalarda parola depolama ve veri bütünlüğü doğrulaması için yaygın olarak kullanılır.

Hashing Nedir?

Hashing, rastgele bir giriş verisi kümesini özet veya hash değeri adı verilen sabit uzunlukta bir bit dizisine dönüştüren bir hash fonksiyonunu hesaplama işlemidir. Şifrelemenin aksine, hashing tek yönlü bir işlemdir: hash'ten orijinal verileri kurtarmak imkansızdır.

Hash Fonksiyonlarının Temel Özellikleri

Kriptografik hash fonksiyonları dört zorunlu özelliğe sahiptir: belirlilik (aynı girdi her zaman aynı hash'i üretir), geri döndürülemezlik (girdiyi hash'ten kurtarmak hesaplama açısından imkansızdır), çığ etkisi (girdideki bir biti değiştirmek, hash bitlerinin ortalama yarısını değiştirir) ve çarpışma direnci (aynı hash'e sahip iki farklı girdi bulmak hesaplama açısından imkansızdır).

Şifrelemeden Farkı

Hashing ve şifreleme arasındaki farkı anlamak önemlidir. Şifreleme iki yönlü bir işlemdir: şifrelenmiş veriler bir anahtar kullanılarak çözülebilir. Hashing tek yönlü bir işlemdir: dönüşümden sonra veriler kurtarılamaz. Bu özellik, hashing'i parola depolama için ideal hale getirir: sistem yalnızca hash'i saklar ve veritabanı sızdırılsa bile parolalar korunmuş olarak kalır.

Kriptografik ve Kriptografik Olmayan Hash Fonksiyonları

Tüm hash fonksiyonları güvenlik görevleri için eşit derecede uygun değildir. Kriptografik ve kriptografik olmayan kategorilere ayrılma, mobil geliştirmede belirli bir görev için algoritma seçerken kritik öneme sahiptir.

Kriptografik Hash Fonksiyonları

Bu fonksiyonlar, kaba kuvvet saldırılarını zorlaştırmak için kasıtlı olarak yavaş ve karmaşıktır. Çarpışmalara ve ön görüntü saldırılarına karşı dayanıklı olmalıdırlar. SHA-2 ailesi (SHA-224, SHA-256, SHA-384, SHA-512) NIST tarafından onaylanmıştır ve devlet sistemlerinde kullanılması önerilir. Parola hashing için, bcrypt, scrypt ve Argon2 algoritmaları ayarlanabilir karmaşıklık ile ek olarak kullanılır.

Kriptografik Olmayan Hash Fonksiyonları

Bu fonksiyonlar güvenlikten ziyade hız için optimize edilmiştir. Örnekler: CityHash, MurmurHash, xxHash. Hash tablolarında, veri tekilleştirmede ve kritik olmayan verilerin hızlı bütünlük doğrulaması için sağlama toplamlarında kullanılırlar. Bunları asla parola depolama veya dijital imza doğrulaması için kullanmamak önemlidir — yüksek hızları, onları kaba kuvvet saldırılarına karşı savunmasız hale getirir.

TürÖrneklerUygulama Alanı
KriptografikSHA-256, SHA-3, bcryptParolalar, imzalar, TLS
Kriptografik olmayanMurmurHash, xxHashHash tabloları, önbellekler
Parola KDF'leribcrypt, scrypt, Argon2Parola depolama

Modern mobil geliştirmede kullanılan en yaygın hashing algoritmalarını inceleyelim. Her birinin güçlü ve zayıf yönleri vardır.

SHA-256

SHA-256, modern kriptografinin bir sembolüdür ve FIPS 180-4 standardının bir parçası olarak NIST tarafından önerilir. Algoritma 256 bitlik bir özet üretir ve TLS protokollerinin, blockchain ağlarının ve sürüm kontrol sistemlerinin temel bir bileşenidir. NCC Group (2025) raporuna göre, SHA-256, sertifika şeffaflığını imzalamak için TLS sertifikalarının %96'sında kullanılmaktadır.

SHA-3 — SHA-2'nin Halefi

SHA-3, 2015 yılında FIPS 202 olarak NIST tarafından standartlaştırılan en yeni hash fonksiyonları ailesidir. Merkle–Damgård yapısı üzerine inşa edilen SHA-2'nin aksine, SHA-3, sünger fonksiyonlu farklı bir Keccak yapısına dayanır. Bu, SHA-3'ü gelecekte SHA-2'ye karşı ortaya çıkabilecek saldırılara karşı dayanıklı kılar. Mobil geliştiriciler için SHA-3, Android 7.0 ve iOS 13'ten itibaren standart kriptografi kütüphaneleri aracılığıyla kullanılabilir.

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) }
}

Parolalar için bcrypt

Genel amaçlı kriptografik hashler parola depolama için yetersizdir — çok hızlıdırlar. bcrypt, özellikle parola hashing için tasarlanmıştır: hesaplama süresini düzenleyen bir tuz ve maliyet parametresi içerir. Maliyeti iki katına çıkarmak, hashing süresini iki katına çıkararak güçlü donanımda bile kaba kuvveti etkisiz hale getirir.

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 — Modern Standart

Argon2, Password Hashing Competition (2015) yarışmasının galibidir ve OWASP tarafından parola hashing için en iyi seçim olarak önerilir. Argon2id, yan kanal ve zaman-bellek takası saldırılarına dayanıklı varyanttır. bcrypt'in aksine, Argon2, yürütme süresini, bellek kullanımını ve paralellik derecesini ayrı ayrı yapılandırmaya izin vererek çeşitli saldırı türlerine karşı esnek koruma sağlar.

Mobil Uygulamalarda Hashing Kullanımı

Hashing, mobil geliştirmede kullanıcı kimlik doğrulamasından indirilen dosyaların bütünlük doğrulamasına kadar birçok pratik görevi çözer. Temel kullanım durumlarını inceleyelim.

Parola Depolama

Ana kullanım durumu, sunucu tarafında güvenli parola depolamadır. Kayıt sırasında uygulama, parolayı sunucuya gönderir; burada bcrypt veya Argon2 kullanılarak tuzla hashlenir ve veritabanında saklanır. Giriş sırasında sunucu, girilen parolayı hashler ve saklanan hash ile karşılaştırır. OWASP, Argon2id'nin şu parametrelerle kullanılmasını önerir: süre 2 saniye, bellek 64 MB, paralellik derecesi 4.

Dosya Bütünlüğü Doğrulaması

OBB paketleri veya içerik güncellemeleri gibi büyük dosyalar indirilirken, mobil uygulamalar hashing yoluyla bütünlüklerini doğrulayabilir. Sunucu, dosyanın SHA-256 hash'ini yayınlar ve uygulama, indirilen verilerin hash'ini hesaplayarak karşılaştırır. Bu, dosyanın iletim sırasında bozulmadığını veya değiştirilmediğini garanti eder. Google Play Console'a (2025) göre, sertifikalı uygulamaların hash doğrulaması, bozuk indirme saldırılarının %99,9'una kadarını önler.

Önbellekleme ve Tekilleştirme

Hash'ler, verimli önbellekler ve veri tekilleştirme oluşturmak için aktif olarak kullanılır. Bir görselin veya JSON yanıtının adresi hashlenir ve önbellek anahtarı olarak kullanılır: tekrarlanan bir istekte sistem, hash'leri karşılaştırır ve veriler değişmemişse saklanan sonucu döndürür. Bu görev için, MurmurHash veya xxHash gibi kriptografik olmayan hash fonksiyonları uygundur ve maksimum performans sağlar.

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 Kullanırken Yapılan Yaygın Hatalar

Deneyimli geliştiriciler bile hashing ile çalışırken hatalar yapar. Kriptografik korumanın tüm avantajlarını ortadan kaldırabilecek en yaygın sorunları inceleyelim.

MD5 veya SHA-1 Kullanımı

MD5 ve SHA-1, pratik çarpışma saldırıları bulunan eski algoritmalardır. MD5, 2004 yılında bir grup Çinli araştırmacı tarafından kırıldı (bir saat içinde çarpışma). SHA-1, 2017 yılında Google ve Centrum Wiskunde & Informatica'dan bir ekip tarafından kırıldı (SHAttered saldırısı). Bu algoritmaların yeni projelerde kullanılması, OWASP sınıflandırmasına göre kritik bir güvenlik hatası olarak kabul edilir.

Tuzsuz Hashing

Parolaları tuz olmadan hashlemek kritik bir güvenlik açığıdır. Tuz, her kullanıcı için benzersiz olan ve hashing'den önce parolaya eklenen rastgele bir dizedir. Tuz olmadan, iki aynı parola aynı hash'i üretir ve bu da kırma için gökkuşağı tablolarının kullanılmasına olanak tanır. OWASP, her kullanıcı için ayrı ayrı oluşturulan, en az 32 bayt uzunluğunda kriptografik olarak güçlü tuz kullanılmasını önerir.

Yetersiz Yineleme Sayısı

bcrypt veya Argon2 kullanırken bile, çok düşük bir maliyet parametresi seçerek korumayı azaltabilirsiniz. OWASP'a (2025) göre, bcrypt yinelemelerinin minimum sayısı 10 (2^10 = 1024 yineleme) olmalıdır ve Argon2id için hedef platformda hesaplama süresi en az 1 saniye olmalıdır. Çok düşük parametreler, GPU çiftliklerinde kaba kuvvet saldırılarını pratik olarak uygulanabilir hale getirir.

Sıkça Sorulan Sorular

Hashing ve şifreleme arasındaki fark nedir?

Hashing, sonucu orijinal verilere geri döndürülemeyen tek yönlü bir işlemdir. Şifreleme iki yönlü bir işlemdir: şifrelenmiş veriler bir anahtar kullanılarak çözülebilir. Hashing, parola depolama ve bütünlük doğrulaması için kullanılırken, şifreleme, istemci ve sunucu arasında verilerin gizli iletimi için kullanılır.

Parolalar için en iyi hashing algoritması hangisidir?

OWASP, GPU ve yan kanal saldırılarına karşı yapılandırılabilir koruması nedeniyle parola hashing için en iyi seçim olarak Argon2id'yi önerir. Alternatifler: bcrypt (kanıtlanmış ve yapılandırması kolay), scrypt (ASIC saldırılarına dayanıklı) ve PBKDF2. SHA-256 ve SHA-512 parolalar için uygun değildir — çok hızlıdırlar ve toplu kaba kuvvet saldırılarına karşı koruma sağlamazlar.

Hash çarpışması nedir ve neden tehlikelidir?

Çarpışma, iki farklı giriş verisi kümesinin aynı hash'i ürettiği bir durumdur. Kriptografik hash fonksiyonları için çarpışma bulmak hesaplama açısından imkansız olmalıdır. Örneğin, herhangi iki rastgele mesaj için SHA-256 çarpışma olasılığı yaklaşık 2^128'de 1'dir — bu son derece küçük bir değerdir.

bcrypt'e manuel olarak tuz eklemem gerekir mi?

Hayır, bcrypt algoritmasına otomatik olarak tuz ekler. BCrypt.hashToString() çağrıldığında, kütüphane kriptografik olarak güçlü 16 baytlık bir tuz oluşturur ve bunu hash ve maliyet parametresiyle birlikte çıktı dizesine gömer. scrypt ve Argon2 benzer şekilde çalışır. Bu, uzmanların parola koruması için genel amaçlı hash fonksiyonları yerine özel KDF'ler kullanılmasını önermelerinin nedenlerinden biridir.

Kötü amaçlı yazılımlara karşı koruma için hashing kullanılabilir mi?

Evet, hash'ler dosyaların beyaz ve kara listelerini oluşturmak için kullanılır. Antivirüs veritabanları, bilinen kötü amaçlı programların hash'lerini içerir. Ancak, saldırganlar bir programdaki tek bir baytı değiştirebilir ve bu da hash'i tamamen değiştirir. Bu nedenle, modern sistemler yalnızca tam eşleşmeleri değil, anlamsal olarak benzer dosyaları bulan bulanık hashing (SSDeep, TLSH) kullanır.

Özet

  • Hashing, geri döndürülemezlik garantisiyle verilerin sabit uzunlukta bir dizeye tek yönlü dönüşümüdür.
  • Kriptografik hash fonksiyonları çarpışma direnci ve çığ etkisi sağlar.
  • SHA-256, modern sistemlerde kriptografik hashing için NIST standardıdır.
  • Güvenli parola depolama için parola KDF'leri (bcrypt, Argon2, scrypt) zorunludur.
  • Tuz, gökkuşağı tablolarına karşı korur ve her kullanıcı için benzersiz olmalıdır.
  • MD5 ve SHA-1 kırılmış olarak kabul edilir ve yeni projelerde kullanılmamalıdır.
  • Hashing, parola depolama, veri bütünlüğü doğrulaması, önbellekleme ve antivirüs koruması için kullanılır.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun