SHA1, md5 ve SHA256: PHP oturumu için hangisi kullanılır?


133

Bir php girişi yapıyorum ve başka bir stackoverflow makalesinde okuduğum SHA1 veya Md5 veya SHA256 kullanıp kullanmamaya karar vermeye çalışıyorum. Bunlardan herhangi biri diğerlerinden daha güvenli mi? SHA1 / 256 için hala bir tuz mu kullanıyorum?

Ayrıca, parolayı mysql'de karma olarak saklamanın güvenli bir yolu mu?

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

$salt = createSalt();

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


Ayrıca bu yanıta bakın ve parola hashing ile ilgili bölümü okuyun.
Ja͢ck

Yanıtlar:


110

Ne. Kullanmalısınız bcrypt. Bahsettiğiniz hash'lerin tümü, donanım üzerinde hızlı ve kolay olacak şekilde optimize edilmiştir ve bu yüzden onları kırmak aynı nitelikleri paylaşır. Başka seçeneğiniz yoksa, en azından uzun bir tuz kullandığınızdan ve birkaç kez yeniden karıştırdığınızdan emin olun.

Bcrypt'i PHP 5.5+ ile kullanma

PHP 5.5, parola karması için yeni işlevler sunar . Modern web uygulamalarında parola depolaması için önerilen yaklaşım budur.

// Creating a hash
$hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);
// If you omit the ['cost' => 12] part, it will default to 10

// Verifying the password against the stored hash  
if (password_verify($password, $hash)) {
    // Success! Log the user in here.
}

PHP'nin eski bir sürümünü kullanıyorsanız gerçekten yükseltmelisiniz , ancak yapana kadar bu API'yi açığa çıkarmak için password_compat kullanabilirsiniz .

Ayrıca, lütfen password_hash()tuzu sizin için üretelim . CSPRNG kullanır .

Bcrypt'in iki uyarısı

  1. Bcrypt, 72 karakterden uzun olan tüm parolaları sessizce keser.
  2. Bcrypt, herhangi bir NULkarakterden sonra kesilecektir .

( Her iki uyarı için de Kavram Kanıtı burada.)

Parolalarınızı bcrypt üzerinden çalıştırmadan önce önceden hashing yaparak ilk uyarıyı çözmek isteyebilirsiniz , ancak bunu yapmak, uygulamanızın ilk önce ikinci sırada çalışmasına neden olabilir.

Kendi planınızı yazmak yerine, güvenlik uzmanları tarafından yazılmış ve / veya değerlendirilmiş mevcut bir kütüphaneyi kullanın.

TL; DR - bcrypt kullanın .


1
ayrıca, bunda çok yeniyim: sha1, sha256 ve md5, bahsettiğiniz tüm 'karmalar' mı?
Tony Stark

3
Evet. SHA1, SHA256 ve MD5'ten ve hız için optimize edilmiş bir dizi başka hash'den bahsediyorum. Bir şifreyi güvence altına almak için hız için optimize edilmiş bir karma kullanmak istemezsiniz. Nedenini tartışan birçok iyi makale var ve özellikle bunu seviyorum: chargen.matasano.com/chargen/2007/9/7/…
Johannes Gorset

4
PHP 5.3'ten beri "crypt" işlevine dahildir. Daha eski bir sürümünüz varsa, bir sonraki en iyi şey için "phpass" çerçevesine bakarım.
Johannes Gorset

3
@Stanislav Palatnik SHA512 iyi bir alternatif. Beni yanlış anlamayın; Uzatılmış ve tuzlanmış bir SHA512 hash'in güvensiz olduğunu söylemiyorum. Güvenli. Öyle olsa bile, bcrypt'in daha güvenli olduğu ve bu yüzden onu kullanmamak için bir neden göremiyorum.
Johannes Gorset

10
@Cypher: bcryptEşit derecede yavaş kırılma açısından yavaş olacak şekilde tasarlanmıştır.
Johannes Gorset

23

