Ana içeriğe geç

Yan yana

ŞifrelemevsHashing

Şifreleme (encryption) ile hashing arasındaki fark nedir?

Güncellendi 2 dk okuma7 fark

Kısaca

Şifreleme veriyi çözülebilecek şekilde bir anahtarla karıştırır; hashing ise geri çevrilemeyen, sabit uzunlukta bir parmak izi üretir; parolalar için idealdir.

Şifreleme

Encryption

Şifreleme, veriyi bir anahtarla karıştırarak yalnızca doğru anahtara sahip olanın onu özgün ve okunabilir hâline geri çevirebilmesini sağlama işlemidir.

Şifreleme sayfasını oku

Hashing

Hashing, bir girdiyi tek yönlü bir fonksiyonla sabit uzunlukta bir değere dönüştürmektir; veri bütünlüğünü doğrulamaya ve parolaları güvenle saklamaya yarar.

Hashing sayfasını oku

Şifreleme ve Hashing karşılaştırması

ÖzellikŞifrelemeHashing
Yönİki yönlü: doğru anahtarla çözülürTek yönlü: geri döndürülemez
AnahtarPaylaşılan bir anahtar ya da açık/özel anahtar çifti gerektirirAnahtar gerekmez; HMAC varyantları gizli bir anahtar ekler
Çıktı boyutuGirdinin boyutuyla birlikte büyürSHA-256'da 256 bit gibi sabit uzunluk
Aynı girdiHer seferinde farklı şifreli metin verebilirHer zaman aynı hash'i verir
AmaçVeriyi gizli tutmakBütünlüğü doğrulamak ve değerleri karşılaştırmak
Tipik kullanımlarHTTPS, disk şifreleme, mesajlaşma, yedeklerParola saklama, sağlama toplamları (checksum), imzalar, tekilleştirme
Yaygın algoritmalarAES, ChaCha20, RSA, eliptik eğri şemalarıSHA-256, SHA-3, BLAKE3; parolalar için Argon2 ve bcrypt

Fark, açıklamalı

Şifreleme, okunabilir veriyi (düz metin, plaintext) bir algoritma ve bir anahtarla okunamaz şifreli metne (ciphertext) dönüştürür; doğru anahtara sahip olan herkes onu geri çevirebilir. Hashing ise veriyi tek yönlü bir fonksiyondan geçirir ve her zaman sabit boyutlu bir çıktı üretir; buna hash ya da özet (digest) denir, SHA-256'nın 256 bitlik sonucu gibi.

Temel fark geri döndürülebilirliktir ve amaçlarından doğar. Şifreleme, mesajlar, yedekler ya da kart numaraları gibi tekrar okumanız gereken verileri korur; bu yüzden yetkili taraflar için geri döndürülebilir olmalıdır. Hashing ise verinin eşleştiğini ya da değişmediğini kanıtlar: aynı girdi her zaman aynı hash'i üretir, ama girdiyi ondan geri elde edemezsiniz.

Çoğu zaman birlikte kullanılırlar. HTTPS'nin arkasındaki güvenlik katmanı olan TLS trafiği şifreler, ama anahtarları türetmek ve el sıkışma mesajlarını doğrulamak için hash fonksiyonlarına dayanır; dijital imzalar da bir belgeyi özel anahtarla imzalamadan önce hash'ler. Parola saklama, çalınan hash'lerin kırılmasını zorlaştırmak için Argon2, scrypt ya da bcrypt gibi özel, yavaş ve tuzlu (salted) hash'ler kullanır.

Sık yapılan bir yanlış, Base64 gibi kodlamanın şifreleme olduğu ya da parolaları düz SHA-256 ile hash'lemenin yeterli olduğu düşüncesidir. Base64, anahtar olmadan herkes tarafından geri çevrilebilir ve hızlı hash'ler modern GPU'larda saniyede milyarlarca denemeyle tahmin edilebilir; bu yüzden parolalar için benzersiz bir tuzla kasten yavaş bir hash gerekir.

Hangisini kullanmalısınız?

Şifreleme şu durumlarda doğru seçim:

  • Özgün veriyi daha sonra tekrar okumanız gerekiyor.
  • Veri, mesajlar ya da dosyalar gibi iletim sırasında veya durağan hâlde gizli kalmalı.
  • İçeriğe yalnızca anahtarı olan kişiler veya sistemler erişebilmeli.

Hashing şu durumlarda doğru seçim:

  • Parolalarda olduğu gibi yalnızca bir değerin eşleştiğini denetlemeniz gerekiyor.
  • Bir dosyanın ya da mesajın değişip değişmediğini tespit etmek istiyorsunuz.
  • Aramalar ya da tekilleştirme için kısa, sabit boyutlu bir parmak izine ihtiyacınız var.

Geri döndürülebilir şifreleme ile tek yönlü hash

Şifrelemepython
from cryptography.fernet import Fernet

key = Fernet.generate_key()  # keep this secret
box = Fernet(key)

token = box.encrypt(b"card 4242 4242 4242 4242")
print(box.decrypt(token))  # the original bytes come back
Hashingpython
import hashlib

digest = hashlib.sha256(b"hello world").hexdigest()
print(digest)  # always the same 64 hex characters

# There is no "decrypt": you can only hash again and compare
print(hashlib.sha256(b"hello world").hexdigest() == digest)
# For passwords, use a slow salted hash like Argon2 or bcrypt

Sık sorulan sorular

Bir hash çözülebilir mi?

Hayır. Hash fonksiyonu tek yönlüdür, bu yüzden çözülecek bir şey yoktur. Saldırganlar bunun yerine girdileri tahmin eder ve hash'leri karşılaştırır; bu yüzden zayıf ya da tuzsuz parola hash'leri yine de kırılabilir.

Parolalar şifrelenmeli mi, hash'lenmeli mi?

Hash'lenmeli; hem de Argon2, scrypt veya bcrypt gibi parolalar için tasarlanmış yavaş ve tuzlu bir algoritmayla. Şifrelenmiş parolaların hepsi, anahtar sızarsa bir anda ifşa olabilir.

Base64 şifreleme midir?

Hayır. Base64, ikili verinin metin olarak güvenle gönderilmesini sağlayan bir kodlamadır ve herkes onu anahtar olmadan çözebilir.

Daha fazla

Ayarlar