SHA512 ve Blowfish ve Bcrypt [kapalı]


222

Karma algoritmalara bakıyorum ama bir cevap bulamadım.

  • Bcrypt Blowfish kullanır
  • Blowfish MD5'ten daha iyidir
  • S: Blowfish SHA512'den daha mı iyi?

Teşekkürler..

Güncelleme:

Karma ve şifreleme arasındaki farkı anladığımı açıklığa kavuşturmak istiyorum. Ne bu şekilde soru sormak beni istenir bu yazıyı , yazar "adaptif karma" olarak Bcrypt atıfta

Bcrypt Blowfish'e dayandığından, Blowfish'in bir karma algoritma olduğunu düşünmeye yönlendirildim. Yanıtların işaret ettiği gibi şifreleme ise, bu makalede bir yeri olmamalıdır. Daha da kötüsü bcrypt'in en iyisi olduğu sonucuna varması. Şimdi de beni şaşırtan şey, phpass sınıfının (şifre hashlaması için kullanılan) bcrypt (yani blowfish, yani şifreleme) kullanmasıdır. Bana söylediğiniz bu yeni bilgiye dayanarak (balon balığı şifreleme), bu sınıf kulağa yanlış geliyor. Bir şey mi kaçırıyorum?


2
Yanlış değil; bcrypt'in nasıl çalıştığı ve neden karma tabanlı bir "tek yönlü" algoritma ile aynı amaca hizmet ettiğinin açıklaması için cevabımın güncellemelerine bakın.
erickson

3
bcryptvarsayılan olarak daha yüksek bir "çalışma faktörü" vardır. SHA'nın, çalışma faktörü ile birlikte kullanabileceğiniz passhash9 kullanmıyorsanız kabul edilmediği varsayılır. bu soru neden kapalı? cevaplanmış olmaktan çok çok önemli.

1
Söz konusu bağlantı
kesildi

Yanıtlar:


320

Bcrypt veya SHA-512'nin (PBKDF2 gibi uygun bir algoritma bağlamında) yeterince iyi olup olmadığını söylemek yeterli olmalıdır . Ve cevap evet, her iki algoritma da kriptanaliz değil, bir uygulama kusuru ile bir ihlalin oluşacağı kadar güvenlidir.

Hangisinin "daha iyi" olduğunu bilmekte ısrar ederseniz, SHA-512 NIST ve diğerleri tarafından derinlemesine incelemelere sahiptir. İyi, ancak kusurlar, şimdi istismar edilmese de, yeni karma algoritmalar için SHA-3 yarışmasına yol açtığı kabul edildi. Ayrıca, karma algoritmaların çalışmasının şifrelerden daha yeni olduğunu ve kriptografların bunları öğrenmeye devam ettiğini unutmayın.

Bir bütün olarak bcrypt, Blowfish'in kendisi kadar fazla incelemeye sahip olmasa da, iyi anlaşılmış bir yapıya sahip bir şifreye dayanmanın, ona hash tabanlı kimlik doğrulaması eksik olan doğal bir güvenlik sağladığına inanıyorum. Ayrıca, yaygın GPU'ları SHA-2 tabanlı karmalara saldırmak için bir araç olarak kullanmak daha kolaydır; bellek gereksinimleri nedeniyle, bcrypt'in optimize edilmesi, bazı yerleşik RAM'lerle FPGA gibi daha özel bir donanım gerektirir.


Not: bcrypt, Blowfish'i dahili olarak kullanan bir algoritmadır. Bu bir şifreleme algoritması değildir. Karma işlevlerin "tek yönlü karma" yapmak için kullanıldığı gibi, şifreleri geri döndürülemez şekilde gizlemek için kullanılır.

Şifreleme karma algoritmaları tersine çevrilemeyecek şekilde tasarlanmıştır. Başka bir deyişle, yalnızca bir karma işlevinin çıktısı verildiğinde, aynı karma çıktıyı üretecek bir ileti bulmak "sonsuza dek" sürmelidir. Aslında, aynı karma değeri üreten iki mesajı bulmak hesaplamaya uygun olmamalıdır. Bir şifreden farklı olarak, karma işlevleri bir anahtarla parametreleştirilmez; aynı girdi her zaman aynı çıktıyı üretir.

Birisi şifre tablosunda saklanan değere karma bir şifre sağlarsa, kimlik doğrulaması yapılır. Özellikle, karma işlevinin geri döndürülemezliği nedeniyle, kullanıcının karma değerini yakalayan ve çalışan bir parola bulmak için ters çeviren bir saldırgan olmadığı varsayılır.

