Sitemap

SHA-256: Kapsamlı Teknik Referans

10 min readApr 19, 2026

--

1. SHA-256 Nedir?

SHA-256, Secure Hash Algorithm 2 ailesinin 256-bit çıktı üreten üyesidir. Kriptografik özet fonksiyonları kategorisine girer; yani bir tür “dijital parmak izi makinesi” olarak düşünebilirsiniz.

Bir özet fonksiyonu şu işi yapar: ne kadar uzun olursa olsun herhangi bir girdiyi alır ve her zaman sabit uzunlukta bir çıktıya dönüştürür. SHA-256 bu dönüşümü yaparken üç temel güvenlik özelliğini garanti altına alır.

Çarpışma direnci (collision resistance) bu özelliklerin belki de en önemlisidir. Çarpışmayı anlamak için önce şunu somutlaştıralım: iki farklı metin SHA-256 işleminden geçirilince teorik olarak aynı çıktıyı üretebilir mi?

Cevap matematiksel olarak evet’tir; çünkü sonsuz sayıda girdi, sonlu sayıda çıktıya (256 bit = yaklaşık 1⁰⁷⁷ olasılık) sıkıştırılmaktadır. Bu duruma çarpışma denir. Ancak SHA-256'nın güvencesi şudur: böyle bir çarpışmayı kasıtlı olarak bulmak, yani “şu hash değerini verecek farklı bir metin bulayım” demek, hesaplamalı açıdan imkânsızdır.

Yaklaşık 2128 deneme gerekmektedir ki bu sayı, tüm dünyanın bilgi işlem gücünün milyonlarca yılı aşkın çalışmasına karşılık gelir. Dolayısıyla çarpışma var olabilir, ama hiçbir zaman bulunamaz; bu fark kritiktir.

Birinci ön-görüntü direnci (preimage resistance) ise şu anlama gelir: elinizde bir hash değeri varken o hash’i üreten orijinal metni geri bulmak imkânsızdır. Tek yönlülük olarak da adlandırılan bu özellik sayesinde SHA-256, tersine çevrilemeyen bir dönüşüm sunar.

İkinci ön-görüntü direnci (second preimage resistance): Elinizde bir metin ve onun hash değeri varken, aynı hash’i üretecek farklı bir metin bulmak yine hesaplamalı açıdan imkânsızdır.

Bu üç özellik bir araya gelince SHA-256, gerçek bir parmak izi gibi davranır. Milyonlarca byte’lık bir dosyada tek bir karakter bile değiştirilse çıktı tamamen farklı olur. Bunu gösteren somut bir örnek:

Press enter or click to view image in full size

2. Tarihsel Arka Plan — Kim Buldu, Ne Zaman?

SHA algoritma ailesi, NSA’nın (ABD Ulusal Güvenlik Ajansı) elinden çıkmıştır ve NIST (Ulusal Standartlar ve Teknoloji Enstitüsü) aracılığıyla kamuya standart olarak sunulmuştur.

1993 — SHA-0: NSA tarafından tasarlandı ve Federal Bilgi İşleme Standardı olarak yayımlandı. 160-bit çıktı üretiyordu. Ancak yayımlanmasının hemen ardından NSA, kamuoyuyla paylaşmadığı bir “tasarım hatası” gerekçesiyle algoritmayı geri çekti. Bu geri çekilme bugün hâlâ tam olarak açıklanmış değildir.

1995 — SHA-1: Söz konusu gizli düzeltmelerin ardından SHA-1 ortaya çıktı. Uzun yıllar boyunca TLS, SSH, PGP ve Git gibi kritik sistemlerin omurgasını oluşturdu.

2001 — SHA-2 ailesi (SHA-256 dahil): Akademik kriptografların SHA-1'e yönelik teorik saldırılar geliştirmeye başlaması üzerine NSA, yeni bir tasarım üzerinde çalışmaya başladı ve SHA-2 ailesi doğdu. SHA-256 bu dönemde ortaya çıktı.