Bence md5 veya sha256 veya hız için optimize edilmiş herhangi bir hash kullanmak gayet iyi ve diğer kullanıcıların sahip olabileceği herhangi bir çürütülmeyi duymayı çok merak ediyorum. İşte nedenlerim

  1. Kullanıcıların zaman hayır, yine kullanıcı karma ve bu şifreler genellikle ilk kullanıldığı değil şifresini yazmanız izin edilecektir şifreleme önemli böylece bu, öyle Tanrı, aşk, savaş, barış gibi zayıf şifreler kullanmasına izin Eğer DEĞİL gidiyor şifrelemeyle ilgili herhangi bir şey olması.

  2. SSL kullanmıyorsanız veya bir sertifikanız yoksa, trafiği dinleyen saldırganlar parolayı çekebilir ve javascript veya benzeri ile şifreleme girişimleri istemci tarafındadır ve kolayca kırılır ve üstesinden gelinir. Yine bunun sunucu tarafındaki veri şifreleme ile hiçbir ilgisi OLMAYACAKTIR .

  3. Kaba kuvvet saldırıları zayıf şifrelerden yararlanacaktır ve tekrar kullanıcının verileri girmesine izin verdiğiniz için, oturum açma sınırlamanız 3 veya biraz daha fazla değilse, sorunun yine veri şifrelemeyle ilgisi YOKTUR .

  4. Veritabanınız tehlikeye atılırsa, ne kadar şifreli yaparsanız yapın, büyük olasılıkla karma teknikleriniz de dahil olmak üzere her şey tehlikeye atılmıştır. Yine bu, hoşnutsuz bir çalışan XSS saldırısı veya sql enjeksiyonu veya parola şifrelemenizle ilgisi olmayan başka bir saldırı olabilir.

Hala şifrelemeniz gerektiğine inanıyorum, ancak şifrelemenin yaptığını görebildiğim tek şey, veritabanına zaten erişmiş veya bir şekilde erişim kazanmış kişilerin parolayı yüksek sesle okumasını engellemek. Veritabanında yetkisi olmayan biri varsa, endişelenmeniz gereken daha büyük sorunlarınız var, bu yüzden Sony, şifreli bir parolanın kredi kartı numaraları dahil her şeyi koruduğunu düşündükleri için, tek yaptığı o alanı korumaktır.

Bir veritabanında şifrelerin karmaşık şifrelenmelerinde görebildiğim tek saf fayda, çalışanların veya veritabanına erişimi olan diğer kişilerin yalnızca parolaları okumasını geciktirmesidir. Bu nedenle, küçük bir proje veya sunucu tarafında güvenlik konusunda fazla endişelenmeyeceğim bir şeyse, bunun yerine bir istemcinin sunucuya gönderebileceği sql enjeksiyonu, XSS saldırıları veya diğer yolların bolluğu gibi herhangi bir şeyin güvenliğini sağlamak konusunda daha fazla endişelenirim. tehlikeye atılabilir. Birisi aynı fikirde değilse, süper şifreli bir parolanın istemci tarafında bir zorunluluk olduğu bir şekilde okumayı dört gözle bekliyorum.

Bunu açıklığa kavuşturmak istememin nedeni, çoğu zaman insanların şifrelenmiş bir parolanın ele geçirilmesi konusunda endişelenmek zorunda olmadıkları anlamına geldiğine inandıkları ve web sitesinin güvenliğini sağlamak için endişelenmeyi bıraktıklarıdır.


1
İyi ifade edilmiş. Siber Güvenlik, hashing tekniklerine tercih edilir, yalnızca verilerinizi kaydetmekle kalmaz, aynı zamanda Sunucu savunmasını hazır tutar.
CᴴᴀZ

14
Bu gerçekten yanlış bilgilendirilmiş. Elbette, veritabanındaki parolaları güvenli bir şekilde karma olarak kullanmak, bir uygulama düzeyinde veya veritabanı düzeyinde güvenliği artırmaz. Her şey güvenlik için değil. Veritabanınızdaki kullanıcı parolasını 2 nedenden dolayı güvenli bir şekilde hash etmek istiyorsunuz; ilk olarak müşteri, diğer sitelerde kullanabilecekleri veya kullanamayabilecekleri şifreleri konusunda size güveniyor, bu nedenle şifrenizin güvenliği ihlal edilmiş olsa bile bunun kurtarılabilir olmadığından emin olmak istersiniz, ikincisi, güvenlik durumunda sorumluluğu kaldırmak istersiniz ihlal. Herhangi bir dava bilmiyorum, ancak şifrelerin sızdırılması şirketinizin gerçekten kötü görünmesine neden oluyor.
James McMahon

