Sonuç: SHA-1, preimage saldırılarına karşı herhangi bir şey kadar güvenlidir, ancak hesaplanması kolaydır, yani bir kaba kuvvet veya sözlük saldırısı monte etmek daha kolaydır. (Aynı durum SHA-256 gibi halefler için de geçerlidir.) Koşullara bağlı olarak, hesaplamalı olarak pahalı olacak şekilde tasarlanmış bir karma işlevi (bcrypt gibi) daha iyi bir seçim olabilir.
Bazı insanlar "SHA-1 bozuldu" gibi ifadeleri çok fazla atıyor, bu yüzden bunun tam olarak ne anlama geldiğini anlamaya çalışıyorum. Diyelim ki SHA-1 şifre karmaları bir veritabanım var ve son teknoloji SHA-1 kırma algoritması ve 100.000 makineli bir botnet ile bir saldırgan buna erişiyor. (100 binden fazla ev bilgisayarını kontrol etmek, saniyede yaklaşık 10 ^ 15 işlem yapabildikleri anlamına gelir.) Ne kadar zamana ihtiyaç duyacakları anlamına gelir.
- herhangi bir kullanıcının şifresini bulmak?
- belirli bir kullanıcının şifresini bulmak?
- tüm kullanıcıların şifresini öğrenmek?
- kullanıcılardan biri olarak giriş yapmanın bir yolunu mu arıyorsunuz?
- Belirli bir kullanıcı olarak giriş yapmanın bir yolunu mu arıyorsunuz?
Parolalar tuzlanırsa bu nasıl değişir? Tuzlama yöntemi (önek, postfix, her ikisi veya xoring gibi daha karmaşık bir şey) önemli mi?
İşte bazı googling sonra benim mevcut anlayış. Bir şeyi yanlış anladıysam lütfen cevapları düzeltin.
- Tuz yoksa, gökkuşağı saldırısı hemen tüm şifreleri bulur (çok uzun olanlar hariç).
- Yeterince uzun bir rastgele tuz varsa, şifreleri bulmanın en etkili yolu kaba bir kuvvet veya sözlük saldırısıdır. Ne çarpışma ne de preimage saldırıları gerçek şifreyi bulmada herhangi bir yardımcı değildir, bu nedenle SHA-1'e yönelik kriptografik saldırılar burada yardımcı değildir. Hangi algoritmanın kullanıldığı önemli değildir - MD5 veya MD4 bile kullanılabilir ve şifreler de aynı derecede güvenli olacaktır (bir SHA-1 karma hesaplaması daha yavaş olduğu için küçük bir fark vardır).
- "Ne kadar güvenli" nin ne kadar güvenli olduğunu değerlendirmek için, tek bir sha1 çalıştırmasının 1000 işlem gerektirdiğini ve parolaların büyük harf, küçük harf ve rakam içerdiğini varsayalım (yani 60 karakter). Bu, saldırganın günde 10 15 * 60 * 60 * 24/1000 ~ = 10 17 potansiyel şifre test edebileceği anlamına gelir . Bir kaba kuvvet saldırısı için bu, 9 karaktere kadar tüm şifrelerin 3 saatte, haftada 10 karaktere, yılda 11 karaktere kadar test edilmesi anlamına gelir. (Her ek karakter için 60 kat daha fazla zaman alır.) Sözlük saldırısı çok, çok daha hızlıdır (tek bir bilgisayara sahip bir saldırgan bile saat içinde çekebilir), ancak yalnızca zayıf parolalar bulur.
- Kullanıcı olarak oturum açmak için saldırganın tam şifreyi bulması gerekmez; aynı karma ile sonuçlanan bir dize bulmak yeterlidir. Buna ilk ön saldırı saldırısı denir. Bulabildiğim kadarıyla SHA-1'e karşı bir ön saldırı yok. (Bir kaba kuvvet saldırısı 2 alacaktı 160 bizim teorik saldırganın 10 gerekir, yani operasyonlar 30 çekip yıl arası. Teorik olasılık sınırları yaklaşık 2 olan 60 operasyonları, saldırı birkaç yıl alacağını hangi.) Vardır öngörüntü saldırılar ihmal edilebilir etkili SHA-1 versiyonlarına karşı (80 yerine 44 adım kullanan azaltılmış SHA-1 için saldırı süresi 2 160 operasyondan 2 157'ye düşürüldü). SHA-1'e karşı teorik olasılık dahilinde olan çarpışma saldırıları vardır ( bulduğum en iyi zaman 2 80'den 2 52'ye indirir ), ancak bunlar tuzsuz bile olsa şifre karmaşasına karşı işe yaramaz.
Kısacası, şifreleri SHA-1 ile depolamak son derece güvenli görünüyor. Bir şey mi kaçırdım?
Güncelleme: Marcelo , 2 106 operasyonda ikinci bir ön saldırı düzenleyen bir makaleye dikkat çekti . ( Düzenleme: As Thomas açıklıyor , bu saldırı gerçek hayat senaryoları için geçerli değildir varsayımsal bir yapıdır.) Hala nasıl bir anahtar türetme işlevi olarak SHA-1 kullanımı için bu büyü tehlike olsa görmüyorum. Bir çarpışma saldırısının veya ikinci bir ön saldırı saldırısının sonunda ilk ön saldırıya dönüştürülebileceğini düşünmek için genellikle iyi nedenler var mı?