SORU
30 Aralık 2008, Salı


Güvenli karma ve PHP şifreler için tuz

Şu anda MD5 kısmen güvensiz olduğu söylenir. Bunu dikkate alarak, şifre koruması için kullanmak için hangi bilmek istiyorum.

Bu soru, Is “double hashing” a password less secure than just hashing it once? karma birden çok kez How to implement password protection for individual files? tuz. kullanarak önerir, oysa iyi bir fikir olabileceğini gösteriyor

PHP kullanıyorum. Güvenli ve hızlı bir parola şifreleme sistemi istiyorum. Milyon kere şifre karma daha güvenli, ama aynı zamanda daha yavaş olabilir. Nasıl hız ve güvenlik arasında iyi bir denge sağlamak için? Ayrıca, karakter sayısı sabit olarak tercih ederim.

  1. Karma PHP mekanizması mevcut olmalıdır
  2. Güvenli olmalı
  3. Tuz (bu durumda, tüm tuzlar aynı derecede iyi? kullanabilirsiniz Herhangi bir şekilde iyi tuzları oluşturmak için?)

Ayrıca, veritabanında iki alan (bir MD5 ve SHA kullanarak bir tane kullanarak, örneğin) saklamak gerekir? Daha güvenli ya da unsafer eder mi?

Yeterince açık değildim, işlev(ler) kullanmak için karma ve güvenli ve hızlı şifre koruma mekanizması için iyi bir tuz almak için nasıl bilmek istiyorum.

Oldukça sorumu karşılamıyor ilgili sorular:

What's the difference between SHA and MD5 in PHP
Simple Password Encryption
Secure methods of storing keys, passwords for asp.net
How would you implement salted passwords in Tomcat 5.5

CEVAP
30 Aralık 2008, Salı


TL;DR

Yapılmaması gerekenler

  • Kullanıcılar için parola girin ne sınırı yok. Sadece aptallar bunu.
  • Bir parola uzunluğu sınırı yok. Eğer kullanıcılar supercalifragilisticexpialidocious ile bir cümle istiyorsanız, bunu kullanarak engel yok.
  • Hiçbir zaman düz metin olarak Kullanıcı şifre saklayın.
  • Hiç kullanıcı için bir parola e-postadışında onların kaybettiler ve geçici bir paket geldi.
  • Asla, hiç bir şekilde şifreleri oturum açın.
  • Asla SHA1 şifreleri hash veya MD5 veya SHA256 bile! Modern crackers 60 ve 180 milyar karma/saniye (sırasıyla) aşabilir.
  • Karıştırma bcrypt and with the raw output of hash(), ya da hex çıkış veya base64_encode. (Bu ciddi güvenlik zayıflatabilir bir haydut \0 bu, herhangi bir giriş için geçerlidir.)

Dos

  • ; Eğer yapamıyorsanız bcrypt varken scrypt kullanın.
  • Eğer ya bcrypt kullanamazsanız PBKDF2 kullanın veya scrypt, SHA2 sağlamalarının.
  • Veritabanı ihlal olduğunda herkesin şifreleri sıfırlandı.
  • Makul 8-10 karakter, asgari süre uygulamak, en az 1 büyük harf harf, 1 gerektirir küçük harf harf, bir rakam ve bir sembol artı. Bu şifre entropi, sırayla onu çözmek zor hale gelecektir. ("İyi bir parola Nedir?" bazı tartışmalar için bölüm.) görmek

Neden şifreleri zaten karma?

Karma şifreleri basit arkasındaki amaç: veritabanı uzlaşarak kullanıcı hesaplarına erişimi engelleyen zararlı. Şifre amacı karma onlara çok fazla zaman ya da para düz metin parolaları hesaplamak için maliyetine göre hacker veya cracker caydırmak için. Ve zaman/maliyet cephanelik en iyi caydırıcı.

