PHP oturum için kullanmak: SHA256 vs md5 vs SHA1?

8 Cevap php

Ben bir php giriş yapıyorum ve ben SHA1 veya MD5 veya başka stackoverflow makalede hakkında okumak SHA256 kullanmaya karar çalışıyorum. Bunlardan herhangi biri diğerlerinden daha güvenli mi? SHA1/256 için, ben hala bir tuz kullanmak mı?

Ayrıca, bu mysql bir karma olarak parolayı depolamak için güvenli bir yoldur?

function createSalt()
{
    $string = md5(uniqid(rand(), true));
    return substr($string, 0, 3);
}

$salt = createSalt();

$hash = sha1($salt . $hash);

8 Cevap

Ne. Sen kullanmanız gerekir bcrypt. Size söz sağlamalarının tüm hızlı ve donanım kolay olacak şekilde optimize edilmiş, ve bu yüzden onları aynı nitelikleri paylaşan çatlama. Eğer başka bir seçenek varsa, en azından uzun bir tuz ve yeniden karma birden çok kez kullandığınızdan emin olun.

Ben MD5 veya sha256 veya hız için optimize edilmiş herhangi bir hash kullanarak gayet iyi olduğunu düşünüyorum ve diğer kullanıcıların sahip olabilecek rebuttle duymak çok merak ediyorum. İşte benim nedenleri

  1. Kullanıcıların Tanrı gibi zayıf şifreleri kullanmamıza izin verirseniz, sevgi, barış o zaman olursa olsun hala kullanıcı şifresi olmayan karma ve bu şifreleri genellikle ilk kullanılan tip izin edilecek şifreleme, böylece bu {[savaş (0)]} şifreleme ile ilgisi var olacak.

  2. SSL kullanmayan ya da bir sertifika yoksa o zaman trafiği dinlemeye saldırganların javascript veya benzeri istemci tarafı ile şifreleme de şifre ve herhangi bir girişimleri çekin ve kolayca kırılır ve üstesinden gelmek mümkün olacak. Yine bu NOT sunucu tarafında veri şifreleme ile ilgisi var olacak olan.

  3. Eğer giriş 3 sınırlandırılmasına veya sorunun sonra bile biraz daha yoksa kullanıcı verileri girmek için izin çünkü kaba kuvvet saldırıları tekrar NOT ilgisi var olacak yine avantaj zayıf şifreleri alacak ve veri şifreleme ile.

  4. Veritabanı sonra sekteye uğrarsa büyük olasılıkla her şeyi olursa olsun bunu yaptık nasıl şifreli sizin karma teknikler dahil aşıldığını. Yine bu bir hoşnutsuz işçi XSS saldırısı veya sql injection veya şifre şifreleme ile ilgisi olan bazı başka saldırı olabilir.

Ben hala şifrelemek gerektiğine inanıyoruz ama ben şifreleme yapar görebilirsiniz tek şey zaten ya da bir şekilde sadece yüksek sesle şifreyi okuyarak veritabanına erişim kazandı engellemek olduğunu. O zaman onlar şifreli bir şifre, kredi kartı numaraları yaptığı tüm dahil her şeyi korumalı düşündüm çünkü Sony aldı var bu yüzden endişelenmenize büyük sorunları var veritabanı üzerinde yetkisiz birisi ise o bir alan var o korumaktır.

Ben bir veritabanında şifreleri karmaşık şifreleme görebilirsiniz sadece saf parası sadece şifreleri okuma veritabanına erişimi olan çalışanların ya da diğer insanların geciktirmektir. Bu yüzden küçük bir proje ya da bir şey eğer bir istemci, SQL Injection, XSS saldırıları veya başka yollarla bolluk olarak sunucuya gönderebilir yerine ben bir şey güvenliğini sağlama hakkında daha fazla endişe ediyorum sunucu tarafında güvenlik hakkında çok fazla endişe olmaz sen tehlikeye olabilir. Birisi katılmazsa ben bir süper şifrelenmiş parola istemci tarafında bir zorunluluktur bir şekilde okumak için sabırsızlanıyoruz.

Çok sık insanlar şifreli bir şifre onlar tehlikeye ve web sitesi güvenliğini endişesi çıkın olma konusunda endişelenmenize gerek yok demektir inanıyorum çünkü ben denemek ve bu net yapmak istedim nedenidir.

