SORU
13 ŞUBAT 2011, Pazar


Zaman() iyi bir tuz?

Kendim yazmadım bazı kod bakıyorum. Kodu SHA512) ile parola karma için çalışır ve sadece tuz time() kullanır. time() çok basit bunun için bir tuz ya da bu kodu güvenli mi?

Cevaplar ve yorumlar için teşekkürler. Burada yeni okuyucular için özetlemek istiyorum

  • tuz her kullanıcı için farklı olması gerekir, Eğer 2 kullanıcı aynı anda kayıt varsa, bunların tuzları benzersiz olmayacak. Bu bir sorun, ama büyük bir şey değil.
  • ama tuz herhangi bir kullanıcı ile ilgili olarak, çok zaman olmamalı() iyi bir tuz değil.
  • "Düzenli olarak dağıtılmış, yüksek entropi rastgele bir tuz kullanın.Ağız dolusu bir " -- ne kod muhtemelen random, evenly distributed, high entropy tuz oluşturabilir?

Zaman değiştiririm hakkında Tamam, nasıl() rasgele bir dize 32 char uzun. Rastgele dize alfabe karakter kümesi içinde 32 kez döngü oluşturulabilir. Kulağa hoş geliyor mu?

CEVAP
13 ŞUBAT 2011, Pazar


Kısa cevap:

Hayır, time() iyi bir tuz değil.

Uzun cevap:

Salt Generation and open source software cevabım kopyalanmış

Tuz nedir?

Bir tuzrastgelekarma bir algoritma giriş için eklenen sabit bir uzunluğu bayt olarak ayarlayın.

Neden tuzlama (veya) tohum bir karma yararlıdır?

Karma için rastgele bir tuz eklemek aynı parolayı pek çok farklı sağlamalarının üretmesini sağlıyor. Tuz genellikle birlikte hash fonksiyonu sonucu ile veritabanında saklanır. Karma tuzlama nedenlerle bir dizi için iyi olur

  1. Tuzlama büyük ölçüde precomputated saldırıları zorluk/maliyet (rainbow tables dahil) artar
  2. Tuzlama aynı şifre aynı hash sonucu kesinleştirir. Eğer bu iki kullanıcı aynı şifre belirleyemiyor. Ve,daha da önemlisiz belirleyemiyor aynı kişi farklı sistemlerde aynı şifreyi kullanır.
  3. Tuzlama şifre karmaşıklığı, böylece önemli ölçüde her iki etkinliği azalan artarDictionary-veBirthday attacks.(Bu tuzu geçerlidirkarma) saklı ayrı.
  4. Uygun tuzlamabüyük ölçüdeartık pratik olduğu depolama precomputation saldırılar için gereken noktaya kadar artar. (Büyük küçük harf duyarlı bir alfa-sayısal şifre 16 bit tuz, 128 bit bir değer sağlaması, 8 karakter gökkuşağı azalma olmadan 13* exabytes *kaplardı).

Tuz sır olmaya gerek yok.

Bir tuz gizli bir anahtar, bir tuz 'çalışır' her örnek için karma işlevi özel hale getirerek. yerine değil Tuzlu hash ile, yokbirişlevi, ama mümkün olan her tuz değer bir karma. Bu saldıran saldırganın önlemekNdaha karma şifreleriNbir kez şifre saldıran maliyeti. Bu tuz noktasıdır.
"Gizli tuz" tuz değil, bir denir "anahtar" ve artık, bir karma bilgisayar olduğu anlamına gelir, ama bir Message Authentication Code (MAC). Bilgi işlem MAC zor iş (sadece birlikte bir anahtar tokat ve karma işlev bir değer daha zor) ve çok farklı bir konu tamamen.

Tuzrastgele olmalıdırher örneği için kullanılır. Bu, saldırganın her tuzlu hash ayrı saldırı olduğunu sağlar.
Eğer tuz (ya da tuzlama algoritma) gizli olmak güveniyorsanız, Security Through Obscurity (bir işe yaramaz) krallıkları girin. Büyük olasılıkla, tuz gizlilik ek bir güvenlik yok; sadece güvenlik sıcak bulanık hissi. Böylece sistem daha güvenli yapmak yerine, sadece sizi gerçeklikten koparıyor.

Neden tuz rastgele olmak zorunda mı?

Teknik olarak, tuz olmalıdırbenzersiz. Tuz noktası sağlaması her şifre için farklı olacak. Bu içindirdünya çapında. Beri orada merkezi bir organizasyon olan dağıtır benzersiz tuz ihtiyacını biz güvenmek için bir sonraki en iyi şey, rastgele seçimi ile bir öngörülemeyen rastgele, tercihen içinde bir tuz alanı yeterince büyük yapmak imkansız çarpışmalar (iki örneğini kullanarak aynı tuz değeri).