Kullanıcı hesapları iyi, sağlam bir hash istediğiniz başka bir sebebi sistemdeki tüm şifreleri değiştirmek için yeterli zaman vermek. Eğer veritabanı ihlal bakmak için yeterli zaman gerekirazsistemi kapatın, yoksa veritabanında her parolasını değiştirin.

Jeremiah Grossman,, stated on his blog şifre koruması onun: kaba kuvvet kırılması gereken son bir şifre kurtarma sonra Whitehat Güvenlik CTO

İlginçtir, bu kabusunu yaşıyor, şifre kırma, depolama, ve karmaşıklık bilmiyordum ÇOK şey öğrendim.Neden şifre hiç parola karmaşıklığı çok daha önemli olduğunu takdir etmek için geldim. Eğer şifrenizi saklı olduğunu biliyor musun eğer doğru değilse, o zaman aslında senin de üzerine karmaşık olabiliyor.Bu şifre ve kripto profesyoneller için ortak bir bilgi olabilir, ama ortalama bilgi güvenliği'nden ya da Web Güvenlik uzmanı, hiç sanmıyorum.

(Vurgu benim.)

Bir şeyi yapariyineyse parola?

Entropy. O değil de ben tam Randall'ın bakış açısı abone olun.)

Kısacası, entropi değişimi şifre içinde. Bir şifre sadece küçük harf Romen rakamları olduğunda, o sadece 26 karakter. Bu kadar değişim değil. Alfa-nümerik şifreleri daha iyi, 36 karakter ile. Ama büyük ve küçük harf sağlayan, sembollerle, kabaca 96 karakter. Bu sadece bir sürü mektup daha iyidir. Tek sorun, bizim şifreleri unutulmaz yapalım Ekle desenleri olan entropiyi azaltır. Oops!

Şifre entropi approximated kolayca. Kullanarak dizi ascıı karakter (Yaklaşık 96 typeable karakter) verimleri bir entropi 6.6 başına karakter, 8 karakter bir şifre hala çok düşük (52.679 bit entropi) için gelecekteki güvenlik. Ama iyi haber şu: karakterler unicode, gerçekten bir şifre entropi artış ve zor çatlamak yapmak daha uzun parolaları ve şifreleri.

Crypto StackExchange site şifre entropi uzun bir tartışma var. İyi bir Google Arama sonuçları da çok ortaya çıkacak.

Yorum ettiğine işaret eden @popnoodles ile konuştumzorlanarakX X fazla harf uzunluğunda, sayılar, simgeler, vb, parola ilkesi aslında şifre düzeni daha öngörülebilir yaparak entropi azaltabilir. Katılıyorum. Randomess, mümkün olduğunca gerçekten rastgele, her zaman en güvenli ama en azından unutulmaz bir çözümdür.

Söylemeyi başaramadım şimdiye kadar, dünyanın en iyi şifre yapma a-22 Yakalamak. Ya da unutulmaz, çok öngörülebilir, çok kısa, çok fazla unicode karakterleri (Windows/Mobil cihaz türü için) sert, uzun, vb. Şifre yok gerçekten bizim amaçlarımız için yeterince iyidir, Fort Knox gibi davranarak onları korumalıyız.

En iyi uygulamalar

Bcrypt ve scrypt mevcut en iyi uygulamalar. Scrypt daha iyi olacaktır. daha bcrypt zaman, ama yüzü bile görmemiş evlatlık olarak bir standart Linux/Unix veya web sunucuları, ve olmadı derinlemesine değerlendirme algoritması gönderildi henüz. Ama yine de, algoritma geleceği umut verici görünüyor. Eğer Ruby ile çalışıyorsanız size yardımcı olacak scrypt gem bir var, ve Node.js şimdi scrypt kendi paketi vardır. Ya Scrypt uzantısı Libsodium uzantısı (hem PECL mevcuttur) PHP Scrypt kullanabilirsiniz.

