Şifre tuzu gökkuşağı masası saldırısına karşı nasıl yardımcı olur?


220

Bir parolanın tuzunun amacını anlamakta güçlük çekiyorum. Benim anladığım kadarıyla birincil kullanım bir gökkuşağı masası saldırısını engellemek. Ancak, bunu uygulamak için gördüğüm yöntemler sorunu gerçekten zorlaştırıyor görünmüyor.

Tuzun aşağıdaki gibi kullanılmasını öneren birçok öğretici gördüm:

$hash =  md5($salt.$password)

Bunun nedeni, karmanın artık orijinal şifreyle değil, şifrenin ve tuzun bir kombinasyonuyla eşleşmesidir. Ama söylemek $salt=foove $password=barve $hash=3858f62230ac3c915f300c664312c63f. Şimdi gökkuşağı masası olan biri karmayı tersine çevirebilir ve "foobar" girişini bulabilir. Daha sonra tüm şifre kombinasyonlarını deneyebilirler (f, fo, foo, ... oobar, obar, bar, ar, ar). Parolayı almak birkaç milisaniye daha sürebilir, ancak başka bir şey değil.

Gördüğüm diğer kullanım linux sistemimde. / Etc / shadow dosyasında karma parolalar aslında tuzla birlikte depolanır . Örneğin, "foo" ve "çubuk" nin şifreyi bir tuz Buna karma olacaktır: $1$foo$te5SBM.7C25fFDu6bIRbX1. Bir hacker bir şekilde bu dosyaya ellerini koyabilseydi, tuzun hangi amaca hizmet ettiğini göremiyorum, çünkü ters karmasının te5SBM.7C25fFDu6bIRbX"foo" içerdiği biliniyor.

Herhangi bir ışık için teşekkürler.

EDIT : Yardım için teşekkürler. Anladığımı özetlemek gerekirse, tuz karma şifreyi daha karmaşık hale getirir ve böylece önceden hesaplanmış bir gökkuşağı tablosunda bulunma olasılığını azaltır. Daha önce yanlış anladığım şey, TÜM karmalar için bir gökkuşağı tablosunun var olduğunu varsaymaktı.




Ayrıca, burada güncellenen - md5 karma kullanımı artık en iyi uygulama değildir. stackoverflow.com/questions/12724935/salt-and-passwords
StuartLC

Düzenleme için teşekkürler. Aynı şüpheye sahiptim ve şimdi açıklığa kavuşturuldu. Yani 'Tuz'un amacı, bir Gökkuşağı tablosunun en başta karıştırılmış (tuzlanmış) parolanın karmasını içermesini mümkün kılmaktır. : D
Vaibhav

Yanıtlar:


237

Bir kamu tuz edecek değil tek bir şifre çatlama zaman Sözlük saldırıları zorlaştırmaya. İşaret ettiğiniz gibi, saldırgan hem karma parolaya hem de tuza erişebilir, bu nedenle sözlük saldırısını çalıştırırken, şifreyi kırmaya çalışırken bilinen tuzu kullanabilir.

Bir kamu tuzu iki şey yapar: büyük bir şifre listesini kırmayı daha zaman alıcı hale getirir ve gökkuşağı tablosu kullanmayı olanaksız hale getirir.

İlkini anlamak için yüzlerce kullanıcı adı ve şifre içeren tek bir şifre dosyası düşünün. Bir tuz olmadan, "md5 (girişimi [0])" hesaplayabilir ve daha sonra bu karma herhangi bir yerde görünüp görünmediğini görmek için dosyayı tarayın. Tuzlar mevcutsa, "md5 (tuz [a]. Girişim [0])" hesaplamalıyım, A girişiyle karşılaştırmalı, sonra "md5 (tuz [b]. Giriş [0])", B girişiyle karşılaştırmalıyım Şimdi yapmam gereken nçok zaman var, burada ndosyada bulunan kullanıcı adı ve parola sayısı.