Şimdi bcrypt'i düşünün. Parola "türetilmiş" bir anahtar kullanarak, sihirli bir dize şifrelemek için Blowfish kullanır. Daha sonra, kullanıcı bir parola girdiğinde, anahtar tekrar türetilir ve bu anahtarla şifrelenerek üretilen şifre metni depolanan şifre metniyle eşleşirse, kullanıcının kimliği doğrulanır. Şifreleme metni "parola" tablosunda saklanır, ancak türetilen anahtar hiçbir zaman saklanmaz.

Burada kriptografiyi kırmak için, bir saldırganın anahtarı şifreleme metninden kurtarması gerekir. Buna "bilinen düz metin" saldırısı denir, çünkü saldırı şifrelenmiş sihirli dizeyi bilir, ancak kullanılan anahtarı bilmez. Blowfish kapsamlı bir şekilde incelenmiştir ve bir saldırganın anahtarı bilinen tek bir düz metinle bulmasına izin verecek hiçbir saldırı henüz bilinmemektedir.

Yani, tıpkı şifreleme özümlerine dayalı geri dönüşümsüz algoritmalar gibi, bcrypt de bir şifre, tuz ve maliyet faktöründen geri dönüşü olmayan bir çıktı üretir. Gücü, Blowfish'in bir sindirim algoritmasındaki "ilk görüntü öncesi saldırısına" benzeyen bilinen düz metin saldırılarına karşı direncindedir. Şifreleri korumak için bir karma algoritma yerine kullanılabileceğinden , bcrypt kafa karıştırıcı bir şekilde "karma" algoritmanın kendisi olarak adlandırılır.

Gökkuşağı masalarının tuzun doğru kullanımı ile engellendiğini varsayarsak, geri dönüşü olmayan herhangi bir işlev saldırganı deneme yanılma yöntemine indirir. Ve saldırganın deneme yapabilme oranı, geri döndürülemez "karma" algoritmanın hızı ile belirlenir. Bir karma işlevinin tek bir yinelemesi kullanılırsa, bir saldırgan 1000 $ 'a mal olan ekipmanı kullanarak saniyede milyonlarca deneme yapabilir ve birkaç ay içinde 8 karakter uzunluğundaki tüm şifreleri test edebilir.

Bununla birlikte, özet çıkışı binlerce kez "geri beslenirse", bu donanımda aynı parola kümesinin test edilmesi yüzlerce yıl sürecektir. Bcrypt, anahtar türetme rutini içinde yineleyerek aynı "anahtar güçlendirme" etkisine ulaşır ve PBKDF2 gibi uygun bir karma tabanlı yöntem de aynı şeyi yapar; bu bağlamda, iki yöntem benzerdir.

Bu nedenle, bcrypt tavsiyem 1) bir Blowfish'in SHA-2 hash fonksiyonları ailesi ile benzer bir incelemeye sahip olduğu ve 2) şifreler için kriptanalitik yöntemlerin hash fonksiyonları için olanlardan daha gelişmiş olduğu varsayımlarından kaynaklanmaktadır.


4
+1 harika yayın. Ama iki sorum var. Blowfish, on yıldan uzun bir süre önce iki balıkla değiştirildi, bir sistem modern ilkelleri kullanmamalı mı? Ayrıca binlerce yineleme, birçok kişinin herhangi bir anda oturum açtığı web uygulamaları gibi sistemlerde savurgan görünmektedir. Örneğin, PBKDF2 yalnızca şifrelenmiş bir dosya sistemi için string2key işlevi gibi, aynı anda 1 kişi oturum açtığında uygulanır. Ben "Saldırganın kaldırmak için çok ağır, o zaman sunucunuz için çok ağır" atasözü kullanın. Ne düşünüyorsun?
kale

17
Daha modern bir ilkel kullanmanın yanlış bir şey olduğunu sanmıyorum. Güvenlik açıkları genellikle zaman geçtikçe ortaya çıkar ve Twofish, Blowfish'ten elde edilen bilgiler kullanılarak geliştirilmiştir. Ancak, Blowfish kullanımını geçersiz kılacak belirli güvenlik açıklarının farkında değilim, bu yüzden de "kırılmazsa" argümanı da yapılabilir. Saldırganlara karşı duyduğunuz alay bana iyi gelmiyor. Saldırganın milyarlarca parolayı test etmesi için yıllar gerektiren bir algoritma seçseniz bile, yasal bir uygulamada zamanın önemsiz bir kısmını tüketir.
erickson