Kullan SHA256. SHA512 seçenekleri dışında, onun kesin seçim hızlı bir karma ideal olurdu, ama gibi, mükemmel değil. Herhangi bir karma teknoloji gereği, tuz ilave güvenlik için karma emin olun.

Birisi kolayca tuzlu SHA256 karma çatlak nerede ilave bir not olarak, FRKT, göster bana lütfen? Bunu görmek gerçekten çok ilgileniyorum.

Important Edit:

İleriye bir sertleştirilmiş karma olarak bcrypt kullanın lütfen. Daha fazla bilgi olabilir found here.


Tuzlama üzerinde düzenleyin:

Siz de tuz gibi veritabanı tuz kullanıcı başına farklı bu şekilde kaydın benzersiz alanını kullanabilirsiniz rastgele bir sayı veya rastgele bayt akışı vb kullanın.

FRKT işaret ettiği gibi, the post by Thomas Ptacek at chargen.matasano.com açıklıyor simple, general-purpose hashing functions such as MD5, SHA1, SHA256 and SHA512 are poor password hashing choices.

Neden? Onlar çok hızlı - en az 1.000.000 MD5, modern bir bilgisayar ile çekirdek başına bir saniye sağlamalarının yüzden kaba kuvvet insanların kullanımı çoğu şifreler karşı mümkün olduğunu hesaplayabilirsiniz. Ve bu bir GPU tabanlı çatlama sunucu kümesi daha az bulunuyor!

Germe anahtarı olmadan tuzlama sadece gökkuşağı tablo precompute anlamına gelir, bu belirli tuz için ad hoc inşa etmek gerekir. Ama gerçekten işler bu kadar zor yapmaz.

Will @ Kullanıcı diyor ki:

Everyone is talking about this like they can be hacked over the internet. As already stated, limiting attempts makes it impossible to crack a password over the Internet and has nothing to do with the hash.

Onlar gerekmez. Görünüşe göre, içinde the case of LinkedIn onlar ortak SQL injection vulnerability giriş DB tablo almak için kullanılan ve şifreleri çevrimdışı milyonlarca kırık.

Sonra çevrimdışı saldırı senaryosunda geri gider:

The security really comes into play when the entire database is compromised and a hacker can then perform 100 million password attempts per second against the md5 hash. SHA512 is about 10,000 times slower.

Hayır, SHA512 10000 kez MD5 daha yavaş değil - bu sadece yaklaşık iki katı kadar sürer. Crypt/SHA512, diğer taraftan, rastgele bir tuzu ile, bir çok farklı karma üreten, kendi BCrypt muadili gibi, key stretching gerçekleştiren, çok farklı bir hayvan olan dahili ve bir şey alacak 500 ve hesaplamak için 999999 kat daha fazla (germe tunable).

SHA512 => aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
Crypt/SHA512 => $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21

Yani PHP için seçim Crypt / Blowfish (BCrypt), Crypt/SHA256 veya Crypt/SHA512 belirtilebilir. Ya da en azından Crypt/MD5 (PHK). Bkz www.php.net/manual/en/function.crypt.php

Onlar internet üzerinden kesmek olabilir gibi herkes bu konuda konuşuyor. Zaten girişimlerini sınırlayan imkansız internet üzerinden bir parola çatlamak yapar ve karma ile ilgisi yoktur, belirtti.

Tuz bir zorunluluktur, ancak karmaşıklığı veya birden tuzları bile farketmez. Tek başına herhangi bir tuz premade gökkuşağı tablo kullanarak saldırganın durur. Kullanıcı başına eşsiz tuz tüm kullanıcı tabanına karşı kullanmak için yeni bir gökkuşağı tablo oluşturma gelen saldırganın durur.

Tüm veritabanı tehlikeye olduğunda güvenlik gerçekten devreye giriyor ve bir hacker daha sonra md5 hash karşı saniyede 100 milyon şifre denemeleri gerçekleştirebilir. SHA512 yaklaşık 10.000 kat daha yavaştır. Bugünün gücü ile Karmaşık bir şifre hala md5 ile bruteforce için 100 yıl sürebilir ve sha512 ile uzun 10.000 kez alacaktı. Onlar her zaman saldırganın veritabanı indirilen eğer, o muhtemelen yine sistem içinde, hangi bilinmesi gerekir gibi tuzlar hiç bir BruteForce bitmiyor.