6
Bu kötü bir tavsiye. Birisi veritabanınızı çalarsa ve tüm şifrelenmiş parolalarınızı alırsa, veritabanınızın diğer bölümlerini de tehlikeye atmış olsa bile, parolaların kırılmasını ve oturum açmasını önlemek yine de önemli olabilir. (Örneğin bir bankacılık web sitesini düşünün.) Hız için optimize edilmiş algoritmalar, saldırganların bir eşleşme bulana kadar birçok adayı çalınan karmalara karşı test etmesini sağlar. Bcrypt ve scrypt gibi algoritmalar, hangi algoritmayı kullandığınızı bilseler bile, adayları hash'e karşı test etmeyi yavaş ve pahalı hale getirir. Yani birisi hash'leri çalarsa daha iyi koruma sağlarlar.
Richard

6
"Veritabanınız tehlikeye atılırsa, ne kadar şifreli yapmış olursanız olun, büyük olasılıkla karma teknikleriniz de dahil olmak üzere her şey tehlikeye atılmıştır." Bu yüzden bcrypt çok önemlidir. Bcrypt ile, birisinin karma değerlerine sahip olup olmaması gerçekten önemli değildir. SHA1 / MD5 gibi hızlı bir karma algoritma ile yapar.
ceejayoz

Sanırım bazılarınızın gözden kaçırdığı nokta, diğer tüm veriler açık metin olduğunda şifrenin% 1000 güvenli olmasının önemli olmamasıdır. Örneğin, veritabanının tamamı ele geçirilirse, bilgisayar korsanı artık tüm açık metin kredi kartı numaralarına sahiptir. Evet, birçok kişi farklı web sitelerinde aynı parolayı kullanıyor, ancak onlara zaten mide bulandırıcı bir şekilde bunu yapmamaları söylendi, bu yüzden artık bizim sorunumuz bu değil. Veritabanının kendisi hassas bilgiler içeriyorsa ve tehlikesi bir endişe kaynağıysa, gerekli olduğunu düşündüğünüz kadar güçlü bir şekilde tüm veritabanını şifreleyin.
UncaAlby

15

Johannes Gorset'in belirttiği gibi , Matasano Security'den Thomas Ptacek'in yazısı, MD5, SHA1, SHA256 ve SHA512 gibi basit, genel amaçlı hashing fonksiyonlarının neden zayıf parola hashing seçenekleri olduğunu açıklıyor .

Neden? Çok hızlılar - modern bir bilgisayarla çekirdek başına saniyede en az 1.000.000 MD5 karması hesaplayabilirsiniz, bu nedenle insanların kullandığı çoğu parolaya karşı kaba kuvvet uygulanabilir. Ve bu, GPU tabanlı bir kırma sunucusu kümesinden çok daha az!

Anahtar esnetmeden tuzlama, sadece gökkuşağı tablosunu önceden hesaplayamayacağınız anlamına gelir, o özel tuz için onu özel olarak oluşturmanız gerekir. Ama işleri o kadar da zorlaştırmayacak.

Kullanıcı @Will diyor ki:

Herkes internet üzerinden hacklenebilecekmiş gibi bundan bahsediyor. Daha önce belirtildiği gibi, girişimlerin sınırlandırılması, İnternet üzerinden şifre kırmayı imkansız kılar ve karma ile hiçbir ilgisi yoktur.

Gerek yok. Görünüşe göre, LinkedIn durumunda , oturum açma DB tablosunu almak için yaygın SQL enjeksiyon güvenlik açığını kullandılar ve milyonlarca parolayı çevrimdışı olarak kırdılar.

Sonra çevrimdışı saldırı senaryosuna geri döner:

Veritabanının tamamı tehlikeye girdiğinde ve bir bilgisayar korsanı daha sonra md5 karma değerine karşı saniyede 100 milyon şifre denemesi gerçekleştirdiğinde güvenlik gerçekten devreye girer. SHA512 yaklaşık 10.000 kat daha yavaştır.