15
Herhangi bir hash fonksiyonunun özelliklerine bakarsanız, "tuz" hakkında hiçbir şey görmezsiniz. Tek parametre sindirilecek mesajdır. Herhangi bir şifrenin özelliklerini gözden geçirdiğinizde, işlevin bir anahtarla parametrelendirildiğini göreceksiniz. Bir karma ile birlikte kullanılabilen (veya edilmeyebilen ) "tuz" basitçe mesajın bir parçasıdır. Karma algoritması gerektirmez, özel olarak işlemez ve iletinin geri kalanından ayırt edemez. Dolayısıyla, mesajların genellikle tuzlama ile değiştirildiği doğru olsa da, verilen bir mesaj sadece bir karma üretir.
erickson

1
@Andre D Bir pentester olarak hesapları kilitleyen uygulamaları, i kaba kuvvetlere karşı önlemeyen uygulamaları bildiriyorum. İdeal olarak, rahatsız edici bir IP adresi bir captcha'yı çözmelidir, ek olarak bir kullanıcı adı hedefleniyorsa (bu kullanıcı adı olmasa bile), o hesap kimlik doğrulaması yapmadan önce bir captcha'yı çözmelidir. Dakikada X ratelimitinin uygulanması da kabul edilebilir. İlgili: security.stackexchange.com/questions/25444/…
kale

2
@rook: ratelimiting uygulamaları iyi bir uygulama olsa da, bu durumda veritabanının indirildiğini ve tarif ettiğiniz oran sınırına sahip olmayan ekipmana yerleştirildiğini varsayabilirsiniz.
Ellert van Koperen

50

Erickson'ın cevabına tek bir uyarı ile katılıyorum: şifre kimlik doğrulama amacıyla, bcrypt tek bir SHA-512 yinelemesinden çok daha iyidir - çünkü çok daha yavaştır. Yavaşlığın neden bu özel oyunda bir avantaj olduğunu anlamıyorsanız, tekrar bağlandığınız makaleyi okuyun (aşağıya doğru " Hız bir parola karma işlevinde istemediğiniz şeydir " seçeneğine gidin).

Elbette, PHK'nın MD5 algoritmasının çalışması gibi, binlerce kez yineleyerek SHA-512 etrafında güvenli bir şifre karma algoritması oluşturabilirsiniz. Ulrich Drepper tam olarak bunu yaptı , glibc'nin crypt () için. Zaten test edilmiş bir bcrypt uygulamanız varsa bunu yapmak için özel bir neden yoktur.


3
Umarım cevabım, tek bir karma yinelemenin yeterli olmadığını açıkça gösterir (ne yazık ki, bu temel bilgi seviyesi bile kabul edilemez). "Bir karma işlevinin tek bir tekrarı kullanılıyorsa, bir saldırgan 1000 $ 'a mal olan ekipmanı kullanarak saniyede milyonlarca deneme yapabilir ve birkaç ay içinde 8 karakter uzunluğundaki tüm şifreleri test edebilir. binlerce kez 'geri beslenen', bunun nedeni donanım üzerinde şifreleri aynı kümesini test etmek yüzlerce yıl sürecek Bcrypt iterating aynı 'tuşuna güçlendirme' etkiyi sağlayan ...".
Erickson

@erickson: Evet, bence lede oraya gömülmüş olabilirsin Belirtmeye çalıştığım nokta, bcrypt ve SHA-512'nin doğrudan bir karşılaştırmasının gerçekten alakalı olmadığı, çünkü biri önemli bir türetme işlevi ve diğeri sadece kendi başına uygun olmayan bir kriptografik ilkel.
caf


1
Binlerce SHA-512 turu duyulmamış ve çeşitli cryptuygulamalara dahil edildiğini (kullandığım PHP dahil) verildi, orijinal soruyu okuduğumda OP'nin SHA-512 hakkında sorduğunda bunun ne anlama geldiğini varsaydım - aslında yüzlerce ya da binlerce yineleme kullanan bcrypt'e karşı binlerce SHA-512 turundan bahsediyordu.
thomasrutter

33

Blowfish bir karma algoritması değildir. Bu bir şifreleme algoritması. Bunun anlamı, bir şeyi blowfish kullanarak şifreleyebileceğiniz ve daha sonra tekrar düz metne dönüştürebileceğinizdir.

