Kısaca cevap
SHA-256, her boyuttaki veriden 256 bitlik (64 onaltılık karakter) sabit bir "parmak izi" üreten tek yönlü bir hash algoritmasıdır. NIST'in FIPS 180-4 standardında tanımlıdır ve SHA-2 ailesinin en yaygın üyesidir. Dosyaların değişmediğini doğrulamak, dijital imza atmak, HTTPS bağlantılarını korumak ve blokzincirdeki kayıtları birbirine bağlamak için kullanılır. Özetten asıl veri geri elde edilemez.
Bu sayfada
SHA-256 nedir?
SHA-256, "Secure Hash Algorithm 256" ifadesinin kısaltmasıdır. Adındaki 256, ürettiği özetin bit uzunluğunu gösterir. ABD standartlar kurumu NIST'in yayımladığı SHA-2 ailesine aittir; bu aile ilk kez Ağustos 2002'de yayımlanan FIPS 180-2 standardıyla tanımlandı, bugünkü güncel metin ise Ağustos 2015 tarihli FIPS 180-4'tür. FIPS 180-4 yedi algoritma tanımlar: SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 ve SHA-512/256.
Hash kavramını, MD5 ile farkını ve dijital imzanın genel mantığını Hash nedir? yazısında anlattık. Bu yazı SHA-256'nın kendisine odaklanıyor: nasıl çalıştığı, ne kadar güvenli olduğu ve nerede kullanıldığı.
SHA-256 ne işe yarar?
SHA-256'nın temel işi, bir verinin değişip değişmediğini kısa ve karşılaştırması kolay bir değerle göstermektir. Başlıca kullanım alanları:
- Dosya doğrulama: Yazılım üreticileri indirme dosyalarının SHA-256 değerini yayımlar; siz de indirdiğiniz dosyanın özetini hesaplayıp karşılaştırırsınız.
- Dijital imza ve sertifikalar: İmza, belgenin tamamı yerine SHA-256 özeti üzerinden atılır. HTTPS sertifikalarında da bu yöntem kullanılır.
- TLS (HTTPS) bağlantıları: TLS 1.3'ü tanımlayan RFC 8446, uyumlu her uygulamanın TLS_AES_128_GCM_SHA256 şifre takımını desteklemesini zorunlu tutar; adındaki SHA256 bu takımda kullanılan hash fonksiyonudur. Ayrıntılar SSL/TLS ve güvenli iletişim yazısında.
- HMAC-SHA256: Gizli bir anahtarla birlikte kullanılan SHA-256; API isteklerini ve oturum çerezlerini doğrulamakta yaygındır.
- Blokzincir: Bitcoin, blok özetleri ve iş kanıtı için SHA-256'yı art arda iki kez uygular.
NIST'in hash fonksiyonları politikası da birlikte çalışabilirlik gereken uygulamalarda en az SHA-256 kullanılmasını önerir.
SHA-256 algoritması nasıl çalışır?
SHA-256'nın matematiği karmaşık görünse de iş akışı dört adımda özetlenebilir. Aşağıdaki sayılar FIPS 180-4'ten alınmıştır.
| Özellik | SHA-256 |
|---|---|
| Girdi (mesaj) boyutu | 264 bitten küçük |
| Blok boyutu | 512 bit (64 bayt) |
| Sözcük (word) boyutu | 32 bit |
| Tur sayısı | Her blok için 64 tur |
| Özet boyutu | 256 bit (32 bayt, 64 hex karakter) |
1. Dolgu (padding)
Mesaj önce bitlere çevrilir. Sonuna bir adet "1" biti, ardından yeterince "0" biti eklenir; en sona da mesajın asıl uzunluğu 64 bitlik bir sayı olarak yazılır. Amaç, toplam uzunluğu 512'nin katına getirmektir. Bu yüzden 55 bayta kadar olan bir mesaj tek bloğa sığar, 56 baytlık bir mesaj ise iki blok tutar.
2. Başlangıç değerleri
Algoritma, sekiz adet 32 bitlik başlangıç değeriyle başlar. Bu değerler rastgele seçilmemiştir: ilk sekiz asal sayının (2, 3, 5, 7, 11, 13, 17, 19) kareköklerinin ondalık kısımlarının ilk 32 bitidir. Örneğin √2'den türetilen ilk değer 6a09e667'dir. Her turda kullanılan 64 sabit de ilk 64 asal sayının küpköklerinden aynı yöntemle elde edilir; ilki 428a2f98'dir. Böyle "gizlenecek bir şeyi olmayan" sabitler seçmek, tasarımcının sabitlerin içine gizli bir zayıflık yerleştirmediğine dair güven verir.
3. Sıkıştırma: 64 tur
Her 512 bitlik blok önce 16 adet 32 bitlik sözcüğe bölünür, sonra bit döndürme, kaydırma, XOR ve toplama işlemleriyle 64 sözcüğe genişletilir (mesaj çizelgesi). Ardından a'dan h'ye kadar adlandırılan sekiz çalışma değişkeni 64 tur boyunca karıştırılır. Her turda bit döndürme, XOR, "seçme" ve "çoğunluk" fonksiyonları ile 232 modunda toplama yapılır. Blok bitince sonuç, önceki ara özete eklenir ve sıradaki bloğa geçilir.
4. Sonuç
Son blok işlendiğinde sekiz adet 32 bitlik değer yan yana yazılır ve 256 bitlik özet ortaya çıkar. Her bloğun sonucu bir sonrakine aktarıldığı için mesajın herhangi bir yerindeki tek bir bit değişikliği bile son özeti tamamen değiştirir.
Örnek SHA-256 değerleri
Aşağıdaki özetler UTF-8 kodlamasıyla hesaplanmıştır. Tek bir büyük harfin veya noktanın bile sonucu nasıl baştan sona değiştirdiğine dikkat edin:
| Girdi | SHA-256 özeti |
|---|---|
| (boş metin) | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 |
| merhaba | 4c6bcdd55f3153e1939669ab1ec039e4059174dc25abdfcb2f58868849b4d61b |
| Merhaba | 7fdc9f4717c5fe66df286c700fab969b4d6209d03aa84624c5f8f58c17c9c058 |
| merhaba. | 8b41a7ef59f72526e03520ca771f652e36cf9fe7228b119e310285f0b9adc4f9 |
Boş metnin bile özeti vardır; çünkü dolgu adımı her zaman en az bir blok üretir. Bu değerleri SHA-256 hesaplama aracına aynı metinleri yazarak kendiniz doğrulayabilirsiniz; hesaplama tarayıcınızda yapılır. Türkçe karakterli metinlerde farklı sonuç almanızın en sık nedeni kodlama farkıdır (UTF-8 yerine eski Windows kodlaması).
SHA-256 nasıl hesaplanır? Python ve JavaScript örnekleri
Python'da standart kütüphanedeki hashlib yeterlidir:
import hashlib
ozet = hashlib.sha256("merhaba".encode("utf-8")).hexdigest()
print(ozet) # 4c6bcdd55f3153e1939669ab1ec039e4059174dc25abdfcb2f58868849b4d61b
print(len(ozet)) # 64
Tarayıcıda ve Node.js'te Web Crypto API kullanılabilir. Aşağıdaki kod Node.js 24'te bir .mjs dosyası olarak çalıştırılmıştır; tarayıcıda da aynı şekilde çalışır:
const veri = new TextEncoder().encode("merhaba");
const ozet = await crypto.subtle.digest("SHA-256", veri);
const hex = [...new Uint8Array(ozet)]
.map((b) => b.toString(16).padStart(2, "0"))
.join("");
console.log(hex); // 4c6bcdd55f3153e1939669ab1ec039e4059174dc25abdfcb2f58868849b4d61b
C# için ayrıntılı bir örnek C# ile SHA256 yazısında bulunuyor. Windows'ta bir dosyanın SHA-256 değeri için PowerShell'deki Get-FileHash komutu varsayılan olarak SHA-256 kullanır.
SHA-256 ne kadar güvenli?
Bir hash fonksiyonunun güvenliği birkaç ayrı soruyla ölçülür. NIST'in hash fonksiyonları sayfasına göre çakışma direncinin bit cinsinden gücü, çıktı uzunluğunun yarısıdır:
- Çakışma direnci (128 bit): Aynı özeti veren iki farklı girdi bulmak yaklaşık 2128 işlem gerektirir. Buradaki "yarıya inme", doğum günü paradoksu denen olasılık etkisinden kaynaklanır.
- Ön görüntü direnci (256 bit): Verilen bir özeti üreten herhangi bir girdiyi bulmak, deneme yoluyla 2256 mertebesinde iş ister.
Bu sayılar bugünkü ve öngörülebilir bilgisayar gücünün çok ötesindedir. MD5 ve SHA-1'in aksine, SHA-256 için bilinen pratik bir çakışma saldırısı yoktur. NIST de 2015 tarihli politikasında SHA-2 kullanan uygulamaların SHA-3'e geçmesine şu an gerek olmadığını belirtir.
Uzunluk uzatma: yanlış kullanımda ortaya çıkan zayıflık
SHA-256'nın tasarımından gelen bir özelliği vardır: özet(gizli + mesaj) değerini bilen biri, gizli değeri bilmeden gizli + mesaj + ek biçimindeki uzatılmış bir mesajın geçerli özetini hesaplayabilir. Buna uzunluk uzatma (length extension) saldırısı denir; NIST'e FIPS 180-4 için iletilen kamu yorumlarında da SHA-256 ve SHA-512'nin bu saldırıya açık olduğu ve HMAC kullanılması gerektiği vurgulanır.
Pratik sonucu basittir: bir mesajı gizli bir anahtarla doğrulamak istiyorsanız anahtarı mesajın başına ekleyip SHA-256 almayın, HMAC-SHA256 kullanın. HMAC'in iç yapısı bu saldırıyı engeller.
SHA-256 ile şifre saklanır mı?
Tek başına saklanmamalıdır. SHA-256 hızlı olacak şekilde tasarlanmıştır; bu dosya doğrulamada avantaj, şifre saklamada ise dezavantajdır. Sızan bir veritabanındaki SHA-256 özetleri üzerinde saldırgan, ekran kartlarıyla çok sayıda şifre tahminini kısa sürede deneyebilir. Aynı şifreyi kullanan iki kullanıcının özeti de aynı çıkar.
Şifreler için her kullanıcıya ayrı tuz (salt) ekleyen ve bilerek yavaş çalışan bcrypt, scrypt veya Argon2 kullanılmalıdır; ayrıntılar şifreler nasıl saklanmalı yazısında. Kullanıcı tarafında en iyi savunma ise uzun ve rastgele bir şifredir.
SHA-256, SHA-512 ve SHA-3 karşılaştırması
| Algoritma | Standart | Özet | Blok / sözcük | Not |
|---|---|---|---|---|
| SHA-256 | FIPS 180-4 | 256 bit | 512 / 32 bit | En yaygın; TLS, imza, blokzincir |
| SHA-224 | FIPS 180-4 | 224 bit | 512 / 32 bit | SHA-256'nın farklı başlangıç değerli, kısaltılmış hâli |
| SHA-512 | FIPS 180-4 | 512 bit | 1024 / 64 bit | Daha uzun güvenlik payı |
| SHA-512/256 | FIPS 180-4 | 256 bit | 1024 / 64 bit | SHA-512 altyapısıyla 256 bitlik özet |
| SHA3-256 | FIPS 202 | 256 bit | Farklı (sünger) yapı | SHA-2'den bağımsız tasarım, yedek seçenek |
Günlük işlerin neredeyse tamamında SHA-256 doğru seçimdir. Bir sistemin gereksinimleri başka bir algoritmayı şart koşmuyorsa onu değiştirmek için bir neden yoktur.
Sık sorulan sorular
SHA-256 nedir, kısaca?
SHA-256, ABD standartlar kurumu NIST'in FIPS 180-4 standardında tanımlanan ve her uzunluktaki veriden 256 bitlik sabit bir özet üreten kriptografik hash fonksiyonudur. Özet genellikle 64 karakterlik onaltılık bir metin olarak yazılır. Dosya doğrulama, dijital imza, TLS bağlantıları ve blokzincir gibi birçok yerde kullanılır.
SHA-256 çözülebilir mi?
Hayır. SHA-256 bir şifreleme değil, tek yönlü bir özet fonksiyonudur; özetten asıl veriyi geri hesaplayan bir anahtar veya yöntem yoktur. "SHA-256 çözücü" diye sunulan araçlar yalnızca daha önce hesaplanmış kısa ve yaygın metinlerin özetlerini bir tabloda arar. Uzun ve rastgele bir metnin özetini bu yolla bulmak mümkün değildir.
SHA-256 kaç karakterdir?
SHA-256 özeti 256 bit, yani 32 bayttır. Onaltılık (hex) gösterimde her bayt iki karakterle yazıldığı için 64 karakter eder. Base64 ile yazıldığında 44 karakter olur. Girdi tek harf de olsa, birkaç gigabaytlık bir dosya da olsa bu uzunluk değişmez.
SHA-256 hâlâ güvenli mi?
Evet. Bugün SHA-256 için bilinen pratik bir çakışma veya ön görüntü saldırısı yoktur ve NIST, SHA-2 kullanan uygulamaların SHA-3'e geçmesine şu an gerek olmadığını belirtir. Ancak şifre saklamak için tek başına uygun değildir; bunun için bcrypt, scrypt veya Argon2 gibi yavaş ve tuzlu yöntemler kullanılır.
SHA-256 ile SHA-512 arasındaki fark nedir?
İkisi de SHA-2 ailesindendir. SHA-256 32 bitlik sözcüklerle 512 bitlik bloklar üzerinde çalışıp 256 bitlik özet verir; SHA-512 ise 64 bitlik sözcüklerle 1024 bitlik bloklar üzerinde çalışır ve 512 bitlik özet verir. SHA-512 daha uzun güvenlik payı sunar, SHA-256 ise daha yaygın desteklenir ve çoğu iş için yeterlidir.