2005: Çinli matematikçi Xiaoyun Wang ve ekibi SHA-1'e pratik çarpışma saldırıları gerçekleştirebildiklerini kanıtladı. Bu gelişme, SHA-256'ya geçişi endüstri genelinde hızlandırdı.

2017 — SHAttered: Google ve Amsterdam’daki CWI araştırma merkezi, dünyanın ilk gerçek SHA-1 çarpışmasını kamuoyuyla paylaştı. Aynı SHA-1 değerine sahip iki farklı PDF belgesi oluşturuldu ve herkesin incelemesine sunuldu. Bu noktadan itibaren SHA-1 tarihe karıştı.

2012 — SHA-3: NIST, olası bir SHA-2 zayıflığına karşı yedek olarak Keccak algoritması üzerine kurulu SHA-3'ü standart seçti. SHA-2 ile SHA-3 bugün itibarıyla yan yana var olmaya devam ediyor; biri diğerinin yerini almadı.

SHA-256'yı tasarlayan mühendislerin isimleri kamuoyuyla hiçbir zaman resmi olarak paylaşılmadı; NSA içi bir proje olarak kaldı.

3. Algoritma Nasıl Çalışır?

Algoritmayı bir fabrikaya benzetebilirsiniz. Ham madde (girdiniz) fabrikaya girer, birkaç üretim aşamasından geçer ve sonunda sabit boyutlu bir ürün (256-bit özet) çıkar. Bu fabrikayı üç aşamada inceleyelim.

3.1 Ön-İşleme — Girdiyi Bloklara Bölme

SHA-256, girdinizi 512-bit’lik (64 byte’lık) eşit parçalar hâlinde işler. Girdinizin boyutu bu bloklara tam bölünmeyebileceğinden, son blok standart bir kurala göre doldurulur (bu işleme padding denir). Doldurmada hem blok boyutunu tamamlayan anlamsız bitler hem de orijinal mesajın uzunluk bilgisi eklenir. Uzunluk bilgisinin eklenmesi önemlidir: aksi takdirde farklı uzunluktaki iki metin aynı dolgulu bloğu oluşturabilir ve bu durum güvenlik açığı doğurur.

3.2 Başlangıç Değerleri — Başlangıç Noktası

Algoritmanın çalışmaya başlamak için 8 adet sabit 32-bit sayıya ihtiyacı vardır. Bu sayılar tamamen keyfi değildir; ilk 8 asal sayının (2, 3, 5, 7, 11, 13, 17, 19) kareköklerinin ondalık kısmından türetilmiştir. Kriptografide bu yönteme “nothing-up-my-sleeve numbers” — yani “Hiçbir gizli amacı olmayan rakamlar” denir. Amacı şeffaflıktır: herkes bu sayıların nereden geldiğini denetleyebilir; hiçbir gizli arka kapı olup olmadığını matematiksel olarak doğrulayabilir.

3.3 Sıkıştırma — 64 Tur İşlem

Her 512-bit blok, 64 turdan oluşan yoğun bir işlem sürecinden geçirilir. Her turda basit ama bir araya gelince güçlü olan üç temel operasyon kullanılır.

XOR (dışlayıcı veya): İki bit aynıysa 0, farklıysa 1 üretir. Hash fonksiyonlarında bilgileri birbirine karıştırmak için temel araçtır.

Dairesel kaydırma (bit rotation): 32-bit bir sayının bitlerini sağa veya sola kaydırıp çıkan bitleri öbür uca yapıştırır. Bu sayede hiçbir bit yok olmaz, sadece konumu değişir. Kriptografide buna yayılım (diffusion) denir: girdinin etkisi çıktının her köşesine ulaşır.

Modüler toplama: İki sayıyı toplar; sonuç ²³² sınırını aşarsa taşan kısım atılır. Bu, geri dönüşü olmayan bir bilgi kaybı yaratır ve hash’in tersine çevrilmesini güçleştirir.