SHA512 bir karma algoritmasıdır. Bu, (teoride) girdiye sahip olduğunuzda, orijinal girdiyi tekrar alamayacağınız anlamına gelir.

Farklı görevler için kullanılmak üzere tasarlanmış 2 farklı şeydir. Hiçbir 'doğru' yanıtı var "SHA512 daha iyi balon balığı nedir?" "Elmalar kangurulardan daha mı iyi?" Diye de sorabilirsiniz.

Konuyla ilgili biraz daha okumak isterseniz, bazı bağlantılar aşağıda verilmiştir:


18
Bence soru bcrypt'i parolalar için geri döndürülemez bir koruma olarak kullanmakla ilgilidir, bu amaç için karma kullanılır.
erickson

3
@erickson "S: ama Blowfish SHA512'den daha mı iyi?" bana oldukça açık görünüyor ve OP'nin 2 algoritma arasındaki farkları anlamadığını gösteriyor
Glen

1
OP burada. Aslında, Glen'in blowfish'in bir şifreleme algoritması olduğunu (karmadan farklı olduğunu anladığım) temel alarak, şimdi evet cevabımın karışık olduğunu anladım. Şimdi kafa karıştırıcı olan phpass sınıfı (inanıyorum şifre karma için kullanılan) bcrypt (yani blowfish, yani şifreleme) kullanır olmasıdır. Balon balığı şifreleme ise, nasıl olur da phpass şifreleri hash etmek için kullanır, bana bir kusur gibi görünüyor, değil mi? Bir şey mi kaçırıyorum?
Chris

2
ancak soru, hangi elma ve kanguruların belirli bir göreve daha uygun olduğunu sorar. Blowfish, hash süresinden dolayı sha'dan daha iyi bir hash fonksiyonudur. Gördüğüm sha uygulamalarının çoğu çok hızlı. Parola karma işlemi için yavaş bir algoritma istiyorsunuz.
John Nicholas

Bu cevap Blowfish'in bir şifreleme algoritması olduğu doğrudur, ancak bu bağlamda (örneğin, kullanıldığında bcrypt) kaynak dizgiden bir anahtar türeterek ve bunu sihirli bir sayıyı şifrelemek için kullanarak bir karma algoritma olarak kullanılır. Bu onu geri döndürülemez, esasen bir karma işlevi yapar. Düz metni ve şifrelenmiş verileri biliyor olsanız bile, anahtarı bir şifreden hesaplayamazsınız.
thomasrutter

4

Blowfish, farklı amaçlara hizmet ettikleri için MD5 veya SHA512'den daha iyi değildir. MD5 ve SHA512 karma algoritmalardır, Blowfish bir şifreleme algoritmasıdır. Tamamen farklı iki şifreleme işlevi.


2

Ulrich Drepper'ın SHA-256 / SHA-512 tabanlı crypt uygulamasını öneriyorum.

Bu algoritmaları Java'ya taşıdık ve ftp://ftp.arlut.utexas.edu/java_hashes/ adresinde ücretsiz olarak lisanslanmış bir sürümünü bulabilirsiniz .

Çoğu modern (L) Birimin Drepper algoritmasını / etc / shadow dosyalarında desteklediğini unutmayın.


PWDTK sourceforge.net/projects/pwdtknet HMAC-SHA512 kullanmaktadır, ancak burada diğerlerinin bahsettiği gibi "yavaşlık" olarak adlandırılan "yavaşlama" oluşturmak için birçok yinelemeden fazlasını yapmaktadır. BCrypt, belirtildiği gibi tek bir SHA-512'den daha iyidir, ancak SHA-512'yi PBKDF2 gibi bir şeyde kullanırsanız, güvende olursunuz (Büyük bir kripto-rastgele tuz kullandığınız sürece ve zamanı zorlamak için yeterli iterasyon Gökkuşağı tablosu yap) Yayınladığım API benim tarafımdan oluşturuldu ve sizin için geliştirdiğiniz şey .NET'te istediğinizi yapacak (Gelecekteki okuyucular için)
thashiznets

2

Ben sadece bununla karşılaştım:

http://codahale.com/how-to-safely-store-a-password/

Bu makalenin yazarı yanlış olabilir mi?


2
Yanlış olduğu için değil, sadece karma algoritmaların nasıl uygulanacağıyla ilgili zengin bir literatürü görmezden geliyor, yani. tıpkı bcrypt gibi anahtar türev fonksiyonlarında tekrarlamalı olarak kullanılmalıdır.
erickson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.