İkincisini anlamak için gökkuşağı masasının ne olduğunu anlamalısınız. Gökkuşağı tablosu, yaygın olarak kullanılan şifreler için önceden hesaplanmış karmaların geniş bir listesidir. Tekrar tuzsuz şifre dosyasını düşünün. Tek yapmam gereken, dosyanın her satırından geçmek, karma şifreyi çıkarmak ve gökkuşağı tablosuna bakmak. Asla tek bir hash hesaplamam gerekmiyor. Arama, karma işlevinden (büyük olasılıkla) önemli ölçüde daha hızlıysa, bu, dosyanın çatlamasını önemli ölçüde hızlandırır.

Ancak şifre dosyası tuzlanırsa, gökkuşağı tablosunda "hash. Password" önceden karma olarak bulunması gerekir. Tuz yeterince rasgele ise, bu pek olası değildir. Sık kullanılan, önceden karma parolalar (gökkuşağı tablosu) listemde muhtemelen "merhaba" ve "foobar" ve "qwerty" gibi şeyler olacak, ancak "jX95psDZhello" gibi şeyler olmayacak veya "LPgB0sdgxfoobar" veya "dZVUABJtqwerty" önceden hesaplanmıştır. Bu gökkuşağı masasını büyük ölçüde büyütür.

Bu nedenle tuz, saldırganı, yeterince uzun, yeterince rasgele bir parola ile birleştiğinde (genel olarak konuşursak) kırılmaz olan deneme başına satır başına bir hesaplamaya geri indirir.


15
Cevabımın ne olduğunu ima etmek için ne dediğimi bilmiyorum?
Ross

2
erickson, sanırım düzenleme kafa karıştırıcıydı - çoğu insanın gökkuşağı masa saldırısını bir tür sözlük saldırısı olarak gördüğünü sanmıyorum. Cevabımda kafa karıştırıcı olduğunu düşündüğünüz belirli bir şey varsa bana bildirin, düzeltmeye çalışacağım.
Ross

Keşke bir yukarı oy daha verebilir! Özellikle ilk Paragraf için. Bu bir bütün IMHO özetliyor
Cesar

5
Bunun eski olduğunu biliyorum, ama gökkuşağı tablolarının açıklamanız yanlış. Bunun yerine karma tabloları açıklıyorsunuz. Gökkuşağı tablosu için bkz. Security.stackexchange.com/questions/379/… . Bir karma tablo, parolaların karmalarla (açıkladığınız gibi) 1'e 1 eşlenmesine sahiptir, ancak gökkuşağı tabloları, bir karma değerini düz metne dönüştüren, daha sonra binlerce kez yeniden şekillendirilecek, yalnızca ilk düz metni ve son karma depolayan bir azaltma işlevi gerektirir. Arama hesaplama karma tablolardan daha uzundur, ancak karma başına birçok düz metni 'yakalar'.
Mark Fisher

1
Bu yanıt, bir tuz kullanmamanın (belirli bir kullanıcı için bir şifre karmasının oluşturulmasına bağlı olarak), bu şifreleri depolayan birden çok tablo üzerinde bile yinelenen şifreleri ortaya çıkarması gerçeğini kaçırmaktadır. En azından, bir kişi tarafından yeniden kullanılan şifreleri tanımlayabileceksiniz, ancak daha da kötüsü, farklı veritabanları üzerinde farklı kişiler tarafından kullanılan şifreleri de tanımlayabilirsiniz.
Maarten Bodewes

119

Diğer cevaplar konuyla ilgili yanlış anlamalarınızı ele almıyor gibi görünüyor, işte burada:

Tuzun iki farklı kullanımı

Tuzun aşağıdaki gibi kullanılmasını öneren birçok öğretici gördüm:

$hash = md5($salt.$password)

[...]

Gördüğüm diğer kullanım linux sistemimde. / Etc / shadow dosyasında karma parolalar aslında tuzla birlikte depolanır.

Sen hep çünkü kullanıcı şifrenizi veritabanına karşı yazdıklarınızın validate amacıyla şifre ile tuz depolamak lazım, tuz, karma bunu birlikte girdi birleştirmek zorunda ve saklanan karma karşılaştırmak.