Her turda bu üç operasyon, 8 çalışma değişkeni ve o tura ait sabitle (toplamda 64 sabit vardır; ilk 64 asal sayının küp köklerinden türetilir) birleştirilir. 64 tur tamamlandığında elde edilen değerler, bloğun başındaki hash değerleriyle toplanır. Bu sonuç bir sonraki bloğun başlangıç değeri olur. Tüm bloklar işlendiğinde elde kalan 256-bit değer nihai özetinizdir.

3.4 Çığ Etkisi

SHA-256'nın en çarpıcı özelliklerinden biri çığ etkisidir (avalanche effect): girdide tek bir bit bile değiştirilse çıktının yaklaşık %50'si, yani ortalama 128 bit farklılaşır. Bu, algoritmanın rastlantısallık özelliğinin en somut göstergesidir ve kasıtlı olarak tasarlanmıştır.

4. Kimler Kullanıyor, Ne Amaçla?

SHA-256'nın kullanım alanları o denli geniştir ki, modern dijital altyapıyı ayakta tutan temel bileşenlerden biri olduğunu söylemek hiç de abartı değildir.

SSL/TLS sertifikaları: Tarayıcınızın adres çubuğundaki kilit simgesi, arka planda SHA-256 ile doğrulanan bir imzaya dayanır. Web sunucusu sizi karşıladığında sunduğu kimlik belgesi SHA-256 ile imzalanmıştır; tarayıcınız bu imzayı doğrulayarak sunucunun gerçekten iddia ettiği kurum olduğunu anlar.

Bitcoin ve kripto para madenciliği: Bitcoin’in iş kanıtı mekanizması (Proof of Work) SHA-256 üzerine kuruludur. Madenciler, belirli bir koşulu sağlayan bir sayı (nonce) bulmak için sürekli SHA-256 hesaplaması yapar. Bitcoin’de SHA-256 iki kez art arda uygulanır; bu tercih, belirli yapısal saldırılara karşı ek güvenlik katmanı sağlar.

Git versiyon kontrol sistemi: git log ile gördüğünüz commit hash'leri, kaynak kodunuzun kriptografik parmak izidir. Git tarihi yeniden yazmak neredeyse imkânsızdır; çünkü bir commit değiştiğinde hash'i değişir, bu da onu işaret eden her şeyin hash'ini değiştirir ve zincir bozulur.

Dijital imzalar: Bir belge imzalanmadan önce SHA-256 ile özetlenir; ardından bu küçük özet değer imzalanır. Bu yaklaşım hem hız sağlar (büyük belgenin tamamını şifrelemek yerine 32 byte imzalanır) hem de bütünlük güvencesi verir.

Kod imzalama: macOS, Windows ve Linux paket yöneticileri, indirdiğiniz yazılımın kaynaktan değiştirilmediğini SHA-256 özet karşılaştırmasıyla doğrular. apt, brew veya winget ile bir şey kurduğunuzda arka planda bu doğrulama gerçekleşir.

HMAC-SHA-256: API kimlik doğrulamasında ve mesaj bütünlüğü doğrulamasında kullanılır. AWS imzalama, OAuth ve webhook güvenliği bu yapıyı kullanır. Düz SHA-256'dan yapısal olarak daha güvenlidir; bunun nedenini bir sonraki bölümde açıklıyoruz.

Parola saklama: Doğrudan SHA-256 parola saklamak için kullanılmamalıdır (nedenini güvenlik bölümünde ele alacağız); ancak bcrypt ve Argon2 gibi güvenli parola hash algoritmalarının iç yapılarında SHA-256 bileşenleri yer alabilir.

5. Güvenlik Analizi — Açıklar ve Kısıtlamalar

5.1 Mevcut Güvenlik Durumu

SHA-256, bugün itibarıyla kriptografik açıdan güvenli kabul edilmektedir. Bilinen herhangi bir pratik saldırı mevcut değildir. Teorik saldırılar bile gerçekçi kaynaklarla hayata geçirilmesi mümkün olmayan maliyetler gerektirmektedir. Bu algoritma, kripto para ekosistemi nedeniyle dünyanın en güçlü bilgisayarları tarafından sürekli analiz edilmekte; yine de üstüne gidilememektedir.

5.2 Uzunluk Uzatma Saldırısı (Length Extension Attack)

Bu, SHA-256'nın gerçek ve belgelenmiş bir yapısal zayıflığıdır. Özellikle API geliştiren yazılımcılar için kritik öneme sahiptir; çünkü yanlış kullanım durumunda saldırganlar sahte mesajları gerçekmiş gibi gösterebilir.

Get Sadık Emre Çizmecioğlu’s stories in your inbox

Join Medium for free to get updates from this writer.

Senaryo şöyle işler: bir sunucu, API mesajlarını SHA-256(gizli_anahtar + mesaj) formülüyle doğruluyorsa, saldırgan bu hash değerini ele geçirdiğinde gizli anahtarı bilmeksizin farklı bir mesajın hash'ini türetebilir. Bunun nedeni SHA-256'nın iç çalışma yapısındadır: algoritmanın durumu son hash değeriyle birebir örtüşür ve bu durum dışarıya sızar.

Korunma yöntemi .NET’te şöyle uygulanır:

Press enter or click to view image in full size

HMAC (Hash-based Message Authentication Code), gizli anahtarı mesajla iki farklı şekilde birleştirerek iç yapıyı dışarıya sızdırmayan bir sarmalayıcı oluşturur. API güvenliğinde her zaman ham SHA-256 yerine HMAC-SHA-256 tercih edilmelidir.

5.3 GPU ve ASIC ile Kaba Kuvvet — Parola Saklama Neden Tehlikeli

SHA-256, değişken bellek gereksinimi olmadan saf hesaplama gücüyle çalışır ve mükemmel biçimde paralelleştirilebilir. Bu nedenle bir modern ASIC, saniyede yüz trilyon SHA-256 hesabı yapabilir.

Bu durum, parola saklamak için SHA-256'nın neden tehlikeli olduğunu açıklar: bir veritabanı sızdırıldığında saldırganlar GPU veya ASIC kümeleriyle milyarlarca olası parolayı saniyeler içinde deneyebilir. Çözüm kasıtlı olarak yavaş tasarlanmış algoritmalar kullanmaktır.

Press enter or click to view image in full size

BCrypt, scrypt ve Argon2id bu sorunu kasıtlı yavaşlık ve yüksek bellek gereksinimi ile çözer. ASIC optimizasyonu bu algoritmalar için anlamsızdır; çünkü bellek bant genişliği bottleneck olarak öne çıkar.

5.4 Yan Kanal Saldırıları (Side-Channel Attacks)

Algoritmanın matematiksel zayıflığından değil, uygulamasından kaynaklanan saldırılardır. En yaygın türü zamanlama saldırısıdır (timing attack).

İki hash değeri == operatörüyle karşılaştırıldığında, karşılaştırma genellikle ilk eşleşmeyen byte'ta durur. Bu çok küçük zaman farkı, saldırgana hangi byte'ların doğru olduğu hakkında bilgi sızıntısı yaratır. Binlerce denemeyle doğru hash değeri bayt bayt tespit edilebilir.

Press enter or click to view image in full size

CryptographicOperations.FixedTimeEquals, .NET'in standart kütüphanesinde yerleşik olarak bulunur ve her zaman aynı sürede tamamlanır; böylece zamanlama bilgisi sızmaz.

5.5 Kuantum Hesaplama Tehdidi

Kuantum bilgisayarlar kriptografi dünyası için ciddi bir tehdit oluşturmaktadır; ancak SHA-256 için bu tehdit sınırlıdır. Grover algoritması adlı bir kuantum arama yöntemi, SHA-256'ya karşı ön-görüntü saldırısının teorik maliyetini yarıya indirir: ²²⁵⁶ yerine ²¹²⁸ işlem yeterli hale gelir. Ancak ²¹²⁸ operasyon bugün bile hesaplanamaz bir büyüklüktür; dolayısıyla SHA-256 kuantum sonrası dönemde de güvenli kabul edilmektedir.

