Hayır, MD5 gibi bir karma işlevini tersine çevirmek mümkün değildir: çıkış karma değeri göz önüne alındığında, giriş mesajı hakkında yeterli bilgi bilinmedikçe giriş mesajını bulmak mümkün değildir.
Şifre çözme, karma işlevi için tanımlanan bir işlev değildir; şifreleme ve şifre çözme, CBC modunda AES gibi bir şifrenin işlevleridir ; karma işlevleri şifrelemez veya şifresini çözmez . Karma işlevleri bir giriş mesajını sindirmek için kullanılır . Adından da anlaşılacağı gibi, tasarım gereği tersine bir algoritma mümkün değildir .
MD5, kriptografik olarak güvenli, tek yönlü bir karma işlevi olarak tasarlanmıştır . Giriş mesajının büyük bir kısmı önceden belirlenmiş olsa bile MD5 için çarpışmalar oluşturmak artık çok kolay. Bu nedenle MD5 resmi olarak kırılmıştır ve MD5 artık kriptografik olarak güvenli bir karma olarak düşünülmemelidir. Bununla birlikte, bir karma değerine yol açan bir giriş mesajı bulmak hala imkansızdır: yalnızca H (X) biliniyorsa X'i bulun (ve X, en az bir 128 bayt önceden hesaplanmış veri bloğuna sahip önceden hesaplanmış bir yapıya sahip değildir) . MD5'e yönelik bilinen hiçbir görüntü öncesi saldırı yoktur .
Genellikle kaba kuvvet veya (artırılmış) sözlük saldırıları kullanarak parolaları tahmin etmek, veritabanlarını karşılaştırmak veya gökkuşağı tabloları olarak adlandırılan parola karmaları bulmak ve bulmak genellikle mümkündür. Bir eşleşme bulunursa, girişin bulunduğu hesaplanır. Hash fonksiyonları da çarpışma saldırılarına karşı güvenli gibidir: bulmakta X'
böylece H(X') = H(X)
verilen H(X)
. Eğer bir X
bulunursa, aslında giriş mesajı olduğu hesaplanır. Aksi halde sonuçta bir çarpışma saldırısı yapmış olursunuz. Gökkuşağı tabloları saldırıları hızlandırmak için kullanılabilir ve orada belirli bir karma verilen bir şifre bulmanıza yardımcı olacak özel internet kaynakları vardır.
Diğer sistemlerde oluşturulan parolaları doğrulamak için elbette karma değerini yeniden kullanmakH(X)
mümkündür . Alıcı sistem yapması gereken tek şey bir belirleyici fonksiyonun sonucu saklamaktır F
alır H(X)
girdi olarak. Tüm X
sonra sisteme verilir H(X)
ve bu nedenle F
yeniden hesaplanır ve sonuç karşılaştırılabilir. Başka bir deyişle, sadece bir parolanın doğru olduğunu doğrulamak için karma değerinin şifresini çözmek gerekmez ve hash'ı farklı bir değer olarak saklayabilirsiniz.
MD5 yerine bunun yerine bir parola karması veya PBKDF (parola tabanlı anahtar türetme işlevi) kullanmak önemlidir . Böyle bir işlev, bir tuzun bir karma ile birlikte nasıl kullanılacağını belirler . Bu şekilde, özdeş parolalar için özdeş karmalar oluşturulmaz (diğer kullanıcılardan veya diğer veritabanlarından). Bu nedenle parola karmaları, tuz yeterince büyük ve düzgün bir şekilde rastgele olduğu sürece gökkuşağı tablolarının kullanılmasına izin vermez.
Parola karmaları ayrıca , tuz ve karma değeri verildiğinde parolayı bulmaya çalışan saldırıları önemli ölçüde yavaşlatabilecek bir çalışma faktörü (bazen yineleme sayısı kullanılarak yapılandırılır ) içerir. Tuzlar ve karma değerleri olan veritabanı çalınabileceğinden bu önemlidir. Son olarak, parola karması da bellek açısından zor olabilir, böylece karmayı hesaplamak için önemli miktarda bellek gerekir. Bu, saldırganın aramayı hızlandırmasını sağlamak için özel donanım (GPU'lar, ASIC'ler, FPGA'lar vb.) Kullanmayı imkansız hale getirir. Biber veya paralelleştirme miktarı gibi diğer girişler veya yapılandırma seçenekleri de bir parola karması için kullanılabilir.
Bununla birlikte , bir şifre karması H(X)
olsa bile herkesin verilen bir şifreyi doğrulamasına izin verecektir H(X)
. Parola karmaları hala belirleyicidir, bu nedenle eğer herkes tüm girdiyi ve karma algoritmanın kendisini biliyorsa, o X
zaman hesaplamak için kullanılabilir H(X)
ve tekrar sonuçlar karşılaştırılabilir.
Sık kullanılan parola karmaları bcrypt , scrypt ve PBKDF2'dir . Ayrıca, son zamanlarda parola hashleme yarışmasının kazananı olan çeşitli şekillerde Argon2 bulunmaktadır. CrackStation'da şifre güvenliği konusunda doğru bir blog yazısı var.
Rakiplerin karma hesaplamasını yapmasının bir parolanın doğru olduğunu doğrulamasını imkansız hale getirmek mümkündür. Bunun için şifre karmasına giriş olarak bir biber kullanılabilir. Alternatif olarak, karma değeri elbette AES gibi bir şifre ve CBC veya GCM gibi bir çalışma modu kullanılarak şifrelenebilir. Ancak bu, gizli / anahtarın bağımsız olarak ve şifre karmasından daha yüksek erişim gereksinimleriyle birlikte depolanmasını gerektirir .