Karma güvenliği

Şimdi gökkuşağı masası olan biri karmayı tersine çevirebilir ve "foobar" girişini bulabilir.

[...]

çünkü te5SBM.7C25fFDu6bIRbX'in ters karmasının "foo" içerdiği bilinmektedir.

Karmayı bu şekilde tersine çevirmek mümkün değildir (en azından teoride). "Foo" hash ve "saltfoo" hash ortak bir şey yok . Şifreleme karma işlevinin girişindeki bir bitin bile değiştirilmesi, çıktıyı tamamen değiştirmelidir.

Bu, ortak parolalarla bir gökkuşağı tablosu oluşturamayacağınız ve daha sonra bir miktar tuzla "güncelleyebileceğiniz" anlamına gelir. Tuzu en baştan dikkate almanız gerekir.

İlk etapta bir gökkuşağı masasına ihtiyaç duymanızın nedeni budur. Karmadan parolaya erişemediğiniz için, en çok kullanılan parolaların tüm karmalarını önceden hesaplar ve ardından karmalarınızı karmalarıyla karşılaştırırsınız.

Tuz kalitesi

Ama söyle $salt=foo

"foo" son derece zayıf bir tuz seçimi olacaktır . Normalde ASCII'de kodlanmış rastgele bir değer kullanırsınız.

Ayrıca, her şifrenin kendi tuzu vardır, (umarım) sistemdeki diğer tüm tuzlardan farklıdır. Bu araçlar, saldırganın umudunu sahip tek tek yerine her şifre saldırmak zorunda olduğu bir karma onu veritabanındaki değerlerden biri ile eşleşir.

Saldırı

Bir bilgisayar korsanı bir şekilde ellerini bu dosyaya alabilseydi, tuzun hangi amaca hizmet ettiğini göremiyorum,

Bir gökkuşağı tablosu saldırısı her zaman ihtiyaç duyar /etc/passwd(veya hangi şifre veritabanı kullanılırsa kullanılsın), yoksa gökkuşağı tablosundaki karmaları gerçek şifrelerin karmalarıyla nasıl karşılaştırırsınız?

Amaca gelince: diyelim ki saldırgan 100.000 sık kullanılan İngilizce kelime ve tipik şifreler için bir gökkuşağı tablosu oluşturmak istiyor ("gizli" düşünün). Tuz olmadan 100.000 hash önceden hesaplamak zorunda kalacaktı. 2 karakterlik geleneksel UNIX tuzu ile (her biri 64 seçenekten biridir [a–zA–Z0–9./]:) 4,096,000,000 hash hesaplamak ve saklamak zorunda kalacaktı ... oldukça iyileşme.


2
Gerçekten güzel bir cevap. Olayları çok daha iyi anlamama yardımcı oldu. +1
wcm

Bir bilgisayar korsanı tuza erişebiliyorsa ve karma işlevinde nasıl kullanıldıysa, bunu sadece tuzlanmış karma tablo oluşturmak ve bu karmaları gökkuşağı tablosuyla karşılaştırmak için kullanamazlar mı?
Jonny

5
@Jonny "tuz" yok. bütün mesele tuzun her şifre girişi için farklı olmasıdır.

86

Tuz ile ilgili fikir kaba kuvvetle tahmin etmeyi normal karakter tabanlı bir şifreden daha zor hale getirmektir. Gökkuşağı tabloları genellikle akılda özel bir karakter kümesiyle oluşturulur ve her zaman olası tüm kombinasyonları içermez (mümkün olsalar da).

Bu nedenle, iyi bir tuz değeri rastgele 128 bit veya daha uzun bir tam sayı olacaktır. Rainbow masa saldırılarını başarısız kılan da budur. Her saklanan parola için farklı bir tuz değeri kullanarak, belirli bir tuz değeri için oluşturulmuş bir gökkuşağı tablosunun (tek bir tuz değerine sahip popüler bir sistem sizde olduğu gibi) herkese erişim vermemesini de sağlarsınız. şifreleri aynı anda.


