Kullanıcı şifresi için en uygun uzunluk nedir? [kapalı]


129

Herhangi bir tuz , bir kullanıcının şifresini karıştırırken ve hashing yaparken açıkça yardımcı olacaktır. Tuzun ne kadar uzun olması gerektiğine dair en iyi uygulamalar var mı? Tuzu kullanıcı masamda depolayacağım, bu yüzden depolama boyutu ve güvenlik arasındaki en iyi değiş tokuşu istiyorum. Rastgele 10 karakterlik tuz yeterli midir? Yoksa daha uzun bir şeye mi ihtiyacım var?


10
Tuzun uzunluğu hakkında bir tavsiyem yok, ancak burada gösterilen cevaplarda çok fazla kötü bilgi var. Tuzunuz kesinlikle: - rastgele olmalı - sır başına olmalıdır (program görüntünüzde veya yapılandırma dosyanızda saklanan tek bir değer değil). Tuz, kriptografik bir sır değildir, bu nedenle onu masanızda saklamak sorun değil. Bir tuzun tek amacı, aynı öğenin farklı örnekleri karma hale getirildiğinde (veya şifrelendiğinde) farklı bir sonuç elde etmenizi sağlamaktır.
Michael Burr

2
Tuzun ne olduğunu bilmeyenler için: Wikipedia'da <a href=" en.wikipedia.org/wiki/Salt_(cryptography)"> Salt (kriptografi) </a>
David Koelle

1
Veya tuzun uzunluğunun hash çıktısının uzunluğuna en uygun oranı varsa? HMAC-SHA-256 için 8 bayt tuz yeterli olabilir, ancak HMAC-SHA-512 için olmayabilir.
Crend Kral

1
Kriptografik olarak rastgele tuz, karma işlevinin çıktısıyla aynı boyutta olması, bir "olası tüm tuzları dene" (artı bir şifre sözlüğü) saldırısının, standart bir kaba kuvvet olan "tüm olası karma sonuçları dene" saldırısı kadar çaba gerektirdiği anlamına gelir. . Daha kısa bir tuz, kaba kuvvet saldırısı olarak bir tuz sözlüğüne ve bir şifre sözlüğüne sahip olabileceğiniz anlamına gelir.
Richard Gadsden

-1 Kuşkusuz soruya cevap vermiyor (hatta denemiyor).
user359996

Yanıtlar:


71

Bu cevapların çoğu biraz yanlış yönlendirilmiş ve tuzlar ile kriptografik anahtarlar arasında bir karışıklık olduğunu gösteriyor. Tuzları dahil etmenin amacı, her bir kullanıcının şifresini karma hale getirmek için kullanılan işlevi değiştirmektir, böylece saklanan her şifre karmasının ayrı ayrı saldırıya uğraması gerekir. Tek güvenlik gerekliliği, kullanıcı başına benzersiz olmalarıdır, öngörülemez veya tahmin edilmeleri zor olmalarının hiçbir faydası yoktur.

Her kullanıcının tuzunun benzersiz olması için tuzların yalnızca yeterince uzun olması gerekir. Rastgele 64 bitlik tuzların bir milyar kayıtlı kullanıcıyla bile tekrarlanması pek olası değildir, bu yüzden bu iyi olmalıdır. Tek tek tekrarlanan bir tuz, nispeten küçük bir güvenlik endişesidir, bir saldırganın aynı anda iki hesapta arama yapmasına izin verir, ancak toplamda tüm veritabanında aramayı çok fazla hızlandırmaz. Çoğu amaç için 32 bitlik tuzlar bile kabul edilebilir, en kötü durumda bir saldırganın aramasını yaklaşık% 58 oranında hızlandıracaktır. Tuzları 64 bitin üzerine çıkarmanın maliyeti yüksek değildir, ancak bunu yapmak için güvenlik nedeni yoktur.

Kullanıcı başına tuzun üstüne site çapında bir tuz kullanmanın da bazı faydaları vardır; bu, diğer sitelerde depolanan şifre karmalarıyla olası çarpışmaları önleyecek ve 32 bit olsa bile genel amaçlı gökkuşağı tablolarının kullanımını önleyecektir. tuz, gökkuşağı masalarını pratik olmayan bir saldırı yapmak için yeterlidir.

Daha basit olan ve geliştiriciler bile bunu her zaman gözden kaçırır - eğer benzersiz kullanıcı kimlikleriniz veya giriş adlarınız varsa, bunlar mükemmel bir tuz görevi görür. Bunu yaparsanız, aynı parlak fikre sahip başka bir sistemin kullanıcılarıyla çakışmadığınızdan emin olmak için site çapında bir tuz eklemelisiniz.


16
Tuzların tahmin edilemez olmasının bir yararı vardır. Bir karma tablo saldırısında tahmin edilebilir bir tuz tahmin edilebilir ve kullanılabilir. Örneğin, salt değeriniz yalnızca kullanıcı kimliğiyse, yeterince uzun olan düz bir alfa karma tablosu yalnızca tüm parolaları değil, tüm kullanıcı adı + parola kombinasyonlarını içerecektir.
Richard Gadsden

7
Son paragrafınızla ilgili olarak, site çapında bir tuz kullanıyorsanız, tam olarak şu olmalıdır: site genelinde. Uygulama çapında değil, yani uygulamanızı yüklediğiniz her yeni örnek site genelinde yeni bir tuz oluşturmalıdır. Örneğin, Windows her Windows kimlik doğrulama veritabanında aynı tuzu kullanırsa, bu tuz için bir gökkuşağı tablosu oluşturmak faydalı olacaktır, ancak her Windows kurulumu yeni bir tuz oluştursa, o zaman olmaz.
Richard Gadsden

5
Sorun aslında tuzun tahmin edilmesinin zor olması değil. Saldırganın tuzu tahmin etmesine gerek yoktur: hash'e erişimi olan herkes zaten tuza sahiptir. Sorun şu ki, tuzlarınız çok yaygınsa (kullanıcı adları gibi), diğer sitelerdekilerle aynı olabilirler ve bu noktada saldırganın saldırıları mümkün kılmak için çok daha küçük bir gökkuşağı tablolarına ihtiyacı vardır. Bu nedenle, diğer sitelerle bu tür bir çarpışmayı önlemek için site başına tuz fikrinden bahsedilir.
Nate CK

3
Hızlı not: Temel olarak kullanıcı adlarını kullanıyorsanız, kullanıcı adları değişirse bu bir sorun olabilir. Pratik olarak (müşterinin tasarım belgelerinde söylenenlere rağmen), kullanıcıların sıklıkla kullanıcı adlarını değiştirmek istediklerini fark ettim.
SilentSteel

6
@ NateC-K, Bahsettiğiniz site başına tuz fikrine biber denir.
Pacerier

35

Şu anda kabul edilen şifreleri hash etme standartları , her şifre için 16 karakter uzunluğunda yeni bir tuz oluşturur ve şifre karması ile tuzu depolar.

Elbette gerçekten rastgele tuz oluşturmak için uygun kriptografik özen gösterilmelidir.


6
Karakter biraz kötü tanımlanmış. Bayt demelisin .
CodesInChaos

10
@CodesInChaos Sanırım sekizli demek istedin ;-)
user2864740

1
Selam! Wikipedia makalesi değişmiş gibi görünüyor - belki de en.wikipedia.org/wiki/PBKDF2 veya başka bir şeye başvurmalısınız ?
Boris Treukhov


25

Düzenleme: Aşağıdaki cevabım sorulduğu gibi soruyu cevaplar, ancak "gerçek" cevap: sadece bcrypt , scrypt veya Argon2 kullanın . Böyle sorular soruyorsanız, neredeyse kesinlikle çok düşük düzeyde araçlar kullanıyorsunuzdur.