Bazı verilerden bir tuz elde etmek için denemek için cazip olduğunu "muhtemelen", kullanıcı KİMLİĞİ gibi, ama bu planlar genellikle başarısız bazı kötü ayrıntılar nedeniyle: . benzersiz

  1. Eğer kullanırsanızörneğin, kullanıcı KİMLİĞİbazı kötü adamlar, saldıran, farklı sistemlerin, sadece kendi kaynakları havuzu ve kullanıcı Kimlikleri için önceden hesaplanan Tablo 1 50 oluşturabilir. Kullanıcı KİMLİĞİ tektirsistem genelindeama değildünya çapında.

  2. Aynı için de geçerlidirkullanıcı adı: bir "kök" Unıx sistem, ama dünyanın pek çok kökleri vardır. başına var İçin bir gökkuşağı tablo "kök" milyonlarca sistemleri için uygulanabilir beri bu kadar zahmete değer olacaktır. Daha kötüsü de "orada, ve birçok sysadmin eğitim yok: parolalarını oldukça zayıf olabilir." bob çok var

  3. Teklik de geçici. Bazen, kullanıcıların parolalarını değiştirmek. Her biri içinyeni şifrebiryeni tuzseçili olmalıdır. Aksi takdirde, bir saldırganın eski parola karma elde edilen ve yeni karma ikisi de aynı anda saldırmayı deneyebilir.

Rastgele bir tuz şifreli olarak güvenli, öngörülemeyen bir PRNG elde kullanarak overkill, ama en azından bir tür olabilirispat edilebilirtüm bu tehlikelere karşı korur. Ne bilen saldırgan engelleyen bir şey değilbireyseltuz, onlara potansiyel hedefler önemli sayıda kullanılan büyük, şişman bir hedef vermek değil. Rasgele seçim hedefleri pratik olarak ince yapar.

Sonuç olarak:

Düzenli olarak dağıtılmış, yüksek entropi rastgele bir tuz kullanın. Yeni bir parola oluşturduğunuzda, yeni bir tuz kullanın veya bir parola değişikliği. Karma şifre ile birlikte tuz deposu. Büyük tuzları (en az 10 bayt, tercihen bir veya daha fazla 16) iyilik.

Bir tuz iyi bir şifre içine kötü bir şifre açılmıyor. Sadece saldırgan en azından sözlük saldırısı bedel ödeyecek olmasını sağlarherkötü kırdı şifreyi.

Yararlı kaynaklar:
stackoverflow.com: Non-random salt for password hashes
Bruce Schneier: Practical Cryptography (kitap)
Matasano Security: Enough with the Rainbow Tables
usenix.org: Unix crypt used salt since 1976
owasp.org: Why add salt
openwall.com: Salts

Yasal Uyarı:
Bir güvenlik uzmanı değilim. Bu cevap Thomas Pornin tarafından yapılmıştır olmasına rağmen)
Eğer orada güvenlik uzmanları herhangi yanlış bir şey bulursanız, lütfen yorum ya da bu wiki cevabı düzenleyin.

Rasgele tuz için iyi bir kaynak gibi görünüyor
Ayrıca okuyun: What is the most secure seed for random number generation?
Yokluğunda ayrılmış, donanım tabanlı, rastgele jeneratörler, en iyi şekilde elde edilmesi, rasgele veriler sormak işletim sistemi (Linux, bunun adı /dev/random /dev/urandom [hem avantajları ve sorunları, seçim senin zehir]; Windows, çağrı CryptGenRandom())

Eğer bazı nedenlerden dolayı rasgele yukarıda belirtilen kaynaklara erişiminiz yoksa, PHP içinde aşağıdaki fonksiyonu kullanabilirsiniz:
phpass v0.3 kaynağından

<?php
/**
 * Generate pseudo random bits
 * @copyright: public domain
 * @link http://www.openwall.com/phpass/
 * @param int $length number of bits to generate
 * @return string A string with the hexadecimal number
 * @note don't try to improve this, you will likely just ruin it
 */
function random_bits($entropy) {
    $entropy /= 8;
    $state = uniqid();
    $str = '';
    for ($i = 0; $i < $entropy; $i  = 16) {
        $state = md5(microtime().$state);
        $str .= md5($state, true);
    }
    $str = unpack('H*', substr($str, 0, $entropy));
    // for some weird reason, on some machines 32 bits binary data comes out as 65! hex characters!?
    // so, added the substr
    return substr(str_pad($str[1], $entropy*2, '0'), 0, $entropy*2);
}
?>

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chaîne de TheMoustic

    Chaîne de T

    5 Kasım 2006
  • Truc Minh

    Truc Minh

    23 Ocak 2011