Ben son derece tavsiye okuma belgelerini crypt function istiyorsanız, bileşik bcrypt, ya da bulma kendine good wrapper ya da kullanmak gibi bir şey PHPASS bir daha eski uygulama. Bcrypt 12 mermi, değilse 15-18 en az öneririm.

Bu bcrypt sadece blowfish anahtar zamanlaması, değişken maliyet mekanizmasını kullanır öğrendiğimde bcrypt kullanarak ilgili fikrimi değiştirdim. İkincisi artan balon balığı tarafından kaba kuvvet parola zaten pahalı anahtarı planlamak için maliyeti artırır.

Ortalama uygulamaları

Neredeyse bu durum artık hayal bile edemiyorum. PHPASS 5.3, hemen hemen her yüklemede kullanılabilir yani akla gelebilecek—ve eğer ... eğer ... kullanılmalıdır üzerinden PHP 3.0.18 desteklerkesin olarak biliyorumçevre bcrypt destekler.

Ama varsayalım hiç bcrypt veya PHPASS kullanın. O zaman ne olacak?

Kullanıcı algı/uygulama/çevre taşıyabilecek maximum number of rounds PDKBF2 bir uygulama deneyin. Tavsiye ederim en düşük rakam 2500 mermi. Ayrıca, eğer mevcut işlemi yeniden oluşturmak için zor yapmak için ise hash_hmac() kullandığınızdan emin olun.

Gelecekteki Uygulamalar

PHP 5.5 geliyor uzak bcrypt ile çalışan herhangi bir ağrısı özetleri full password protection library. Çoğumuz en yaygın ortamlarda PHP 5.2 ve 5.3 ile sıkışmış iken, özellikle ortak ev sahipliği, @ircmaxell inşa ettiği için compatibility layer gelecek API PHP 5.3.7 geriye dönük olarak uyumludur.

Kriptografi Özeti Ve Feragatname

Hesaplama gücü için gerekli aslındaçatlakkarma bir şifre yok. Bilgisayarlar için tek yol "çatlak" bir şifre oluşturun ve karma algoritmasını simüle etmek sabitlemek için kullanılır. Karma hızı doğrusal brute-zorla kabiliyeti ile ilgilidir. Daha da kötüsü pek çok karma algoritma daha hızlı gerçekleştirmek için parallelized olabilir. Bu bcrypt ve scrypt gibi pahalı düzenleri çok önemlidir.

Olamaz muhtemelen saldırı tüm tehditleri ya da yollar tahmin ve kullanıcıları korumak için elinizden geleni yapmanız gerekirön. Eğer değilse, o zaman bile çok geç olana kadar saldırıya uğradığınız gerçeğini kaçırabilir...ve siz sorumlusunuz. Bu durumu önlemek için, başlamak için paranoyak davranıyorsun. Kendi yazılımı (dahili) saldırı ve kullanıcı kimlik bilgilerini çalmak için bir girişim, ya da diğer kullanıcı hesaplarını değiştirmek veya veri erişim. Eğer sisteminizin güvenlik testi yok eğer doğru değilse, o zaman olamaz kendinden başka kimseyi suçlama.

Son olarak: bir kriptolog ediyorum. Benim görüşüm olduğunu söyledim ne olursa olsun, ama iyi ol dayalı olduğunu düşünüyorum' sağduyu ... ve okuma var ... Unutma, gibi paranoyak olarak mümkün, yapmak şeyler gibi sert rahatsız etmek mümkün, ve sonra, Eğer hala endişeli, bir kişi beyaz şapkalı hacker veya kriptolog görmek ne dedikleri hakkında kodunuzu/sistem.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AutoHotkey Tutorials

    AutoHotkey T

    29 Mayıs 2010
  • TitaniumBackup

    TitaniumBack

    10 EYLÜL 2011
  • Willie D.

    Willie D.

    16 Aralık 2006