1
+1: Tuz, rastgele sayı üreteci tarafından oluşturulan bazı rastgele dizgenin onaltılık özetinin bir parçası olabilir. Her bit rastgele.
S.Lott

5
"Gökkuşağı tabloları depolama alanı kazanmak için biraz hız vazgeçmek sözlük saldırısı bir şeklidir." - Aslında tam tersi, iyi bir gökkuşağı masası depolamak GB'yi alabilir, olası tüm değerleri yeniden hash etmek için zaman kazanmak için.
AviD

2
Kabul etti - @erickson, sanırım düzenlemeniz yanlış. Gökkuşağı masası büyük miktarda depolama alanı gerektirir , ancak mesajı karma işlemin arkasına almayı hızlandırır.
Carl Seleborg

3
İkiniz de haklısınız. Standart sözlük saldırısıyla karşılaştırıldığında, gökkuşağı tabloları depolama alanından tasarruf etmek için hızı feda eder. Öte yandan, bir kaba kuvvet saldırısına kıyasla, gökkuşağı tabloları hız kazanmak için (çok) alan kullanır. Bugün, gökkuşağı tabloları neredeyse sözlük ile eşanlamlı ...
Rasmus Faber

... ama sözlük saldırıları için gökkuşağı tablolarına ihtiyacınız yok.
Rasmus Faber

35

Yine çok düşünceli cevaplar ile başka bir harika soru - +1 SO!

Açıkça bahsetmediğim küçük bir nokta, her şifreye rastgele bir tuz ekleyerek , aynı şifreyi seçen iki kullanıcının farklı karmalar üreteceğini neredeyse garanti ediyor olmanızdır .

Bu neden önemli?

ABD'nin kuzeybatısındaki büyük bir yazılım şirketinde şifre veritabanını düşünün. Diyelim ki 500'ü mavi ekran parolasına sahip 30.000 giriş içeriyor . Bir bilgisayar korsanının bu şifreyi, örneğin kullanıcıdan BT departmanına bir e-postada okuyarak almayı başardığını varsayalım. Parolalar tuzsuzsa, bilgisayar korsanı karma değeri veritabanında bulabilir, daha sonra diğer 499 hesaplara erişmek için parolayı eşleştirin.

Parolaların tuzlanması, 500 hesabın her birinin benzersiz (tuz + parola) olmasını sağlar, her biri için farklı bir karma oluşturur ve böylece ihlali tek bir hesaba indirir. Ve tüm olasılıklara rağmen, bir e-posta iletisine düz metin parola yazacak kadar saf olan herhangi bir kullanıcının bir sonraki işletim sistemi için belgelenmemiş API'ye erişimi olmadığını umalım.


Farklı bir şifre seçen iki kullanıcı için aynıdır ve db'de saklanan aynı karma şifreye sahip olmaları muhtemeldir. (Yararsız ... Biliyorum)
Karınca

15

Tuzları uygulamak için iyi bir yöntem arıyordum ve örnek kod ile bu mükemmel makaleyi buldum:

http://crackstation.net/hashing-security.htm

Yazar, kullanıcı başına rastgele tuzların kullanılmasını tavsiye eder, böylece bir tuza erişim elde etmek, tüm karma listesinin kırılmasını kolaylaştırmaz.

Parola Saklamak için:

  • CSPRNG kullanarak uzun rastgele bir tuz üretin.
  • Tuzu parolaya ekleyin ve SHA256 gibi standart bir şifreleme karma işleviyle hash edin.
  • Hem tuz hem de karmayı kullanıcının veritabanı kaydına kaydedin.

Parolayı Doğrulamak için:

  • Kullanıcının tuz ve karma değerini veritabanından alın.
  • Verilen parolaya tuz ekleyin ve aynı hash işlevini kullanarak hash yapın.
  • Belirtilen parolanın hash değerini veritabanındaki hash ile karşılaştırın. Eşleşirlerse şifre doğrudur. Aksi takdirde şifre yanlıştır.