Dürüst olmak gerekirse, tuzun karma şifreyle aynı uzunlukta olmaması için savunulabilir bir neden yoktur. SHA-256 kullanıyorsanız, 256 bitlik bir karmanız vardır. 256 bitlik tuz kullanmamak için hiçbir sebep yok.

256 bitten fazlası, matematiksel olarak güvenlikte herhangi bir iyileşme sağlamaz. Ancak daha kısa bir tuzla gitmek, her zaman bir gökkuşağı masasının tuz uzunluğunuzu yakaladığı bir durumla sonuçlanabilir - özellikle daha kısa tuzlarla.


11
Bu o kadar büyük bir anlaşma değil; Kullanıcı zorlukla aslında bir milisaniye karma bir buçuk ikinci karma artı şifre karma arasındaki farkı fark edeceksiniz gerektiğini kaba kuvvet saldırıları yavaşlatmak için daha uzun sürer - tipik üç saldırılarında 15 dakika boyunca kilitli olsa iyidir. Bunu yapmak için CPU döngülerini "boşa mı harcıyorsunuz"? Her neyse. CPU zaten çoğu web sitesinde olduğundan daha fazla boşta zaman harcıyor, peki ne önemi var? Performans sorunlarıyla karşılaşıyorsanız, ölçeği genişletin.
Randolpho

14
Tuzlar gökkuşağı masalarına karşı savunur. 256 bitlik bir karma ile 512 bitlik bir tuz, son şifrede hala yalnızca 256 bitlik entropi ile sonuçlanacaktır.
Stephen Touset

8
Yavaş karma bir özelliktir, hata değildir.
outis

7
3 bitlik bir karma değeriniz varsa, 9999 bit tuzunuz yine de yalnızca 3 olası entropi bitine kadar hash yapacaktır. Bir gökkuşağı tablosu, sabit bir çarpım faktörü olan ve dolayısıyla büyük-O'dan atılan farklı bir çıktıyla sonuçlanan her şifre için yalnızca üç tuz bulmalıdır.
Stephen Touset

2
.................................................. .................................... özel sistem. Tuzların amacı karmaları aranır ve hemen düz metin haline geri alınamaz şekilde precomputation saldırıları durdurmak etmektir . 9999 bitlik bir tuzla, şifreniz bir sır olarak kalır , oysa 3 bitlik bir tuzla şifreniz artık tüm dünya tarafından bilinir (ve çoğu kişi şifreleri sık sık tekrar kullandığı için diğer hesaplarınızda oturum açmak için kullanabilirler). Buradaki 5 kişinin aslında "entropi" kelimesinden dolayı yorumunuza olumlu oy vermesini eğlenceli buluyorum.
Pacerier

7

Wikipedia :

Linux, BSD Unixes ve Solaris'te kullanılan SHA2-crypt ve bcrypt yöntemleri 128 bitlik tuzlara sahiptir. Bu daha büyük tuz değerleri, neredeyse her uzunluktaki parola için ön hesaplama saldırılarını, öngörülebilir gelecekte bu sistemlere karşı gerçekleştirilemez hale getirir.

128 bit (16 bayt) tuz yeterli olacaktır. Bunu 128 / 4 = 32onaltılık rakamlar dizisi olarak gösterebilirsiniz .


Bana öyle geliyor ki, diğer güvenli sistemlerin ne kullandığına dair bir örnek, en iyi uygulamanın ne olduğuna dair harika bir örnek.
cjbarth

1
@ mklement0 Teşekkürler, cevabı güncelledim.
Andrii Nemchenko

2

Bir cevap, kullanacağınız hash'in güvenlik açısından sağladığı değeri tuz boyutu olarak kullanmak olabilir.

Örneğin, SHA-512 kullanacaksanız, SHA-512 tarafından sağlanan güvenlik 256 bit olduğundan 256 bit tuz kullanın.

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.