SHA-1 (Secure Hash Algorithm 1), ABD Ulusal Güvenlik Ajansı (NSA) tarafından tasarlanmış ve NIST (National Institute of Standards and Technology) tarafından 1995 yılında yayımlanmış bir kriptografik özet fonksiyonudur. SHA ailesinin ilk üyelerindendir ve 160-bit (20 byte) uzunluğunda sabit bir çıktı üretir. Hash değeri, genellikle 40 karakterlik hexadecimal (onaltılık) bir dize olarak ifade edilir.
SHA-1, uzun yıllar boyunca dijital imzalar, sertifika doğrulama, parola saklama ve veri bütünlüğü denetimi gibi pek çok alanda standart olarak kullanılmıştır. Ancak, zamanla ortaya çıkan zafiyetler nedeniyle modern sistemlerde kullanımı tavsiye edilmemektedir.
🧠 SHA-1'in Temel Özellikleri
-
Çıktı Uzunluğu: 160-bit (40 karakterlik hexadecimal dize).
-
Deterministik: Aynı giriş, her zaman aynı çıktıyı üretir.
-
Tek Yönlüdür: Hash’ten girdiye geri dönülmesi beklenmez.
-
Çarpışma Direnci: Teorik olarak güçlüydü; ancak artık pratik saldırılara karşı savunmasız.
-
Performans: Orta hızda çalışır, çoğu sistemde yeterince hızlıdır.
🧪 SHA-1 Nasıl Çalışır?
SHA-1, veriyi sabit uzunlukta 512-bit’lik bloklar hâlinde işler. Her blok üzerinde belirli sayıda bit düzeyinde işlemler gerçekleştirilir. Aşamalar şu şekildedir:
1. Padding (Doldurma)
-
Veri, 512-bit'in katı olacak şekilde
1
ve ardından0
bitleriyle doldurulur. -
Son 64-bit, orijinal verinin uzunluğunu temsil eder.
2. Buffer Başlatma
-
5 adet 32-bit uzunluğunda register (A, B, C, D, E) aşağıdaki değerlerle başlatılır:
3. Ana Döngü (Main Loop)
-
Her 512-bit'lik blok, 80 tur işlemden geçirilir.
-
Bu işlemlerde bit düzeyinde döndürme, AND, OR, XOR gibi mantıksal işlemler uygulanır.
-
Her turda farklı sabitler (K) ve işlevler (f) kullanılır.
4. Hash Üretimi
-
A, B, C, D, E register’ları birleştirilerek toplamda 160-bit’lik hash değeri elde edilir.
🔢 SHA-1 Örnekleri
Girdi |
SHA-1 Çıktısı |
hello |
aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d |
password |
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 |
mustafa |
4a464bb6dd0b2e9e0b61a7db5df0554f6c2895d2 |
⚠️ SHA-1 Güvenlik Zafiyetleri
SHA-1, yayımlandığı dönemde güvenli kabul edilse de günümüzde ciddi açıklar barındırmaktadır.
1. Çarpışma Saldırıları (Collision Attacks)
-
Tanım: İki farklı girdinin aynı hash değerini üretmesi.
-
2005: Wang, Yin ve Yu, ilk teorik çarpışma saldırısını duyurdu.
-
2017: Google ve CWI Amsterdam, ilk gerçek çarpışma örneğini sundu: SHAttered saldırısı.
🧪 SHAttered örneğinde, iki farklı PDF dosyası aynı SHA-1 hash değerini üretmiştir.
2. Preimage ve Second-Preimage Saldırıları
-
SHA-1’in preimage (hash'ten orijinal veriye ulaşma) saldırılarına karşı henüz pratik açıkları bulunmasa da çarpışma açıkları yeterli güvenlik riskini ortaya koymaktadır.
3. Brute-Force Saldırıları
-
160-bit’lik çıktısı, teorik olarak 2¹⁶⁰ olasılığa sahiptir. Ancak çarpışma saldırıları ile bu sayı çok daha düşürülmüştür (~2⁶¹ karma hesaplamayla pratik çarpışma üretilebiliyor).
🔍 SHA-1 vs. Modern Hash Fonksiyonları
Özellik |
SHA-1 |
SHA-256 |
SHA-3 |
Bcrypt/Argon2 |
Çıktı Uzunluğu |
160-bit |
256-bit |
Değişken |
Değişken |
Çarpışma Direnci |
Zayıf |
Güçlü |
Güçlü |
Güçlü |
Hız |
Orta |
Yavaş |
Daha yavaş |
Kasıtlı yavaş |
Parola Hashlemeye Uygunluk |
❌ Hayır |
❌ Hayır |
❌ Hayır |
✅ Evet |
Durum |
Güvensiz |
Tavsiye edilir |
Modern standart |
Parola için ideal |
🔧 SHA-1 Kullanımı: Python Örneği
🚫 SHA-1 Kullanılmamalı! Peki Neden?
Kullanılmaması Gereken Yerler
-
Parola saklama
-
Dijital imza üretimi
-
SSL/TLS sertifikaları
-
Blok zinciri uygulamaları
Hâlâ Kullanıldığı Yerler
-
Eski sistemlerin güncellenememiş altyapıları
-
Geriye dönük uyumluluk gereken durumlar (legacy systems)
-
Eğitim ve akademik örnekler
✅ SHA-1 Yerine Ne Kullanılmalı?
-
SHA-256 / SHA-3: Genel amaçlı özetleme için.
-
Argon2 / Bcrypt / Scrypt: Parola saklama için özel olarak geliştirilmiş, zaman ve bellek açısından yavaş çalışan algoritmalar.
📚 Kaynakça (APA Formatı)
-
National Institute of Standards and Technology. (1995). Secure Hash Standard (SHA-1). FIPS PUB 180-1.
-
Wang, X., Yin, Y. L., & Yu, H. (2005). Finding collisions in the full SHA-1. In Annual International Cryptology Conference (pp. 17-36). Springer.
-
Stevens, M., Bursztein, E., Karpman, P., Albertini, A., & Markov, Y. (2017). The first collision for full SHA-1. https://shattered.io
-
Python Software Foundation. (n.d.). hashlib — Secure hashes and message digests. https://docs.python.org/3/library/hashlib.html
-
RFC 3174. (2001). US Secure Hash Algorithm 1 (SHA1). https://www.rfc-editor.org/rfc/rfc3174