it-swarm-tr.com

Tuz kullanımı neden daha güvenlidir?

Kullanıcı parolalarının karma değerini saklama, ör. bir veritabanında, insan şifreleri sözlük saldırılarına karşı savunmasız olduğu için güvenli değildir. Herkes bunun tuzların kullanılmasıyla hafifletildiğini, ancak tuzun hassas olmadığı düşünülüyor ve korunması gerekmiyor.

Saldırganın tuzu olması durumunda sözlük saldırısı öncekinden daha zor hale geldi mi? Tuza erişimin olmaması, yararlılığını etkili bir şekilde ortadan kaldırıyor mu?

51
Jim

Salt sizi sadece bir şifrenin peşinde olan yalnız bir saldırgana karşı korumaz. Bir şifreyi kırmak isteyen bir saldırgan, hash(salt + guess) yerine hash(guess) hesaplar (şifre şeması hash(salt+password) ).

Saldırgan, birçok şifreyi kırmak istiyorsa tuz yardımcı olur. Bu genellikle böyledir. Bazen saldırgan bir siteye saldırıyor ve o sitedeki bir hesaba, herhangi bir hesaba girmek istiyor. Bir tuz olmadan, saldırganın çalışmalarının çoğu tüm hesaplar için kullanılabilir, böylece her bir hesaptaki girişimlerini bir kerede test edebilir. doğru seçilmiş tuz (yani iki hesapta aynı tuz yoksa), saldırgan her karma parola için baştan başlamalıdır.

Ayrıca, bir anlamda, tüm şifre kırma girişimleri bir kerede tüm hesap şifrelerini kırmaya çalışıyor. Çünkü hash'ler önceden hesaplanabilir; tek gereken, bir karma tablo oluşturmaktır - veya daha verimli bir şekilde bir Rainbow table - ve bu ilk çalışma, onu kullanan herhangi bir hesap veritabanında kullanabilen birden fazla saldırgana dağıtılabilir şifre karma algoritması. Yine tuz, bu ön hesaplamaları işe yaramaz hale getirir.

Kaba kuvvetli bir şifre saldırısı şöyle özetlenebilir:

  1. Saldırganın bir Rainbow tablosu oluşturmak gibi yararlı gördüğü ön hesaplamaları yapın (bu, ortak parolalarla tablo eşleme karmalarını temsil etmenin etkili bir yoludur).
  2. Saldırganın içeri girmek istediği n hesapların her biri için ve p şifre saldırganın sözlüğüne eklediğini tahmin eder, hash(guess[i]) = hashed_password[j] olup olmadığını test edin.

Saf bir yaklaşımda, ikinci adım n × p karma hesaplamaları gerektirir tüm hesaplara karşı tüm tahminleri denemek için. Ancak, ilk adım olası tüm karmaları zaten hesapladıysa, ikinci adımda hiç karma hesaplaması gerekmez, sadece her hashed_password önceden hesaplanmış veritabanındadır, bu nedenle saldırı yalnızca n tablo aramaları gerektirir (bu bile hızlandırılabilir, ancak zaten n x p yavaş hesaplamalar¹ n tablo aramaları).

Her parolanın farklı bir tuzu varsa, yardımcı olması için ön hesaplamanın olası her tuz değeri için bir giriş içermesi gerekir. Tuz yeterince büyükse, ön hesaplama yapılamaz. Ön hesaplama tuzu hesaba katmazsa, ikinci adımı hızlandırmak yararlı olmayacaktır, çünkü herhangi bir şifreleme hash fonksiyonu “ karıştırır ”ifadesini kullanır: UIOQWHHXpassword hash değerini bilmek NUIASZNApassword hash değerini hesaplamaya yardımcı olmaz. Tek bir hesaba saldırmak için bile, saldırganın tüm tahminleri denemek için p karma hesaplamaları yapması gerekir, zaten tek tablo aramasında yeterli olacak bir iyileştirme saldırganın önceden hesaplanmış bir sözlüğü varsa.

¹ Parola SHA-1 gibi bir karma olarak saklanmamalı, ancak bcrypt veya scrypt veya PBKDF2 gibi daha yavaş bir karma işlevi kullanılarak saklanmalıdır.

Veritabanı saklanan şifre için her güvenlik seviyesini açıklayacağım, belki bu tuzun önemini açıklığa kavuşturacaktır.

Seviye 1: Parola veritabanında açık bir şekilde saklanır.

Bu sadece saf aptallık. Ama bazen, büyük şirket veritabanlarını tehlikeye atıyor ve oh, tüm şifre açık bir şekilde saklanıyor. Ne utanç!

Seviye 2: Bir karma algoritması kullanılarak saklanan şifre.