RSA ve ECDSA gibi asimetrik algoritmalar ise Shor algoritmasıyla kırılabildiğinden çok daha ciddi bir tehdit altındadır. Post-kuantum kriptografi araştırmalarının ağırlığı bu nedenle asimetrik algoritmalara yöneliktir.

6. SHA-2 Ailesi ve Türevler

SHA-2 tek bir algoritma değil, aynı temeli paylaşan bir ailedir. Her üyenin çıktı boyutu, işlediği blok boyutu ve tur sayısı birbirinden farklıdır.

SHA-224, SHA-256'nın neredeyse aynısıdır; farkı yalnızca başlangıç değerlerinin farklı olması ve çıktının son 32 bitinin atılmasıdır. 112-bit güvenlik düzeyi sunar; AES-128 ile eşdeğerdir. Bellek kısıtlı gömülü sistemlerde tercih edilir.

SHA-512, SHA-256'nın 64-bit kelimelerle çalışan büyük kardeşidir. 32-bit sistemlerde daha yavaştır; ancak 64-bit işlemcilerde zaman zaman SHA-256'dan daha hızlı çalışabilir, çünkü aynı güvenlik seviyesi için daha az blok işlenir. Uzun vadeli arşivleme ve kritik altyapı için tercih edilir.

SHA-512/256, az bilinen ama dikkat çekici bir üyedir. SHA-512 algoritmasını farklı başlangıç değerleriyle çalıştırır ve çıktının ilk 256 bitini alır. Böylece hem SHA-256 ile aynı çıktı boyutuna sahip olur hem de SHA-512'nin 64-bit optimizasyonlarından yararlanır. Ayrıca uzunluk uzatma saldırısına karşı yapısal olarak daha dayanıklıdır.

SHA-3 (Keccak), SHA-2 ile aynı çıktı boyutlarını sunar (SHA3–256, SHA3–512 vb.) ama tamamen farklı bir yapıya sahiptir. Merkle–Damgård yerine sünger yapısını (sponge construction) kullanır. Bu yapı sayesinde uzunluk uzatma saldırısına karşı doğası gereği bağışıktır. SHA-2'ye paralel olarak geliştirilen bir “yedek” olarak düşünülebilir: SHA-2'de bugün bilinmeyen bir zayıflık keşfedilse bile SHA-3 tamamen bağımsız bir algoritmaya dayandığı için güvenilir kalmaya devam eder.

7. BLAKE2 ve BLAKE3 — Hızlı Alternatifler

BLAKE2, SHA-3 yarışmasında finalistler arasında yer alan bir algoritmadır. SHA-256'dan 3 ila 5 kat daha hızlıdır ve güvenlik düzeyi eşdeğerdir. libsodium, WireGuard ve Argon2 tarafından dahili olarak kullanılmaktadır.

BLAKE3, 2020'de duyurulan modern bir kriptografik hash fonksiyonudur. Çok çekirdekli işlemcilerde içsel paralelleştirme desteğiyle SHA-256'dan 10 ila 20 kat daha hızlı çalışabilir. Gömülü sistemlerde ripgrep ve zig derleyicisi gibi performans kritik projelerde benimsenmektedir. Standart anlamda SHA-256'nın yerini almamıştır; ancak büyük dosyaların hızla özetlenmesi gereken durumlarda güçlü bir alternatiftir.

8. Donanım Düzeyinde SHA-256

Modern Intel ve AMD işlemcilerin büyük çoğunluğu, SHA-256 hesaplamasını donanım düzeyinde hızlandıran özel talimatlar barındırır. SHA256RNDS2, SHA256MSG1 ve SHA256MSG2 adlı bu talimatlar sayesinde yazılım tabanlı SHA-256 uygulaması 4 ila 6 kat hızlanır.

.NET’te bu donanım hızlandırmasından otomatik olarak yararlanılır; ek bir yapılandırma gerekmez. Çalışma zamanı, işlemcinin yeteneklerini tespit eder ve varsa donanım talimatlarını devreye sokar.