Hayır, SHA512 , MD5'ten 10000 kat daha yavaş değildir - yalnızca iki katı kadar sürer. Crypt / SHA512 , diğer taraftan, onun BCrypt meslektaşı gibi, gerçekleştirdiği, bu çok farklı bir canavar anahtar germe , yerleşik rasgele tuz ile çok farklı bir karma üreten ve bilgi işlem için çok fazla olarak 500 ve 999999 kez arasında bir şey alacak (germe ayarlanabilir).

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'dir. Veya en azından Crypt / MD5 (PHK). Bkz. Www.php.net/manual/en/function.crypt.php


Basit parola hashingi iyidir, sunucuyu güvende tutmak güvenlik duvarına bağlıdır .. ve "güvenlik duvarı" derken kaba kuvveti engelleyen / yavaşlatan reaktif bir güvenlik duvarını kastediyorum (bir insan yalnızca BUNU hızlı yazabilir) .. bu yarışma anlamsızdır .. .. "ya bir bilgisayar korsanı içeri girerse ve şimdi her şeye sahipse" (yüz masası) - bir bilgisayar korsanı sunucunuza girerse - biter. Şifreler çoğunlukla çok basit oldukları için veya yazılım geliştiricileri bir siber suçlu gibi düşünemeyecek kadar tembel oldukları için kırılır.

@argon Lütfen tekrar okuyun. Parolalara hashing uygulamasının tüm amacı, oturum açma DB'niz tehlikeye girdiğinde (ve bir noktada olacaktır), çoğu zaman farklı sitelerdeki kullanıcılar tarafından yeniden kullanılan tüm kullanıcı parolalarını hemen sızdırmamanızdır - aksi takdirde basit girişten sonra gecikme yapardı. Ve "sunucunuza girerlerse oyun biter" tartışmalı bir konudur çünkü sunucunuzun içine girmeleri gerekmez . Bilgisayar korsanlarının kullandığı en yaygın güvenlik açığı SQL enjeksiyonu olmuştur (Linkedin vakasına bakın), ardından hash'i zorla kullanırlar. Bu yüzden tuzlamaya ve esnetmeye ihtiyacınız var.
LexLythius

güvenlik gereksinimi gerçekten çok yoğunsa, parolaları başka bir yerde saklamak iyi bir fikir olabilir. Verilerinizi (ve kaynak kodunu) korumanın pek çok yolu vardır - "eğer / ne zaman" için ... .. - ancak "gazilyon bit" e kadar şifreleri hashing işlemi yalnızca şu kadar güvenlidir: şifre oluşturucu / konuk-sistem , veri iletimi ve sunucu donanımına hizmet veren insanlar. .. şu söyleniyor: Hashing'in işe yaramaz olduğunu söylemiyorum, ancak eğer çözümünüz sadece daha karmaşık hashler ise, o zaman kuantum bilgisayarlarla ilgili olarak yakın gelecekte işe yaramayacağını söylüyorum.

Yinelemeli hashing, herhangi bir hackleme girişimine iş / maliyet ekler. Ne kadar çok yineleme olursa, kırılması o kadar zor olur, dolayısıyla SHA256 gibi hızlı karmalar bile kullanılabilir. Yinelemeler rastgele olmalı ve herkese açık hale getirilebilir. password_hash()hash içindeki maliyeti gösterir.
Victor Stoddard

@VictorStoddard Evet, kendi karma düzeninizi döndürebilir ve ayarlanabilir anahtar genişletme sağlayabilirsiniz. Ama neden olur istemek zaten kullanan mevcut yerine bunu yapmak için, uzmanlar oluşturulan ve tam olarak bu amaç için kullanılabilir yapmış çok daha iyice incelenip algoritmalar?
LexLythius

13

Kullanın SHA256. SHA512Hızlı bir hash için ideal olacağı gibi mükemmel değildir , ancak seçenekler dışında kesin seçimdir. Herhangi bir hashing teknolojisine göre, ek güvenlik için hash'i tuzladığınızdan emin olun.