3
Hashcat, tek bir bilgisayar kullanarak saniyede yaklaşık 17 milyar tuzlanmış SHA256 karmasını deneyebilir. Bağlantılı makalenin yazarı "Parola Kırılmasını Zorlaştırmak: Yavaş Karma İşlevler" başlığı altında bu konuyu anlatıyor. scrypt, bcrypt ve PBKDF2, iyi seçenekler ve sunucu IMHO'sundaki ekstra CPU döngülerinden daha fazla değerlerdir. Argon2 şu anda en son teknolojidir, ancak diğerleri kadar savaş testinden geçirilmemiştir.
kgriffs

12

Bir tuzun gökkuşağı tablosu saldırısını başarısız hale getirmesinin nedeni, tuzun n biti için gökkuşağı tablosunun tuzsuz masa boyutundan 2 ^ n kat daha büyük olması gerektiğidir.

'Foo'yu tuz olarak kullanma örneğiniz gökkuşağı masasını 16 milyon kat daha büyük yapabilir.

Carl'ın 128 bit tuz örneği göz önüne alındığında, bu tablo 2 ^ 128 kat daha büyük - şimdi bu büyük - veya başka bir deyişle, birisinin bu kadar büyük taşınabilir depolama alanına sahip olması ne kadar sürer?


8
Biraz depolamak için tek bir elektron kullansanız bile, galakside taşınabilir bir güneş sistemi düşünmedikçe, herkes bu kapasiteye sahip taşınabilir depolama üretmeden önce biraz zaman alacaktır.
erickson

10

Karma tabanlı şifrelemeyi kırmanın çoğu yöntemi kaba kuvvet saldırılarına dayanır. Bir gökkuşağı saldırısı aslında daha verimli bir sözlük saldırısıdır, karmalara olası parolaların önemli bir alt kümesinin bir haritasının oluşturulmasını sağlamak ve ters eşlemeyi kolaylaştırmak için düşük dijital depolama maliyetini kullanmak üzere tasarlanmıştır. Bu tür saldırılar işe yarar çünkü birçok şifre oldukça kısa olma eğilimindedir veya birkaç kelime tabanlı biçim modelinden birini kullanır.

Bu tür saldırılar, şifrelerin çok daha fazla karakter içerdiği ve yaygın kelime tabanlı biçimlere uymadığı durumlarda etkisizdir. Başlamak için güçlü bir parolaya sahip bir kullanıcı bu saldırı tarzına karşı savunmasız olmayacaktır. Ne yazık ki, birçok kişi iyi şifreler seçmez. Ancak bir uzlaşma var, rastgele şifre ekleyerek bir kullanıcının şifresini geliştirebilirsiniz. Bu yüzden, şimdi "hunter2" yerine şifreleri etkili bir şekilde "hunter2908! Fld2R75 {R7 /; 508PEzoz ^ U430" olabilir, ki bu çok daha güçlü bir şifredir. Ancak, artık bu ek parola bileşenini saklamanız gerektiğinden, bu daha güçlü birleşik parolanın etkinliğini azaltır. Anlaşıldığı üzere, şimdi her şifre, hatta zayıf olanları bile, böyle bir şema için net bir fayda var. artık önceden hesaplanmış karma / gökkuşağı tablosuna karşı savunmasız değildir. Bunun yerine, her parola karma girdisi yalnızca benzersiz bir karma tablosuna karşı savunmasızdır.

