2012-06-24 27 views
8

Raylar ile çalışıyorum ve parolam sınaması dışındaki diğer tüm alanları olan parola_ayarımın 2 kullanıcı için farklı olduğunu fark ettim. ama ikisi için de aynı parola "abcd" kullanılmış ..
bu 2 farklı karmalarıŞifre şifresi 2 kullanıcı için aynı şifreyle neden farklı?

  • $2a$10$QyrjMQfjgGIb4ymtdKQXI.WObnWK0/CzR6yfb6tlGJy0CsVWY0GzO
  • $2a$10$dQSPyeQmZCzVUOXQ3rGtZONX6pwvnKSBRmsLnq1t1CsvdOTAMQlem
    1. üreten sona erdi i bcrypt mücevher karma üretir düşünce sadece şifre alanına göre! Yanlış mıyım? thanks :)

    +0

    Belki de (umarım) şifre [tuzlanmış] (http://en.wikipedia.org/wiki/Salt_ (kriptografi))? –

    +0

    [Tuzlama!] (Http://en.wikipedia.org/wiki/Salt_%28cryptography%29) –

    +0

    Bu davranış tasarım gereği _emphatically_. – SLaks

    cevap

    16

    Burada baktığınız şey bir parola karmaşasından daha fazlası, bu dizelerde bulunan karma hakkında birçok meta veri var. Bcrypt cinsinden, tüm dize bcrypt karma olarak kabul edilecektir. İşte içerir şudur:

    $ Bcrypt içinde ayırıcı olduğunu.

    $ 2a $ kullanılan bcrypt algoritmasıdır.

    $ $ kullanıldı maliyet faktörüdür. Bu yüzden, bcrypt, karma saklama için çok popülerdir. Her hashın onunla ilişkili bir karmaşıklığı/maliyeti vardır, ki bu, bu karma üretmek için bir bilgisayarın ne kadar çabuk alacağını düşünebilirsiniz. Bu sayı tabii ki bilgisayarların hızına göre, bilgisayarların yıllar içinde daha hızlı ve daha hızlı bir hale gelmesiyle birlikte, daha az ve daha az zaman harcayarak maliyetini 10'a çıkaracaktır. Böylece gelecek yıl maliyetinizi 11'e çıkardığınızda 12 ... 13 ... vb. Bu, eski hash'larınızın hala geçerli olmasını sağlarken gelecekteki karmalarınızın güçlü kalmasını sağlar. Sadece orijinal dizeyi yeniden işlemeden karmanın maliyetini değiştiremeyeceğinizi unutmayın.

    $ QyrjMQf ... tuz ve karma bir kombinasyonudur. Bu base64 kodlu bir dizedir.

    ilk 22 karakter tuz vardır.

    kalan karakterler 2a algoritması ile kullanılan karma 10, maliyet ve belirli bir tuzudur. Tuzun nedeni, bir saldırganın, üretme maliyetini ödemekten kaçınmak için bcrypt karmalarını önceden hesaplayamamasıdır.

    Aslında bu orijinal sorunun cevabı: aynı olsaydı size şifre abcd olacağını bilemez $2a$10$QyrjMQfjgGIb4ymtdKQXI.WObnWK0/CzR6yfb6tlGJy0CsVWY0GzO bcrypt dize gördüğünü her zaman bilemez çünkü karma farklıdır nedenidir. Bu yüzden, karma bir veritabanını tarayabilir ve tüm kullanıcıları abcd şifresiyle hızlıca bulabilirsin.

    Bunu bcrypt ile yapamazsınız, çünkü $2a$10$dQSPyeQmZCzVUOXQ3rGtZONX6pwvnKSBRmsLnq1t1CsvdOTAMQlem ayrıca abcd'dur. Ve bcrypt('abcd') sonucu olacak pek çok daha fazla karma var. Bu imkansız yanında abcd şifreleri için bir veritabanı taranmasını sağlar.

    +1

    Teşekkürler! :) gerçekten çok yardımcı oldu ve beklediğimden çok daha fazlasıydı! – viswa

    2

    bcrypt saklar şifre karma tuz.

    Bu iki farklı tuzlar aynı şifre iki farklı karma vardır.Parolaları doğrularken, bcrypt hash alanının tuzunu okuyacaktır, daha sonra bu tuzu kullanarak karma değerini yeniden hesaplayacaktır.

    İlgili konular