Ek bir not olarak, FRKT, lütfen bana birinin tuzlu bir SHA256 karmasını kolayca nerede kırabileceğini gösterin. Bunu görmekle gerçekten çok ilgileniyorum.

Önemli Düzenleme:

İlerlerken lütfen bcryptsağlamlaştırılmış bir hash olarak kullanın . Daha fazla bilgiyi burada bulabilirsiniz .


Tuzlamada Düzenle:

Rastgele bir sayı veya rastgele bayt akışı vb. Kullanın. Veritabanınızdaki kaydın benzersiz alanını tuz olarak da kullanabilirsiniz, bu şekilde kullanıcı başına tuz farklıdır.


1
Ancak hız için optimize edilmişlerdir, yani kaba kuvvetle hacklemeyi etkinleştirirler.
arbales

6
Geriye kalan, bu bir şifreyi güvenceye almaktır. Tuz içeren bir hash kullanarak, ardından web sitesine 3 deneme limiti ekleyerek, bilgisayar korsanlarının girişimlerini (hatta kaba kuvvet kullananları) önemli ölçüde yavaşlatırsınız. Herhangi bir saf şifreleme kullanarak, şimdi başka bir sorununuz var - anahtarı korumak. Anahtar bulunursa, veritabanınızın tamamı tehlikeye atılır (tuz eklenmemişse). Hashes ancak, orijinal şifreyi sistemden asla alamazsınız ve böyle olması gerekir.
Kyle Rosendo

1
Belirtildiği gibi, MD ve SHA serilerindeki sorun, hız için optimize edilmiş olmalarıdır. Hesaplama geliştikçe bu nitelikteki karmaların giderek daha güvensiz hale gelmesi kaçınılmazdır.
Johannes Gorset

1
Bilgi işlem geliştikçe her şey giderek kötüleşir / güvensiz hale gelir. SHA512 vb. Saldırıya uğradığında, daha güvenli algoritmalar kullanıma sunulacaktır. Bu, her durumda hesaplamanın doğasıdır.
Kyle Rosendo

1
php'de bir tuz yapmanın iyi bir yolu nedir? örnek kodunuz var mı? Sanırım 'zürafa' gibi bir şey seçmemeliyim
Tony Stark

4

İnsanların eksik gibi göründüğü şey, eğer bilgisayar korsanı veritabanına erişime sahipse, muhtemelen parolayı hash eden php dosyasına da erişebilir ve büyük olasılıkla ona tüm başarılı kullanıcı adı parola kombinasyonlarını göndermek için bunu değiştirebilir. Web dizinine erişimi yoksa, her zaman bir parola seçip, bunu veritabanına yazabilir. Başka bir deyişle, hash algoritması sistem güvenliği kadar önemli değildir ve oturum açma girişimlerini sınırlandırmak da SSL kullanmıyorsanız, saldırgan sadece bilgiyi almak için bağlantıyı dinleyebilir. Algoritmanın hesaplaması uzun zaman alması gerekmedikçe (kendi amaçlarınız için) , kullanıcıya özel tuz içeren SHA-256 veya SHA-512 yeterli olacaktır.

Ek bir güvenlik önlemi olarak bir komut dosyası (bash, batch, python, vb.) Veya program kurun ve ona belirsiz bir ad verin ve login.php'nin değişip değişmediğini kontrol etmesini sağlayın (tarih / saat damgasını kontrol edin) ve size bir e-posta gönderin eğer varsa. Ayrıca muhtemelen tüm oturum açma girişimlerini yönetici haklarıyla günlüğe kaydetmeli ve veritabanına giriş yapmak için tüm başarısız girişimleri günlüğe kaydetmeli ve günlüklerin size e-postayla gönderilmesini sağlamalıdır.


"İnsanların eksik gibi gözüktüğü şey, eğer bilgisayar korsanı veritabanına erişebiliyorsa, parolayı hash eden php dosyasına da erişebiliyor olmasıdır ..." Bu doğru değil. En yaygın güvenlik açıklarından biri, veritabanına okuma / yazma yeteneği verirken PHP koduna sıfır erişim sağlayan SQL enjeksiyonudur.
ceejayoz