Diyelim ki zayıf şifre gücü gereksinimleri olan bir siteniz var. Tüm karmalarınızda önceden hesaplanmış karma tablolarına karşı savunmasız olan parola tuzu kullanmazsanız, karmalarınıza erişebilen bir kişi, kullanıcılarınızın büyük bir yüzdesi için parolalara erişebilir (ancak birçoğu, önemli yüzde). Sabit bir şifre tuzu kullanırsanız, önceden hesaplanmış hash tabloları artık değerli değildir, bu nedenle birisi bu tuz için özel bir hash tablosu hesaplamak için zaman harcamak zorunda kalır, ancak daha büyük permütasyonları kapsayan hesaplama tabloları sorun alanı. En savunmasız şifreler (örneğin, basit kelime tabanlı şifreler, çok kısa alfasayısal şifreler) saatler veya günler içinde kırılır, daha az savunmasız şifreler birkaç hafta veya aylar sonra kırılır. Zaman geçtikçe, bir saldırgan kullanıcılarınızın giderek artan bir yüzdesi için parolalara erişebilir. Her şifre için benzersiz bir tuz kullanırsanız, bu savunmasız şifrelerin her birine erişim günler veya aylar alacaktır.

Gördüğünüz gibi, tuzdan sabit bir tuza, eşsiz bir tuza geçtiğinizde, her adımda savunmasız şifreleri kırmak için birkaç büyüklükte artış emri uygularsınız. Bir tuz olmadan, kullanıcılarınızın parolalarının en zayıfına önemsiz bir şekilde erişilebilir, sabit bir tuzla bu zayıf parolalara belirli bir saldırgan tarafından erişilebilir, benzersiz bir tuzla, parolalara erişim maliyeti o kadar yükselir ki, yalnızca en kararlı saldırgan erişim kazanabilir savunmasız şifrelerin küçük bir alt kümesine ve daha sonra sadece büyük bir masrafla.

Bu, tam olarak içinde bulunulması gereken durumdur. Kullanıcıları hiçbir zaman kötü şifre seçiminden tam olarak koruyamazsınız, ancak kullanıcılarınızın şifrelerini tehlikeye atmanın maliyetini, bir kullanıcının şifresinden bile ödün vermeyi oldukça pahalı hale getirecek bir seviyeye yükseltebilirsiniz.


3

Tuzlamanın bir amacı önceden hesaplanmış hash tablolarını yenmektir. Birinin milyonlarca önceden hesaplanmış hash listesi varsa, hash ve tuzu bilseler bile masalarında $ 1 $ foo $ te5SBM.7C25fFDu6bIRbX1 arayamazlar. Yine de onu zorlamak zorunda kalacaklar.

Carl S'in bahsettiği gibi başka bir amaç, kaba zorlamayı bir karma listesi daha pahalı hale getirmektir. (onlara farklı tuzlar verin)

Bu hedeflerin her ikisi de, tuzlar halka açık olsa bile hala başarılmaktadır.


1

Bildiğim kadarıyla, tuz sözlük saldırılarını zorlaştırmayı amaçlıyor.

Birçok insanın rastgele görünen dizeler yerine şifreler için ortak kelimeler kullanacağı bilinen bir gerçektir.

Böylece, bir hacker bunu sadece kaba kuvvet kullanmak yerine kendi yararına kullanabilir. Aaa, aab, aac gibi şifreleri aramayacak ... bunun yerine kelimeleri ve ortak şifreleri kullanacak (yüzüklerin efendisi gibi!))

Parolam Legolas ise, bir hacker bunu deneyebilir ve "birkaç" denemeyle tahmin edebilir. Ancak şifreyi tuzlarsak ve fooLegolas olursa karma farklı olacaktır, bu yüzden sözlük saldırısı başarısız olacaktır.

Umarım yardımcı olur!


-2

PHP --- md5 () işlevini ve $ öncelikli değişkenleri --- kullandığınızı varsayıyorum, o zaman bu makaleye bakmayı deneyebilirsiniz Gölge Parola NASIL Özel olarak 11. paragraf.

Ayrıca, mesaj özeti algoritmalarını kullanmaktan korkuyorsunuz, mcrypt modülü tarafından sağlananlar gibi gerçek şifre algoritmalarını veya mhash modülünü sağlayanlar (sha1, sha256 ve diğerleri).

Daha güçlü mesaj özeti algoritmasının bir zorunluluk olduğunu düşünüyorum. MD5 ve SHA1'in çarpışma problemleri olduğu bilinmektedir.

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.