it-swarm-tr.com

Tuz olarak ne kullanılmalıdır?

Saklı parolaların üstünde tuz kullanmanın en iyisi olduğunu duyuyorum. Ama tuz olarak kullanacağımı bilmiyorum ne. İyi bir tuz ne olurdu?

43
Sal

Her bir kişi için şifreyi saklayacağınız bir tablonuz olduğunu varsayalım.

Oluşturulan şifreyi "kaydetmek" için aşağıdakileri yapın

  1. kullanıcıdan giriş yap
  2. şifreyi al
  3. rastgele değerlerden biraz tuz üretir. Diyelim ki/dev/random'dan (@Michal'ın önerdiği gibi), "a12bc34de56fg" var
  4. Karma parolayı oluşturmak için bazı karma işlevini kullanın. Diyelim ki orijinal şifre "1parola" ve herhangi bir SHA karma) kullanacaksınız.

hashed_password = SHA (SHA (SHA (.... SHA ("1passworda12bc34de56fg"))))))))

Hashed_password öğesini giriş ve tuzla birlikte tabloda saklayın.

login      password      salt
--------------------------------------
john       a7b82783...   a12bc34de56fg

Ardından, bir kullanıcının uygulamanıza ne zaman eriştiğini doğrulamak için:

  1. giriş bilgilerini ve şifreyi al
  2. veritabanından o giriş için tuzu alın (tuza sahip olacaksınız: a12bc34de56fg)
  3. düz metin şifresini tuz ile birleştirin ve tüm karma işlemini tekrarlayın:

hashed_password = SHA (SHA (SHA (.... SHA ("1passworda12bc34de56fg"))))))))

Hesapladığınız hashed_password'ün veritabanında depolananla aynı olduğunu doğrulayın. Şifrenin doğru olup olmadığını bileceksiniz.

Bu kadar!. Tuzu istediğiniz herhangi bir rastgele kaynaktan alabilirsiniz. Neden rastgele olmalı? Rastgele olmayan herhangi bir tuz, uygulamanızı kaba bir şekilde zorlamaya çalışmayı çok daha kolay hale getireceğinden.

13
woliveirajr

Parola karma için bir tuz için klasik tavsiye:

  • A 128 bit veya daha fazla rastgele değer ;
  • kriptografik olarak rastgele bir sayı üretecinden elde edildi ( /dev/random veya /dev/urandom günümüzün Unix'lerinde);
  • her giriş için benzersizdir (yani aynı tuzu tekrar kullanmayın, her yeni şifre için yeni bir tuz üretin);
  • veritabanında düz metin olarak saklanır (hash doğrulanırken tuzun kullanılabilir olması için).

Çok sayıda konuyla ilgili geçmiş tartışmalar . Ve en önemlisi, kendi parola karma düzeninizi uygulamamalısınız - kanıtlanmış, iyi test edilmiş, hakemli bir uygulama ( bcrypt/PBKDF2) .

30
Jesper M

Bazıları diğerlerinden daha güçlü olmasına rağmen cevap "neredeyse her şey" dir.

Diyelim ki md5 (salt.password) kullandığınızı varsayalım.

Tuzsuz hackerlar, sadece bir Rainbow tablosundaki karışı arayarak şifrelerin çoğunu çabucak kırarlar.

Diyelim ki tüm şifreleriniz için tuz olarak "x" kullandınız. Şifrelerinizin birçoğu hala bulunur, ancak daha azı bulunur. Çünkü şifre "p4ssw0rd" ise, tuz ile "xp4ssw0rd" olur - biraz daha zorlaşır, ancak önemli ölçüde değil.

Şimdi tüm şifreleriniz için "% X88Fc + 7" kullandığınızı varsayalım. Bu noktada, Rainbow tabloları çalışmaz. Ancak, tüm şifreler için bir tuz kullanmanın sonucu olarak, bilgisayar korsanı bu varsayımla bir Gökkuşağı tablosu oluşturabilecek ve önceden Gökkuşağı masaları inşa edebilecektir. Çok daha güvenli, ama mükemmel değil.

Bir sonraki en güvenli seçenek, kullanıcı adını tuz olarak kullanmak, yani 'md5 (kullaniciadi.password)' kullanmaktır. Yine, bu standart Rainbow tablosunu yener, ancak bir bilgisayar korsanı belirli bir kullanıcı adı ("root" veya "yönetici" gibi) için Rainbow tablosu oluşturabilir, böylece şifre her değiştirildiğinde, bilgisayar korsanı Rainbow'a bakabilir masaya tekrar çatlamak yerine.

Daha da güvenli olmak için farklı kullanıcılar için farklı bir rastgele tuz seçin. Bunu kullanıcı adı ve şifre karmasıyla birlikte saklamanız gerekir. Bu Rainbow masalarını tamamen yener.

Bazı basit bir şey yerine, "güvenli" rastgele sayı üreteci önermektedir. Örneğin, kullanıcı bir hesap oluşturduğunda bir MD5 (zaman damgası + kullanıcı adı) yapmak basittir, ancak kriptografik olarak güvenli değildir (zaman damgaları ve kullanıcı adları tahmin edilebilir ve dolayısıyla düşük entropidir). Ancak, bilgisayar korsanı veritabanını çalarken tuzun bir kopyasına sahip olduğu için sorun değil.

10

Tuz için sadece rastgele bir bit kullanın.

Linux'ta _/dev/random_ kullanabilirsiniz. Çevresel gürültüye dayalı çekirdek rastgele sayı üretecidir. Sanal makineler dışında oldukça tahmin edilemez. Eğer kutunuza fiziksel fare takılı olduğunu varsayalım, o zaman _/dev/random_ size tuz için iyi yüksek kaliteli rastgele bitler verecektir.

İşte başlamak için iyi bir makale . Ayrıca bkz. Harici referanslar.

İşte bir example Java kod . Tuzun createUser() fonksiyonunda nasıl üretildiğini ve DB'de nasıl saklandığını görün. _import Sun.misc. ..._ bu çok iyi bir kod.

1
Michał Šrajer