Comparison
SHA-1 ve SHA-256: SHA-1 öldü ama Git hâlâ kullanıyor
SHA-1: kullanmayın. SHA-256: evet, her şey için.
By Buğra SözeriPublished
Özet.SHA-1 kriptografik olarak kırıldı — pratik bir çakışma Google tarafından 2017’de gösterildi ve seçilmiş önek saldırıları 2020’de uygun fiyatlı hale geldi — bu nedenle her yeni güvenlik uygulaması için SHA-256 kullanın. Git hâlâ nesne hash’leri için SHA-1 kullanıyor ama geçiş yapıyor; güvenlik dışı parmak izi (önbellekler, tekilleştirme) etkilenmiyor.
SHA-1 (160 bit çıktı, 1995) ve SHA-2 ailesi (256/384/512 bit çıktılar, 2001), her ikisi de NIST tarafından yayınlanan kriptografik hash fonksiyonlarıdır. SHA-1, 2000’lerde baskın bütünlük hash’iydi. Güvenliğin önemli olduğu her yerde artık kullanımdan kaldırıldı — ama henüz her yerde değil.
Temel bilgiler
| Özellik | SHA-1 | SHA-256 |
|---|---|---|
| Çıktı boyutu | 160 bit (40 hex karakter) | 256 bit (64 hex karakter) |
| Yayınlanma | 1995 (NIST FIPS 180-1) | 2001 (NIST FIPS 180-2) |
| Teorik çakışma | 2005 (Wang ve ark., 2⁶⁹) | Hiç gösterilmedi |
| Pratik çakışma | 2017 (Google SHAttered, ~110.000$ bulut maliyeti) | 2026 itibarıyla yok |
| TLS sertifikalarındaki durumu | 2017’de kullanımdan kaldırıldı | Mevcut standart |
| Git’teki durumu | Hâlâ varsayılan, geçiş devam ediyor | SHA-256 depoları ile isteğe bağlı |
| Hız (x86-64) | ~700 MB/s | ~400 MB/s (daha yavaş) |
SHA-1 nasıl kırıldı
Kriptografik hash fonksiyonu, aynı hash’i üreten iki girdi bulmayı hesaplama açısından imkânsız kılmalıdır. SHA-1’in 160 bit çıktısı, 1995’teki tasarım zamanında kaba kuvvet bütçelerinin çok ötesinde 2⁸⁰ çakışma direnci sağladı.
Üç dönüm noktası bunu aşındırdı:
- 2005: Wang, Yin ve Yu, çakışma aramasını ~2⁶⁹ işleme indirgeyen teorik bir saldırı yayınladı — o zaman için hâlâ mümkün değildi ama açık bir uyarı atışıydı.
- 2017: Google’ın SHAttered projesi, ilk pratik SHA-1 çakışmasını gösterdi: aynı SHA-1 hash’ine sahip iki PDF. Maliyet: ~110.000$ GPU bulut süresi ve 9 kentilyon SHA-1 değerlendirmesi.
- 2020: Leurent ve Peyrin, seçilmiş önek çakışma saldırısı yayınladı — herhangi iki rastgele dosya başlığı verildiğinde, özenle hazırlanmış baytlar ekleyerek çakışan dosyalar üretildi. Maliyet: bulut bilişimde ~45.000$. Bu, gerçek dünyada sahte sertifikalara ve sahte imzalara olanak tanıyan saldırı türüdür.
2020’den sonra SHA-1, sahteciliğin önemli olduğu herhangi bir güvenlik amacı için uygunsuz hale geldi.
SHA-1’in hâlâ kabul edilebilir olduğu yerler
Çakışma sahteciliği için saldırgan teşviki olmayan güvenlik dışı parmak izi — hâlâ SHA-1 ile iyidir:
- Git commit ve ağaç nesnesi hash’leri. Saldırganın çakışmayı taklit etmesi, hazırlanmış commit’leri enjekte etmesi ve bunların ana akım aynalara kabul edilmesi gerekir. Git ayrıca her işlemde bilinen saldırı kalıplarının SHA-1 tespitini (SHAttered tespiti) çalıştırır.
- Tüm girdileri kontrol ettiğiniz içerik adreslenebilir depolama (derleme önbellekleri, CDN tekilleştirmesi).
Bu durumlarda bile SHA-256, yeni sistemler için doğru varsayılandır. Performans farkı (SHA-256, çoğu modern CPU’da SHA-1’den ~%40 daha yavaş) neredeyse her iş yükü için önemsizdir.
SHA-256’nın zorunlu olduğu yerler
- TLS sertifika imzaları. Tarayıcılar 2017’de SHA-1’i kabul etmeyi bıraktı.
- JWT imzaları (HS256, RS256, ES256). 256, SHA-256’dır.
- Kod imzalama. Microsoft ve Apple, 2016-2017 civarında SHA-1 imzalarını kabul etmeyi bıraktı.
- Çakışma saldırılarının sahteciliği etkinleştireceği her yer. Belge imzaları, kripto para, kimlik kanıtları.
Git geçişi
Git, 2018’den beri SHA-256’ya geçiş yapıyor. Geçiş teknik olarak basit ama her Git sunucusunun, her CI/CD sisteminin, her bağımlılık yöneticisinin her ikisini de desteklemesi gerektiğinden zaman alıyor. 2026 itibarıyla durum:
- SHA-256 depoları modern Git’te uçtan uca çalışıyor.
- GitHub, SHA-256 depolarını destekliyor ama yeni depolar için SHA-1’i varsayılan olarak kullanıyor.
- GitLab ve Bitbucket: sürüme göre değişen kısmi destek.
- Çoğu CI entegrasyonu her ikisiyle de çalışıyor.
Git CLI için varsayılan davranış hâlâ SHA-1. SHA-256 deposu oluşturmak için: git init --object-format=sha256. Geçiş tamamlandığında — muhtemelen 2027-2028 zaman diliminde — varsayılan değişecek.
Pragmatik kural
- Yeni sistemler için: SHA-256. Her zaman. Performans farkı önemli değil.
- Eski SHA-1 sistemleri için: mümkün olduğunda geçiş yapın ama panik yapmayın — tehdit gerçek ama spesifik.
- Git özelinde: SHA-1 şimdilik yeterli. SHA-256’nın varsayılan olmasını izleyin.
- TLS, kod imzalama, JWT, kripto için: SHA-256 zaten tek kabul edilebilir seçimdi.
Her iki hash’i de hash üretecimizle hesaplayın.
Sayısal gerçekler
- Hex uzunluğu: SHA-1 = 40 karakter (160 bit); SHA-256 = 64 karakter (256 bit); base64url = doldurmadan 27 karaktere karşı 43 karakter.
- Doğum günü sınırı çakışma direnci: SHA-1 genel ~2⁸⁰, 2017 SHAttered saldırısından sonra ~2⁶¹’e düştü; SHA-256 ~2¹²⁸’de kalıyor.
- SHAttered maliyeti (2017): 9.223.372.036.854.775.808 SHA-1 değerlendirmesi, GPU bulut süresinde ~110.000$, 6.500 CPU yılı eşdeğeri.
- Seçilmiş önek saldırısı (Leurent & Peyrin, 2020): AWS’de ~45.000$ — orta ölçekli suç örgütlerinin karşılayabileceği tutar.
- Intel SHA-NI üzerinde verim (Ice Lake / Zen 3+): SHA-1 ~2,1 GB/s/çekirdek; SHA-256 ~1,9 GB/s/çekirdek — donanım hızlandırma farkı ~%10’a indiriyor, %40’a değil.
- Donanım hızlandırması olmadan: SHA-1 ~700 MB/s’ye karşı SHA-256 ~400 MB/s — insanların alıntıladığı eski ~%40 fark.
- Blok boyutu: her ikisi de 512 bit blok kullanır; SHA-1 160 bit durum, SHA-256 256 bit durum üretir.
- 2017’de tarayıcılar: Chrome 56, Firefox 51, Edge — hepsi 24 Ocak 2017’de SHA-1 TLS sertifikalarını kabul etmeyi bıraktı.
Karar matrisi
| Kullanım durumu | Hash |
|---|---|
| TLS sertifika imzası | SHA-256 (SHA-1 yasaklı) |
| JWT HS256/RS256/ES256 | SHA-256 |
| API isteği imzalama için HMAC | HMAC-SHA-256 |
| Kod imzalama (Authenticode, codesign) | SHA-256 |
| Bitcoin blok / adres türetme | SHA-256 (çift hash) |
| Git nesne hash’i (eski depo) | Çakışma tespiti ile SHA-1 kabul edilebilir |
| Git nesne hash’i (yeni depo) | --object-format=sha256 ile SHA-256 |
| CDN ETag / önbellek anahtarı | Her ikisi; modern CPU’larda SHA-256 iyidir |
| Parola hash’leme | Hiçbiri — argon2id / bcrypt / scrypt kullanın |
Kaynaklar
- NIST FIPS 180-4 — Güvenli Hash Standardı — csrc.nist.gov/pubs/fips/180-4.
- Stevens, M. ve ark. — The first collision for full SHA-1, CRYPTO 2017 (SHAttered) — shattered.io.
- Leurent, G. & Peyrin, T. — SHA-1 is a Shambles, USENIX Security 2020 — sha-mbles.github.io.
Frequently asked questions
- SHA-1 gerçekten kırıldı mı?
- Evet — 2017’den beri pratikte (Google’ın SHAttered’ı 110.000 dolarlık hesaplama ile gerçek bir PDF çakışması gösterdi) ve 2020’den beri dramatik biçimde (45.000 dolara seçilmiş önek çakışmaları). Saldırganın sahte bir hash’ten yararlandığı herhangi bir güvenlik kullanım durumu savunmasızdır.
- Git neden hâlâ SHA-1 kullanıyor?
- Atalet ve pragmatik tehdit modeli. Git’in hash’leri güvenlik token’ları değil içerik adreslenebilirdir ve Git’in gönderdiği SHAttered algılama mantığı bilinen saldırı kalıplarını yakalar. SHA-256 geçişi 2018’den beri devam ediyor ama her Git sunucusu ve aracının her ikisini de desteklemesi gerekiyor, bu da zaman alıyor.
- SHA-256, SHA-1’den daha yavaş mı?
- Çoğu modern CPU’da yaklaşık %40 daha yavaş — yaklaşık 400 MB/s’ye karşı 700 MB/s. Her ikisi de gerçekçi herhangi bir iş yükü için G/Ç ile sınırlandırılmıştır, dolayısıyla fark nadiren anlamlıdır. Donanım hızlandırma (Intel SHA uzantıları, ARMv8 kripto) farkı daha da daraltır.
- SHA-1’i asla kullanmamalı mıyım?
- TLS sertifika imzaları (tarayıcılar 2017’de kabul etmeyi bıraktı), JWT imzaları, kod imzalama, belge imzaları, kripto para, kimlik kanıtları — sahte bir çakışmanın saldırgana yarar sağlayacağı her yer. SHA-256 veya daha güçlü, yeni sistemler için tek kabul edilebilir varsayılandır.
Related
Published May 15, 2026