# Hash Çakışması

Adres: https://softwaredictionary.org/tr/terimler/hash-collision
Kategori: Veri Yapıları
Son güncelleme: 2026-10-03
İngilizcesi: Hash Collision
Okunuşu: heş kılijın

Kısaca: Hash çakışması, iki farklı girdinin aynı hash değerine ya da kovaya düşmesidir; hash tabloları bunu ele alır, kriptografik hash'lerde pratikte bulunamamalıdır.

## Hash çakışması (hash collision) nedir?

Bir hash tablosu, olası anahtarların devasa bir aralığını sınırlı sayıda kovaya eşler; bu yüzden güvercin yuvası ilkesi gereği bazı anahtarlar bir kovayı paylaşmak zorundadır. Çakışmalar sezginin önerdiğinden daha erken gelir: doğum günü paradoksu, yalnızca 23 kişiyle ikisinin aynı doğum gününü paylaşma olasılığının %50'yi aştığını gösterir. İyi hash fonksiyonları anahtarları eşit dağıtır, ama çakışmalar olağan kalır.

Onları ele almanın iki ana yolu vardır. Ayrı zincirleme (separate chaining) her kovada küçük bir liste tutar; böylece çakışan anahtarlar yan yana durur. Açık adresleme (open addressing) ise her şeyi dizinin kendisinde saklar ve bir çakışmada başka boş bir yuva arar, örneğin sıradaki ilk yuvayı; buna doğrusal yoklama (linear probing) denir. Her iki durumda da tablolar ne kadar dolu olduklarını gösteren doluluk oranını (load factor) izler ve bu çok yükseldiğinde büyüyüp yeniden hash'ler; böylece aramalar ortalamada O(1) kalır.

Çakışmalar güvenlik için de önemlidir. Saldırganlar bir hash fonksiyonunu tahmin edebiliyorsa kasıtlı olarak çakışan çok sayıda anahtar göndererek O(1) aramaları O(n)'e çevirebilir ve bir sunucuyu sürüne sürüne çalışır hâle getirebilir; bu saldırıya hash flooding denir. Python ve Rust gibi dillerin string hash'lemelerini rastgeleleştirmesinin nedeni budur. Kriptografik hash'lerde ise herhangi bir çakışma bulmak bir kırılmadır: MD5 ve SHA-1, pratik çakışmalar bulunduğu için kırılmış kabul edilir.

Sık yapılan bir yanlış, iyi bir hash fonksiyonunun hiç çakışması olmadığını düşünmektir. Sınırsız girdiyi sabit boyutlu bir çıktıya eşleyen her fonksiyonun çakışmaları olmak zorundadır. Önemli olan, nadir ve eşit dağılmış olmaları ve kriptografik kullanımlar için kasıtlı olarak bulunmalarının mümkün olmamasıdır.

## Önemli noktalar

- Çakışma, farklı girdilerin bir hash değerini ya da kovayı paylaşmasıdır.
- Doğum günü paradoksunun gösterdiği gibi çakışmalar kaçınılmazdır ve erken gelir.
- Hash tabloları onları zincirleme ya da açık adreslemeyle ele alır ve doluluk oranına göre büyür.
- Tahmin edilebilir hash'ler hash flooding saldırılarına izin verir; diller onları rastgeleleştirir.
- Pratik çakışmalar MD5 ve SHA-1 gibi kriptografik hash'leri kırar.

## Örnek: Küçük bir hash tablosunda ayrı zincirleme (Python)

```python
class ChainedHashTable:
    def __init__(self, size=8):
        self.buckets = [[] for _ in range(size)]

    def _bucket(self, key):
        return self.buckets[hash(key) % len(self.buckets)]

    def put(self, key, value):
        bucket = self._bucket(key)
        for pair in bucket:
            if pair[0] == key:
                pair[1] = value
                return
        bucket.append([key, value])     # colliding keys share the bucket's list

    def get(self, key):
        for k, v in self._bucket(key):
            if k == key:
                return v
        return None

table = ChainedHashTable(size=2)        # tiny on purpose, so collisions happen
for word in ["apple", "banana", "cherry"]:
    table.put(word, len(word))
print(table.buckets)
```

## Sık sorulan sorular

**Hash tabloları çakışmaları nasıl ele alır?**

Her kovanın bir giriş listesi tuttuğu ayrı zincirlemeyle ya da çakışan bir girişin yoklamayla bulunan başka boş bir yuvaya yerleştirildiği açık adreslemeyle. Tablo dolmaya başladığında onu büyütmek çakışmaları nadir tutar.

**Hash çakışması MD5 ve SHA-1 için neden bir sorun?**

Kriptografik hash'ler imzalar ve bütünlük kontrolleri için kullanılır. Bir saldırgan aynı hash'e sahip iki farklı dosya oluşturabilirse birinin üzerindeki imza diğeri için de geçerli olur; bu yüzden bu algoritmalara artık güvenlik için güvenilemez.

**Doğum günü paradoksu nedir?**

23 kişilik bir grupta ikisinin aynı doğum gününü paylaşma olasılığının %50'den fazla olduğu şaşırtıcı gerçektir. Çakışmaların, bir hash uzayı dolmaya yaklaşmadan çok önce ortaya çıktığını gösterir.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