Ne insanlar eksik görünüyor korsan veritabanına erişimi varsa o da muhtemelen parola hash ve büyük olasılıkla sadece ona her başarılı kullanıcı adı şifre kombinasyonları göndermek için bu değiştirebilirsiniz php dosyasına erişimi olmasıdır. O web dizini erişimi yoksa o zaman sadece bir parola hash onu almak ve veritabanına içine yazabilirsiniz. SSL kullanmak istemiyorsanız başka bir deyişle karma algoritması giriş girişimlerini sınırlayan Ayrıca daha sonra saldırgan sadece bilgi almak için bağlantı olarak dinleyebilirsiniz gerçekten meselesi kadar sistem güvenliği gibi yapar, ve. (Kendi amaçları için) hesaplamak için uzun bir zaman alabilir algoritma gerekir sürece, o SHA-256 or SHA-512 with a user specific salt yeterli olmalıdır.

Ilave bir güvenlik önlemi bir komut dosyası (bash, toplu, piton, vb) ya da program kurmak ve buna bir karanlık isim vermek ve bu kontrol ve görmek login.php (çek tarih / zaman damgası) değişti ve eğer size bir e-posta göndermek gibi o varsa. Ayrıca muhtemelen yönetici hakları ile giriş tüm girişimleri oturum ve tüm veritabanına oturum ve günlükleri size e-posta zorunda girişimleri başarısız giriş yapmalıdır.

İki farklı parolalar, muhtemelen aynı md-5 üreten - MD5 çünkü çarpışma sorunları kötü.

Sha-1 Bu güvenli bol olurdu. Swerver diğer insanların sunucularıyla kullanıyor olabilir, dosya üzerinde kullanıcının APassword tutmuyorum size böylece şifre tuzlu sha-1 sürümünü saklamak nedenidir. Aksi takdirde, ne fark eder?

Hacker tüm şifrelenmemiş bir veritabanı çalarsa, nasıl bir karma tuzlu şifre yaptığı tek şey gelecek kayıtlı oturumları için kullanıcıyı taklit onu engellemek bazı - korsan zaten veri var.

Ne kullanıcı girişi düz bir parola ise ne iyi, karma değere sahip saldırganın yapar?

Ve geleceğin teknolojisi ile korsan bir milyon sha-1 tuşları kaba kuvvet saldırısı için, sunucu milyon oturumları onun anahtarlarını test hacker için ikinci işlemek ikinci oluşturabilir bile? Eğer korsan tuzlu ede-1 yerine, normal bir oturum gibi bir şifre ile oturum çalışırsanız icar budur.

Örneğin 25, ve sonra zaman bir iki dakika için dışarı kullanıcıyı - iyi bahis bazı makul sayıda kötü açma girişimleri sınırlamaktır. Kümülatif bady oturum açma girişimleri 24 saat içinde 250 vurur ve eğer, hesap erişimi kapatın ve sahibinin e-posta.

MD5, SHA1 ve SHA256 mesaj sindirir, not şifre karma fonksiyonları vardır.

Şu anda, sadece (NIST tarafından onaylanmış gibi) standart şifre karma veya anahtar türetme işlevi PBKDF2. Diğer uygun seçenekler, bir standart kullanılarak gerekli değilse, bcrypt ve daha yeni scrypt vardır. Wikipedia her üç fonksiyon için sayfaları:

https://en.wikipedia.org/wiki/PBKDF2
https://en.wikipedia.org/wiki/Bcrypt
https://en.wikipedia.org/wiki/Scrypt

SHA1 veya sha512 için MD5 geçiş çok inşaat güvenliğini artırmak olmayacaktır. Bir SHA256 veya SHA512 karma bilgisayar çok hızlıdır. Ortak donanım ile saldırgan hala (tek bir CPU ile) milyonlarca onlarca veya saniyede sağlamalarının (tek GPU) ile hatta milyarlarca deneyebilirsiniz. İyi şifre karma fonksiyonlar saldırganlar yavaşlatmak için bir çalışma faktörü bulunmaktadır.

At sayfa https://crackstation.net/hashing-security.htm şifre güvenlik uygulamaları geniş bir tartışma içerir.

İşte PHP programcıları için bazı öneriler: PHP SSS okuyun: http://php.net/manual/en/faq.passwords.php daha sonra bunlardan birini kullanın: