Hashing
- Türkçe karşılığı
- özetleme
- Okunuşu
- heşing
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
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 nedir?
Bir hash fonksiyonu, parola, dosya veya mesaj gibi herhangi bir boyuttaki girdiyi alır ve hash ya da özet (digest) adı verilen sabit boyutlu bir çıktı üretir. Aynı girdi her zaman aynı hash'i verir, girdideki küçücük bir değişiklik tamamen farklı bir hash üretir ve hash'ten girdiye geri dönmek pratikte imkânsız olmalıdır.
Hashing; dosyaların değiştirilmediğini doğrulamak, içeriği tanımlamak (Git her commit'i bir hash ile adlandırır), hash tabloları gibi veri yapıları kurmak ve parolaları saklamak için kullanılır. Bütünlük kontrolleri ve dijital imzalar için SHA-256 gibi hızlı kriptografik hash'ler kullanılır; MD5 ve SHA-1 gibi eskileri güvenlik amaçlı kullanım için kırılmıştır ve kaçınılmalıdır.
Parolalar özel muamele ister. Hızlı bir hash yerine Argon2id, bcrypt veya scrypt gibi yavaş ve salt'lı bir parola hashleme algoritması kullanın. Salt, hash'lemeden önce her parolaya eklenen rastgele bir değerdir; böylece aynı parolalar farklı hash'ler üretir. Kasıtlı yavaşlık ise çalınmış bir veritabanından parola tahmin etmeyi saldırganlar için çok pahalı hâle getirir.
Hashing sıklıkla şifrelemeyle karıştırılır. Şifreleme iki yönlüdür: bir anahtarla şifrelenen veri doğru anahtarla çözülebilir. Hashing tek yönlüdür; bu yüzden sunucu, girişi girilen parolayı hash'leyip saklanan hash'le karşılaştırarak kontrol eder, asla orijinal parolayı geri elde ederek değil.
Bir bakışta
Önemli noktalar
- Hash fonksiyonu, herhangi bir girdiyi sabit uzunlukta bir çıktıya dönüştürür.
- Aynı girdi her zaman aynı hash'i üretir.
- Hashing tek yönlüdür; şifreleme ise anahtarla geri döndürülebilir.
- Bütünlük kontrolleri için MD5 veya SHA-1 değil, SHA-256 veya daha güçlüsünü kullanın.
- Parolaları Argon2id veya bcrypt gibi salt'lı, yavaş bir algoritmayla saklayın.
Örnek
import { createHash } from "node:crypto";
import bcrypt from "bcrypt";
// Unsafe: fast and unsalted, so leaked hashes are easy to crack
const weak = createHash("sha256").update(password).digest("hex");
// Safe: bcrypt adds a random salt and is deliberately slow
const stored = await bcrypt.hash(password, 12);
// At login, compare the entered password with the stored hash
const ok = await bcrypt.compare(loginAttempt, stored);Sık sorulan sorular
Hashing ile şifreleme arasındaki fark nedir?
Şifreleme geri döndürülebilirdir: doğru anahtara sahip herkes şifrelenmiş veriyi orijinal hâline çevirebilir. Hashing tek yönlüdür; orijinal girdi hash'ten geri elde edilemez. Bu da onu, veriyi sonradan okunmak üzere gizlemekten çok doğrulamak için uygun kılar.
Parola hashlemede salt nedir?
Salt, her parola için üretilen ve hash'lemeden önce parolayla birleştirilen rastgele bir değerdir. Aynı parolaların farklı hash'ler almasını sağlar ve rainbow table adı verilen önceden hesaplanmış arama tablolarını etkisiz kılar.
Bir hash geri çevrilebilir mi?
Güvenli bir hash matematiksel olarak geri çevrilemez, ancak saldırganlar girdileri tahmin edip hash'leyerek sonuçları karşılaştırabilir. Hızlı hash'lerle saklanan zayıf parolaların kolayca kırılmasının ve yavaş parola hashleme algoritmalarının var olmasının nedeni budur.
Sık karşılaştırılanlar
İlgili sayfalar
- AlgoritmaProgramlamanın Temelleri, s. 1Algoritma, bir listeyi sıralamak ya da en kısa yolu bulmak gibi bir sorunu çözmek veya bir işi tamamlamak için izlenen, sonlu ve adım adım yönergeler bütünüdür.
- JWTGüvenlik, s. 17JWT, kullanıcı kimliği ve son kullanma zamanı gibi bilgileri taşıyan, imzalı ve kompakt bir token'dır; sunucunun oturum aramadan istekleri doğrulamasını sağlar.
- HTTPSGüvenlik, s. 15HTTPS, tarayıcı ile web sitesi arasındaki trafiği TLS ile şifreleyen, verileri dinlemeye ve değiştirilmeye karşı koruyan HTTP'nin güvenli sürümüdür.
- VeritabanıVeritabanları, s. 37Veritabanı, bilgisayarda düzenli biçimde saklanan ve uygulamaların verimlice kaydedip arayıp güncelleyebildiği, bir yazılımla yönetilen veri topluluğudur.
- GitSürüm Kontrolü, s. 10Git, dosyalardaki değişiklikleri zamanla izleyen ücretsiz, açık kaynaklı dağıtık sürüm kontrol sistemidir; iş birliğini ve hataları geri almayı kolaylaştırır.
- SaltingGüvenlik, s. 31Salting, hash'lemeden önce her parolaya benzersiz bir rastgele değer eklemektir; böylece aynı parolalar farklı hash'ler üretir ve kırılmaya karşı dirençli olur.
- HMACGüvenlik, s. 13HMAC, gizli bir anahtarı hash fonksiyonuyla birleştirip mesajın anahtarı bilen birinden geldiğini ve yolda değişmediğini kanıtlayan bir etiket (tag) üretir.
- Hash ÇakışmasıVeri Yapıları, s. 17Hash çakışması, iki farklı girdinin aynı hash değerine ya da kovaya düşmesidir; hash tabloları bunu ele alır, kriptografik hash'lerde pratikte bulunamamalıdır.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin