Parolanızı Tuzlama: En İyi Uygulamalar?


162

Her zaman merak ettim ... Hash için bir şifre tuzlarken hangisi daha iyidir: önek veya postfix? Neden? Yoksa tuzladığınız sürece önemli mi?

Açıklamak için: Hepimiz (umarım) şimdi gerektiğini biliyorum tuz [biz veritabanında saklama için karma önce bir parola : Edit gibi şeyler önleyebilirsiniz Yani son zamanlarda Jeff Atwood ne ]. Tipik olarak bu, hash algoritmasından geçmeden önce tuzun şifreyle birleştirilmesiyle yapılır. Ancak örnekler değişir ... Bazı örnekler, şifrenin önüne tuz ekler. Bazı örnekler tuzdan sonra şifreyi ekler . Hatta tuzu ortaya koymaya çalışan bazılarını gördüm.

Peki hangisi daha iyi bir yöntem ve neden? Karma çarpışma olasılığını azaltan bir yöntem var mı? Google'ım bu konuda iyi bir analiz yapmadı.

Düzenleme: Büyük cevaplar millet! Sadece bir cevap seçebildiğim için üzgünüm. :)



1
@ Jaccco: harika bir giriş. Teşekkürler!
Randolpho

3
En iyi uygulama, PBKDF2 (standart), bcrypt veya hatta scrypt kullanarak sizin için tuzlama yapan bir şifreleme işlevi kullanmaktır. Stephen'a bunu işaret ettiği için teşekkürler.
Maarten Bodewes

1
Hemen hemen tüm standart şifre hash yapıları tuz ve şifreyi birleştirmeye özen gösterir, bu yüzden endişelenmemelisiniz. Standart bir şifre karması kullanmıyorsanız, bir tanesine geçiş yapın.
CodesInChaos

1
@Omu Kötü öneri. 1) SHA-1'in tek bir yinelemesi çok hızlı, en az 10000 kullanmalısınız ve bu bile oldukça zayıf. 2) Varsayılan tuz çok küçük. 8 bayt minimum ve 16 bayt önerilir.
CodesInChaos

Yanıtlar:


111

Ön ek veya son ek önemsizdir, yalnızca şifreye bir entropi ve uzunluk eklemekle ilgilidir.

Bu üç şeyi göz önünde bulundurmalısınız:

  1. Tuz, sakladığınız her şifre için farklı olmalıdır. (Bu oldukça yaygın bir yanlış anlamadır.)
  2. Kriptografik olarak güvenli rastgele sayı üreteci kullanın.
  3. Yeterince uzun bir tuz seçin. Doğum günü problemini düşünün.

Dave Sherohman'ın neden bir kullanıcının adı (veya diğer kişisel veriler) yerine rastgele oluşturulmuş tuzları kullanmanız gerektiği konusunda başka bir soruya mükemmel bir cevap var. Bu önerileri takip ederseniz, tuzunuzu nereye koyduğunuz önemli değildir.


4
Eski bir soruya bir bağlantı ekledim, bu cevapları okuyun. Temel olarak, şifre başına farklı bir rastgele tuz kullanmamak, gereksiz bir güvenlik riski alıyorsunuz, bu gelecekte gerçek bir sorun olabilir.
Georg Schölly

39
Bir saldırgan gökkuşağı tablolarını önceden hesaplayabildiği ve tüm kullanıcı veritabanınızı kaplayabildiği için site genelinde rastgele tuz kötüdür. Bunu anlamadıysanız, lütfen giriş / güvenlik sistemleri yazmayın :) - kullanıcı tuzları GEREKİR.
20'de snemarch

3
Evet, kullanıcı başına tuz. İdeal olarak, saklanan kullanıcı başına yineleme ile (böylece zaman içinde kullanılan yineleme sayısını artırabilirsiniz). Herhangi bir iyi çerçevede bu yerleşik olacaktır. (.NET, sizin için her şeyi halledecek PasswordDeriveBytes'e sahiptir.)
MichaelGG

2
Herhangi bir güvenlik sistemi tasarlıyorsanız, kullanıcı başına tuz kullanmamak cesaret kırıcıdır. siteniz süper ilginç olmayabilir, ancak aynı şifreyi birden çok sitede kullanan kullanıcıları düşünün ... veritabanını güvende tutmaya çalışmak başarısız olma eğilimindedir :)
snemarch

2
Tabii ki tuzlar, sözlük saldırılarına karşı, onları çok daha yavaş hale getirerek korur. Şifrelerde tuz kullanımı gökkuşağı tablolarından çok daha eskidir. Saldırganların bir kez bir parola vermesini ve ardından tüm kullanıcılarla karşılaştırmasını önleyerek sözlük saldırılarını yavaşlatmak için özel olarak tuzlar eklendi.
Glenn Maynard

27

Bence hepsi anlambilim. Önceden veya sonra koymak, çok özel bir tehdit modeline karşı önemli değildir.

Orada olduğu gerçeği gökkuşağı tabloları yenmek gerekiyordu.

Bahsettiğim tehdit modeli, düşmanın yapabileceği senaryo olurdu şifreye eklenmiş / eklenmiş ortak tuzların gökkuşağı tablolarına sahip . (NSA deyin) Onların ikisine birden eklenmemiş ya da eklenmiş olduğunu tahmin ediyorsunuz. Bu aptalca ve kötü bir tahmin.

Bu gökkuşağı tablolarını saklama kapasitesine sahip olduklarını varsaymak daha iyi olurdu, ancak, örneğin, şifrenin ortasında serpiştirilmiş garip tuzlu masalar değil. In o dar durumda, ben iyi olurdu serpiştirilmiş varsayım olacaktır.

Dediğim gibi. Anlambilim. Şifre başına farklı bir tuz, uzun bir tuz seçin ve semboller ve ASCII kodları gibi garip karakterler ekleyin: © ¤¡


@ herkese lanet olsun! Benim 'şifre tuzum' tuzumu keşfetti!
Samuel

6
@Samuel: Sizi bilmiyorum arkadaşlar, ama tuzumuz için '12345' kullanıyoruz. :)
Randolpho

@onebyone geçerli. Gerçekten "ortak" demek istedim "X, Y'nin makul olduğu Y karakter setindeki X uzunluğu altındaki tüm tuzlar"; 20 karakter ve alfasayısal büyük / küçük harf kullanın. Karma bir karma tablo yararlı olacağını düşünüyorum çünkü Z uzunluğu (160 diyelim) altında tüm onaltılık dizeleri söylemek için uzatılabilir ..
Tom Ritter

1
@Randolpho: Hey, bu da benim tuzum! Olasılıklar neler?
Adrien

Ve tuzun tahmin edilemez olduğundan emin olun / Rastgele: stackoverflow.com/questions/1645161/…
Jacco

18

Kimsenin değinmediği gerçek cevap, her ikisinin de yanlış olduğudur . Kendi kripto olursa olsun ne kadar önemsiz bir parçası yaptığını sanıyorsun uyguluyorsanız, sen gidiyorsun hatalar .

HMAC daha iyi bir yaklaşımdır, ancak o zaman bile SHA-1 gibi bir şey kullanıyorsanız, hız tasarımı nedeniyle şifre karmaşasına uygun olmayan bir algoritma zaten seçtiniz. Bcrypt veya muhtemelen scrypt gibi bir şey kullanın ve sorunu tamamen elinizden çıkarın.

Oh, ve eşitlik için elde edilen karmaları programlama dilinizle veya veritabanı dizesi karşılaştırma yardımcı programlarıyla karşılaştırmayı düşünmeyin. Bunlar falsebir karakteri farklıymış gibi karakter karakter ve kısa devre ile karşılaştırır . Böylece saldırganlar, karmanın ne olduğunu, her seferinde bir karakteri denemek ve çözmek için istatistiksel yöntemleri kullanabilirler.


1
Son paragrafla ilgili olarak: Saldırgan, karşılaştırmanın başarısız olduğu karakter sayısı hakkında herhangi bir bilgiyi nasıl alabilir? Bu hiç mantıklı değil ..
halloweenlv

1
Hem doğru hem de yanlışsınız. Zamanlama saldırıları gerçektir ve karşılaştırmanın tam olarak nerede başarısız olduğunu belirlemek için değişken gecikmeli ağ bağlantılarında bile korkutucu doğrulukla tekrar tekrar uygulanabilir olduğu gösterilmiştir. Bununla birlikte, zamanlama saldırıları aslında ortak parola karmaları için geçerli değildir, çünkü çıktının yalnızca küçük parçalarını değiştiren girdileri bulmak hesaplanabilir değildir.
Stephen Touset

9

Fark etmemeli. Tuzu nereye koyarsanız koyun artık daha kolay tahmin edilemez. Karma çarpışmalar, kasıtlı olarak doğrusal olmamaları nedeniyle hem nadir hem de öngörülemezdir. Güvenlik açısından bir fark yarattıysa, bu tuzlama ile değil, karma ile ilgili bir sorun olduğunu düşündürür.