Koda erişiminiz varsa, kullanıcının gönderdiği tüm parolayı düz metin olarak değiştirebilir ve saklayabilirsiniz. Yani hayır, eğer kod tehlikeye atılırsa OYUN BİTTİ.
magallanes

3

Herkes internet üzerinden hacklenebilecekmiş gibi bundan bahsediyor. Daha önce belirtildiği gibi, girişimlerin sınırlandırılması, İnternet üzerinden şifre kırmayı imkansız kılar ve karma ile hiçbir ilgisi yoktur.

Tuz bir zorunluluktur, ancak karmaşıklık veya çoklu tuzların önemi bile yoktur. Tek başına herhangi bir tuz, saldırganın önceden hazırlanmış bir gökkuşağı masası kullanmasını engeller. Kullanıcı başına benzersiz bir tuz, saldırganın tüm kullanıcı tabanınıza karşı kullanmak üzere yeni bir gökkuşağı tablosu oluşturmasını engeller.

Veritabanının tamamı tehlikeye girdiğinde ve bir bilgisayar korsanı daha sonra md5 karma değerine karşı saniyede 100 milyon şifre denemesi gerçekleştirdiğinde güvenlik gerçekten devreye girer. SHA512 yaklaşık 10.000 kat daha yavaştır. Günümüzün gücüne sahip karmaşık bir parolanın md5 ile bruteforce yapması 100 yıl, SHA512 ile 10.000 kat daha uzun sürebilir. Tuzlar, her zaman bilinmeleri gerektiği için bir bruteforce durdurmazlar, ki eğer saldırgan veritabanınızı indirdiyse, muhtemelen zaten sisteminizdeydi.


1

Çarpışma sorunları nedeniyle MD5 kötü - muhtemelen aynı md-5'i oluşturan iki farklı parola.

Sha-1 bunun için oldukça güvenli olacaktır. Şifrenin tuzlu sha-1 sürümünü saklamanızın nedeni, siz swerver'ın kullanıcının şifresini başka kişilerin sunucularında kullanıyor olabileceği dosyada tutmamanızdır. Aksi takdirde ne fark eder?

Bilgisayar korsanı şifrelenmemiş veritabanınızın tamamını bir şekilde çalarsa, şifrelenmiş bir şifrenin yaptığı tek şey, gelecekteki oturumlar için kullanıcının kimliğine bürünmesini engellemektir - bilgisayar korsanında zaten veriler vardır.

Kullanıcınızın girdiği şey düz bir parola ise, saldırganın hash edilmiş değere sahip olmasının ne yararı var?

Ve geleceğin teknolojisine sahip bir bilgisayar korsanı, bir kaba kuvvet saldırısı için saniyede bir milyon sha-1 anahtarı üretebilse bile, sunucunuz, bilgisayar korsanının anahtarlarını test etmesi için saniyede bir milyon oturum açma işlemini gerçekleştirir mi? Bu, bilgisayar korsanının normal bir oturum açma gibi bir parola yerine tuzlu sha-1 ile oturum açmaya çalışmasına izin verirseniz.

En iyi bahis, kötü oturum açma girişimlerini makul bir sayı ile sınırlandırmaktır - örneğin 25 ve ardından kullanıcının bir veya iki dakika için zaman aşımına uğraması. Ve eğer kümülatif hatalı oturum açma girişimleri 24 saat içinde 250'ye ulaşırsa, hesap erişimini kapatın ve sahibine e-posta gönderin.


Daha zayıf bir şifreleme kullanıyor olsam bile, pratik olarak hiçbir sistem saniyede 1 milyondan fazla deneme için kaba saldırı yapamaz.
magallanes

1
Üç başarısız oturum açma ve kilitlenirsiniz. Dönem, hikayenin sonu. Bilgisayar korsanı önce "password", "pa $$ word" ve "passw0rd" (kilitleyin!) Denerse, "1234" gibi süper aptal şifreler bile güvenlidir. Kullanıcının nasıl yeniden erişim sağlayacağı, artık güvenliğinize bağlı noktanız haline gelir ve ne yaptığınız, kullanıcı tabanınızın boyutuna bağlıdır. 200 kullanıcı mı? Yardım için telefon etmelerini sağlayın.
UncaAlby