Bu, daha fazla güvenliğe doğru bir adımdır. Bir saldırgan karma parolayı alırsa, yine de bu kimlik bilgilerini kullanarak hizmete giriş yapamaz. İlk önce parolayı "çıkarmak" zorunda kalacak a Rainbow Table veya kaba zorlama it . Bu, saldırgan için biraz daha fazla çalışma gerektirdiği anlamına gelir, ancak orijinal şifreyi almak yine de mümkün olabilir.

Seviye: Tuz içeren bir karma algoritması kullanılarak saklanan şifre.

Bu ilginç olmaya başlıyor. Seviye 2 üzerinde gördüğümüz gibi, karma parolaya erişimi olan bir saldırgan ya kaba zorlayabilir ya da bir Gökkuşağı tablosu kullanabilir. Orijinal parolaya bir tuz eklemek Rainbow tablosu tamamen işe yaramaz yapar, çünkü tuzu dikkate almazlar. Orijinal dizeyi bir Rainbow tablosu kullanarak almak hala mümkündür, ancak bu Rainbow tablosunda + tuz şifresinin mevcut olduğu anlamına gelir. Bir tuz genellikle çok uzun olduğundan, bir ipin (40+) karma değerine sahip olan tuhaf neredeyse imkansızdır. Geriye kalan tek çözüm kaba kuvvettir.

Seviye 4: Tuz ve biber içeren bir karma algoritması kullanılarak saklanan şifre.

Bu çok ilginç (gerçek cevaplar zaten ilginç olduğu için cevabımı göndermemin nedeni bu).

BCrypt, SCrypt veya PBKDF2 gibi bir karma algoritma kullanmanızı tavsiye ediyorum, çünkü şimdiye kadar kırılmış değiller ve kesmek için çok yavaşlar, bir kırma süresini ve daha sonra tam bir şifre veritabanını arttırıyorlar.

Tuz ve karabiber arasındaki fark konumlarıdır. Tuz genellikle veri tabanında depolanır, ancak biber kodda bulunur. Bu tuhaf görünebilir, ancak asıl fikir, bir veritabanının güvenliğinin ihlal edilebileceği, ancak kodun saldırganın bir tuzunu ve işe yaramaz karma parola listesini bırakmasıdır. Dahası, karma parolaya daha da karmaşıklık ekleyerek Gökkuşağı tabloları tamamen işe yaramaz (eğer bir tuzla hala biraz yararlı olduklarını varsayarsak!).

Saldırganın bir değer (orijinal parola) değil iki değer (orijinal parola ve biber) araması nedeniyle yalnızca veritabanının güvenliği ihlal edildiğinde kaba kuvvet o zaman işe yaramaz bile .

16
Cyril N.

Karmalarınız tuzsuzsa, karma değerlere sahip bir sözlük oluşturabilir ve bunları bir veritabanında saklayabilirim (Rainbow tablosu olarak adlandırılan özel tür, çok sayıda karma için daha etkilidir), sonra tek yapmam gereken onları aramaktır. Temelde CPU zamanı optimizasyonuna karşı bir dev bellek. Ayrıca, aynı hash ile iki kullanıcı görürsem, aynı şifreyi kullandıklarını biliyorum.

Bir tuz, her kullanıcının şifre karmasını benzersiz kılar ve doğru yaparsanız, aynı şifreyi başka bir sitede (nadir değil) kullansalar bile benzersiz olacaktır ve bu yüzden gerçekten Word'ü almak, tuz uygulamak ve hash, sözlükteki bir sonraki giriş için tekrarlayın.

8
ewanm89

Tuzsuz karmalar arama saldırılarına karşı savunmasızdır. Bir karmanın düz metnini aramak için kullanılabilen milyonlarca şifre karmasını (çoğunlukla MD5 ve SHA1) içeren serbestçe kullanılabilir veritabanları vardır. Bunlar standart ilişkisel veritabanlarına veya Rainbow tabloları gibi özel veritabanı formatlarına dayanabilir.

İşte bir örnek:
7c6a61c68ef8b9b6b061b28c348bc1ed7921cb53 (tuzsuz)
2d67062d67b4d0eaca31a768e901d04982de7352 ("RxB6aE" öneki ile tuzlanmış)

İlk karmaya hızlı bir bakış, düz metni "passw0rd" olarak gösterecektir. Ancak, ikincisinin bulunması pek olası değildir. Tuzun saldırgan tarafından bilinmediği durumlarda, sözlük ve kaba kuvvet saldırılarını zorlaştırır.

Bir veritabanında şifreleri korumak istiyorsanız, bcrypt gibi bir şey kullanmalısınız. Her hesaplamayı yavaşlatmak için karma algoritmanın çok sayıda yinelemesini kullanır. Bu nedenle, kaba kuvvet saldırıları, sözlük saldırıları ve Rainbow tablolarının oluşturulması son derece olanaksızdır.

6
Polynomial