1
Karma çarpışmalar karma boyutuna bağlıdır. Doğum günü problemi sayesinde çarpışmalar oldukça olasıdır.
Georg Schölly

2
Sadece sonucu keserseniz. Her neyse, hala tuzun olduğu yerde bir fark yaratmayacağı noktasında duruyorum, çünkü hashın noktası girdi ve çıktı arasındaki ilişkiyi desen içermemektir.
Phil H

7

Kriptografik olarak güvenli bir karma kullanıyorsanız, ön düzeltmeyi mi yoksa son düzeltmeyi mi yapmanız gerektiği önemli değildir; karma nokta, kaynak verilerdeki (nerede olursa olsun) tek bir bit değişikliğinin farklı bir karma üretmesi gerektiğidir.

Ne olduğunu önemli olsa da, uygun bir kriptografik PRNG onları üreten uzun tuzları kullanarak ve kullanıcı başına tuzları yaşıyor. Kullanıcı başına tuzları veritabanınızda depolamak bir güvenlik sorunu değildir , site çapında bir karma kullanmaktır .


2
Yanlış cevaplayıcı: Bir saldırgan, sık kullanılan birçok şifre için MD (pass) önceden hesaplayabilir ve daha sonra MD (pass + salt) hesaplamasını çok ucuza hesaplayabilir, çünkü mesaj özeti akışı destekleyecek şekilde artımlı bir şekilde çalışır.
Erwan Legrand

5

Her şeyden önce, "gökkuşağı tablosu" terimi sürekli olarak yanlış kullanılmaktadır. "Gökkuşağı" tablosu sadece belirli bir tür arama tablosudur; bu, tuşlar üzerinde belirli bir veri sıkıştırmasına izin verir. Alan için işlem hesaplamasıyla, 1000 TB alan bir arama tablosu bin kez sıkıştırılabilir, böylece daha küçük bir sürücü sürücüsünde saklanabilir.

Parola arama tabloları, gökkuşağı veya başka bir karma için endişelenmelisiniz.

@ Onebyone.livejournal.com:

Saldırgan, sözlük kelimelerinin karma değerlerinden değil, karma hesaplamasını sonlandırmadan hemen önce karma hesaplama durumundan oluşan 'gökkuşağı tablolarına' sahiptir.

Daha sonra önek tuzundan daha sonra postfix tuzlu bir parola dosyası girişini kaba kuvvet uygulamak daha ucuz olabilir: sırayla her sözlük kelimesi için durumu yükler, karma baytları karmaya ekler ve sonlandırırsınız. Ön ekli tuzla, her sözlük kelimesi için hesaplamalar arasında ortak hiçbir şey olmazdı.

Basit bir doğrusal eşgensel oluşturucu gibi giriş dizesi üzerinden doğrusal olarak tarama yapan basit bir karma işlevi için bu pratik bir saldırıdır. Ancak kriptografik olarak güvenli bir karma işlevi, her biri giriş dizesinin tüm bitlerini kullanan birden fazla mermi olacak şekilde tasarlanmıştır, böylece tuzun eklenmesinden hemen önce dahili durumu hesaplamak ilk turdan sonra anlamlı değildir. Örneğin, SHA-1'in 80 mermisi vardır.

Ayrıca PBKDF gibi parola karma algoritmaları karma işlevlerini birçok kez oluşturur (PBKDF-2'yi en az 1000 kez yinelemeniz önerilir, her yineleme SHA-1'i iki kez uygular) bu saldırıyı iki kat daha pratik hale getirir.


Mermi tanımını iki kez kontrol etmelisiniz. Mermi, mesajın tamamı değil, yığın başınadır. (Aksi takdirde, akış verilerinin özetlenmesi tekrar tekrar geri sarılmasını gerektirir.) Ancak yinelemelerin kullanılması, sorunun herkesin önüne geçmesini önler.
MichaelGG

4

BCP Platformun bir sağlayıcısı varsa karma . Tuzları oluşturma konusunda nasıl endişelenmediğinizi seviyorum ve isterseniz onları daha da güçlü hale getirebilirsiniz.


3
Bildiğim kadarıyla, BCrypt Hash'in diğer hash şemaları gibi tuzlamaya ihtiyacı var.
Jacco

2

Tuza şifreye rastgele sayıda karakter eklemek en az beklenen durumdur ve bu nedenle sosyal olarak en "güvenli" dır, ancak parola başına uzun, benzersiz kullandığınız sürece genel durumda gerçekten çok önemli değildir. tuzlar için teller.

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.