Bu cevap başka birine mantıklı gelmiyor mu yoksa sadece ben miyim?
Wildcard

1

MD5 ve SHA1 arasındaki karşılaştırma burada. Hangisinin daha iyi olduğu konusunda net bir fikir edinebilirsiniz.

görüntü açıklamasını buraya girin


1

Argon2i kullanın . Argon2 şifre karma işlevi Şifre Hashing Rekabet kazandı.

Kullanılıyorsa Diğer makul seçimler, argon2 kullanılamaz vardır scrypt , bcrypt ve PBKDF2 . Wikipedia'da şu işlevler için sayfalar vardır:

MD5, SHA1 ve SHA256, şifre karma işlevleri değil, mesaj özetidir. Bu amaç için uygun değillerdir.

MD5'ten SHA1 veya SHA512'ye geçmek, yapının güvenliğini çok fazla artırmayacaktır. Bir SHA256 veya SHA512 karmasını hesaplamak çok hızlıdır. Ortak donanıma sahip bir saldırgan, saniyede on milyonlarca (tek bir CPU ile) veya hatta milyarlarca (tek bir GPU ile) karma deneyebilir. İyi şifre karma işlevleri, sözlük saldırılarını yavaşlatmak için bir çalışma faktörü içerir.

İşte PHP programcıları için bir öneri: PHP SSS bölümünü okuyun ve password_hash () kullanın .


0

Bir sonraki noktayı varsayalım: bilgisayar korsanları, kullanıcılar ve şifre (şifrelenmiş) dahil olmak üzere veri tabanımızı çalar. Bilgisayar korsanları, bildikleri bir parolayla sahte bir hesap oluşturdu.

MD5 zayıftır çünkü kısa ve popülerdir ve pratik olarak şifresiz her hash nesli bir sözlük saldırısı için zayıftır. Fakat..

Öyleyse, bir SALT ile hala MD5 kullandığımızı varsayalım. Hackerlar SALT'ı bilmiyorlar ama belirli bir kullanıcının şifresini biliyorlar. Böylece test edebilirler: ????? 12345 burada 12345 şifreyi bil ve ????? tuzdur. Bilgisayar korsanları er ya da geç SALT'ı tahmin edebilir.

Ancak, bir MD5 + TUZ kullandıysak ve MD5 uyguladıysak, o zaman bilgileri kurtarmanın bir yolu yoktur. Yine de tekrar ediyorum, MD5 hala kısa.

Örneğin şifrem: 12345 diyelim. SALT BILLCLINTON

md5: 827ccb0eea8a706c4c34a16891f84e7b

Karma ile md5: 56adb0f19ac0fb50194c312d49b15378

md5 üzerinde karma ile mD5: 28a03c0bc950decdd9ee362907d1798a Bu çevrimiçi hizmeti kullanmayı denedim ve onu kıramayan hiçbiri bulamadım. Ve onun tek MD5! (bugünkü gibi olabilir kırılabilir çünkü md5'i çevrimiçi olarak oluşturdum)

Aşırı öldürmek istiyorsanız, SHA256 bir tuzla ve iki kez uygulanırsa fazlasıyla yeterlidir.

tldr MD5 (HASH + MD5 (şifre)) = tamam ama kısa, SHA256 fazlasıyla yeterli.


Bir tuz ile MD5 kullanmanın sorunu, bilgisayarların süper hızlı hızlarda tek bir parolaya kaba kuvvet saldırısı oluşturabilmesidir. shylor.com/2015/09/14/php-5-5-secure-password-hashing
Shylor

0

Bir md5 şifrelemesi en kötülerinden biridir, çünkü kodu çevirmeniz gerekir ve zaten şifresi çözülmüştür. Size SHA256'yı tavsiye ederim. Biraz daha uzun programlama yapıyorum ve iyi bir deneyim yaşadım. Aşağıda bir şifreleme de olacaktır.

password_hash() example using Argon2i

<?php
echo 'Argon2i hash: ' . password_hash('rasmuslerdorf', PASSWORD_ARGON2I);
?>
The above example will output something similar to:

Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0
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.