Bilgi güvenliği ve yazılım geliştirme süreçlerinde en sık birbirine karıştırılan kavramların başında şifreleme (encryption) ve özetleme (hashing) gelir. Çoğu zaman kullanıcı parolalarının “şifrelendiği” söylenir; oysa modern güvenlik mimarilerinde parolalar şifrelenmez, özetlenir. Bu iki terimin yanlış anlaşılması, veri tabanı tasarımından ağ iletişimine kadar kritik güvenlik açıklarına yol açabilir. Bu yazıda, hash şifreleme farkı konusunu temel çalışma prensiplerinden pratik kod örneklerine kadar adım adım ele alacağız.
Şifreleme (Encryption) Nedir?
Şifreleme, okunabilir formdaki düz metin (plaintext) veriyi, yetkisiz kişilerin anlayamayacağı anlamsız bir biçime (ciphertext) dönüştürme işlemidir. Şifrelemenin en belirleyici özelliği iki yönlü (two-way) bir süreç olmasıdır. Yani uygun anahtara sahip olan kişi, şifrelenmiş metni tekrar orijinal haline dönüştürebilir.
Şifreleme temel olarak iki ana kategoriye ayrılır:
- Simetrik Şifreleme: Veriyi şifrelemek ve deşifre etmek için aynı gizli anahtar kullanılır. AES (Advanced Encryption Standard) ve ChaCha20 bu yöntemin modern örneklerindendir.
- Asimetrik Şifreleme: Biri şifreleme (kamusal anahtar / public key), diğeri deşifre etme (özel anahtar / private key) için kullanılan iki farklı matematiksel anahtar çiftine dayanır. RSA ve ECC (Eliptik Eğri Kriptografisi) bu gruptadır.
Şifrelemenin temel amacı gizliliktir (confidentiality). Veri bir ağ üzerinden aktarılırken (HTTPS, SSH) veya diskte saklanırken (BitLocker, LUKS) üçüncü tarafların içeriği okumasını engellemek için kullanılır.
OpenSSL ile Simetrik Şifreleme Örneği
Aşağıdaki komut satırı örneğinde, AES-256-CBC algoritması ve PBKDF2 anahtar türetme fonksiyonu kullanılarak bir dosya şifrelenmekte ve ardından aynı parola ile deşifre edilmektedir:
echo "Bu gizli bir iletidir." > veri.txt
openssl enc -aes-256-cbc -pbkdf2 -salt -in veri.txt -out veri.enc -k GizliAnahtar456
openssl enc -d -aes-256-cbc -pbkdf2 -in veri.enc -out cozulmus.txt -k GizliAnahtar456
cat cozulmus.txt
İlk satırda test verisi oluşturulur. İkinci komutta metin AES-256-CBC ile şifrelenir ve çıktı okunamaz bir ikili dosyaya yazılır. Üçüncü komut ise -d parametresiyle doğru parolayı vererek veriyi tekrar orijinal haline çevirir. Doğru anahtar girilmezse orijinal metne ulaşılamaz.
Hash (Özetleme) Nedir?
Hash işlemi, girdi olarak verilen herhangi bir boyuttaki veriyi alan ve sabit uzunlukta benzersiz bir karakter dizisine (özet / digest) dönüştüren tek yönlü (one-way) matematiksel bir fonksiyondur.
Kriptografik bir hash fonksiyonunun şu temel özellikleri sağlaması gerekir:
- Tek Yönlü Olması: Elde edilen özet değerinden orijinal girdiyi matematiksel olarak geri hesaplamak imkansız olmalıdır.
- Deterministik Yapı: Aynı girdi, aynı hash fonksiyonuna her verildiğinde istisnasız olarak her zaman aynı özeti üretmelidir.
- Çığ Etkisi (Avalanche Effect): Girdideki tek bir harf veya noktalama işareti değiştiğinde bile üretilen özet değerinin tamamen farklılaşması gerekir.
- Çakışma Direnci (Collision Resistance): Farklı iki verinin aynı hash sonucunu üretmesi matematiksel olarak son derece düşük bir ihtimal olmalıdır.
Popüler hash algoritmalarına SHA-256, SHA-3 ve parola saklama için tasarlanmış bcrypt, Argon2 gibi algoritmalar örnek verilebilir.
Python ile Hash Hesaplama Örneği
Aşağıdaki Python örneği, standart hashlib modülü ile SHA-256 özetinin nasıl hesaplandığını gösterir:
import hashlib
metin1 = "siberguvenlik"
metin2 = "siberguvenliK"
hash1 = hashlib.sha256(metin1.encode("utf-8")).hexdigest()
hash2 = hashlib.sha256(metin2.encode("utf-8")).hexdigest()
print("Metin 1 Hash:", hash1)
print("Metin 2 Hash:", hash2)
Bu kod çalıştırıldığında, iki metin arasındaki tek fark olan son harfin büyüklüğü nedeniyle tamamen farklı iki 64 karakterlik onaltılık çıktı üretilir. Üretilen bu hash değerlerinden orijinal “siberguvenlik” metnini tersine çevirerek bulacak bir deşifre fonksiyonu yoktur.
Hash Şifreleme Farkı: Temel Karşılaştırma Noktaları
Kriptografik tasarım yaparken doğru yöntemi seçebilmek için hash şifreleme farkı kavramını dört ana eksende incelemek gerekir:
- İşlem Yönü: Şifreleme çift yönlüdür; veriyi hem kilitleyebilir hem de anahtarla açabilirsiniz. Hash tek yönlüdür; kilitlenen veri asla geri açılamaz.
- Anahtar İhtiyacı: Şifreleme işleminin çalışması için simetrik ya da asimetrik anahtarlara ihtiyaç vardır. Temel hash algoritmaları anahtarsız çalışır; sadece girdiye bağlı matematiksel işlemler uygular.
- Çıktı Boyutu: Şifrelenmiş verinin boyutu, orijinal metnin boyutuna doğrudan bağlıdır ve genellikle girdiyle orantılı olarak büyür. Hash fonksiyonlarında ise girdi 5 baytlık bir kelime de olsa, 10 gigabaytlık bir ISO dosyası da olsa çıktı boyutu sabittir (örneğin SHA-256 her zaman 256 bit / 32 bayt üretir).
- Kullanım Amacı: Şifreleme verinin gizliliğini korumak için tasarlanmıştır. Hash ise verinin bütünlüğünü (integrity) doğrulamak ve kimlik doğrulama amacıyla kullanılır.
Hangi Durumda Hangisi Kullanılmalıdır?
Doğru mekanizmayı seçmek güvenlik mimarisinin temel kuralıdır:
- Parolaları Saklarken: Kesinlikle hash kullanılmalıdır. Bir veri tabanı saldırganların eline geçtiğinde, şifrelenmiş parolalar anahtar ele geçirildiği anda çözülebilir. Ancak Argon2 veya bcrypt ile tuzlanarak (salt) hash’lenmiş parolaların geri döndürülmesi pratikte mümkün değildir.
- Dosya ve İleti Gizliliğinde: Kesinlikle şifreleme kullanılmalıdır. Bir arkadaşınıza e-posta veya mesaj gönderdiğinizde, alıcının metni okuyabilmesi gerekir. Hash tek yönlü olduğu için karşı taraf mesajı okuyamaz.
- Dosya Bütünlüğü Doğrulamasında: Hash kullanılmalıdır. İndirdiğiniz bir işletim sistemi kalıbının ya da yazılım paketinin manipüle edilip edilmediğini doğrulamak için yayıncının sağladığı SHA-256 kontrol toplamı (checksum) ile kendi sisteminizde aldığınız hash değeri kıyaslanır.
Sonuç ve Sonraki Adımlar
Şifreleme veriyi gizleyip tekrar okunabilir kılmayı hedeflerken, hash fonksiyonları verinin parmak izini çıkararak bütünlüğünü kanıtlar. Bu iki kavram birbirinin alternatifi değil, siber güvenlikte farklı sorunları çözen iki ayrılmaz araçtır.
Sisteminizi geliştirirken parolaları asla tersine çevrilebilir algoritmalarla şifrelemeyin; bunun yerine yavaşlatılmış hash fonksiyonları (Argon2id veya PBKDF2) tercih edin. Bir sonraki aşamada, hash fonksiyonlarına eklenen tuzlama (salt) mekanizmalarını ve gökkuşağı tablolarına (rainbow tables) karşı savunma yöntemlerini inceleyebilirsiniz.


Comentarios
Aún no hay comentarios. Sé el primero en comentar.