Press enter or click to view image in full size

ARM mimarisinde ise ARMv8-A Cryptographic Extensions içindeki SHA256H ve SHA256H2 talimatları eşdeğer görevi üstlenir. .NET'in System.Security.Cryptography katmanı bu farkları tamamen soyutladığından uygulama kodu değişmez.

9. Pratik Uygulama Notları — .NET Geliştiricisine Rehber

Girdinin kodlamasına dikkat edin. SHA-256("café") sonucu, metnin UTF-8 mi yoksa Latin-1 mi olduğuna göre farklılık gösterir. Karşılaştırmalar yapılacaksa her iki tarafın aynı kodlamayı kullandığından emin olun. .NET'te Encoding.UTF8.GetBytes() her zaman tutarlı bir tercih noktasıdır.

Hex ve Base64 çıktısını karıştırmayın. SHA-256 ham çıktısı 32 byte’tır. Hex kodlamasıyla 64 karakter, Base64 kodlamasıyla 44 karakter elde edilir. Bunları aynı sistemde karıştırmak gizli karşılaştırma hatalarına yol açar. Convert.ToHexString() ve Convert.ToBase64String() arasında bilinçli seçim yapın.

Press enter or click to view image in full size

Sabit zamanlı karşılaştırma zorunludur. Hash değerlerini == veya SequenceEqual ile karşılaştırmak zamanlama saldırısına kapı aralar. Güvenlik bağlamındaki her hash karşılaştırmasında CryptographicOperations.FixedTimeEquals kullanın.

HMAC-SHA-256'yı doğru anlayın. API imzalama, webhook doğrulama veya herhangi bir mesaj kimlik doğrulaması söz konusu olduğunda ham SHA-256 değil HMAC-SHA-256 tercih edilmelidir. .NET’teki HMACSHA256 sınıfı bu iş için özel olarak tasarlanmıştır.

Press enter or click to view image in full size

SHA256.HashData() statik metodunu tercih edin. .NET 5 ve sonrasında gelen bu metot, SHA256.Create() ile nesne oluşturmaya ve ComputeHash() çağırmaya kıyasla hem daha kısa hem de nesne yönetimi açısından daha güvenlidir.

Dispose’u unutmayın. SHA256.Create() ile oluşturulan nesneler IDisposable implement eder; using bloğu veya using var kullanılmazsa yönetilmeyen kaynaklar serbest bırakılmaz.

10. Sonuç: SHA-256'nın Yeri ve Geleceği

SHA-256, yirmi beş yılı aşkın süredir aktif olarak kullanımda olan ve herhangi bir pratik kriptografik saldırıyla zayıflamayan nadir algoritmalardan biridir. Bitcoin’in 2009'da SHA-256'yı temel almasıyla algoritmaya olan ilgi ve denetim katlanarak arttı; bugün dünyanın en güçlü bilgi işlem altyapısı SHA-256 hesaplamasına adanmış durumdadır ve yine de üstüne gidilememektedir.

Kriptografik güvenliği için somut bir tehdit hâlâ mevcut değildir. Kuantum sonrası dönemde de 128-bit güvenlik seviyesini koruyacağı öngörülmektedir.

Bununla birlikte, her araç gibi SHA-256'nın da uygun ve uygunsuz kullanım alanları vardır. Ham SHA-256; parola saklamak, tek başına mesaj doğrulamak veya büyük hash çıktılarına ihtiyaç duyulan senaryolar için yanlış araçtır. Bu durumların her biri için bcrypt/Argon2id, HMAC-SHA-256 ve SHA-512 gibi özelleşmiş çözümler mevcuttur.

--

--

Sadık Emre Çizmecioğlu
Sadık Emre Çizmecioğlu

Written by Sadık Emre Çizmecioğlu

0 followers

Yazılımcıyım ve mesleğim hakkında teknik konulardan konuşuyorum. Selamss✌️