2011-11-09 23 views
8

Buna "karma" için kullandıkları kod (veya PKCS standardının PBKDF2 uygulanmasında denilen olarak anahtar türetmek) sağlanan Rfc2898DeriveBytes sınıfla şifreleri dizeleri .NET:Önemi (PBKDF2) uygulaması

int saltSize = 256; 
int iterations = 1000; 
int keySize = 20; // The parameter I'm not sure of 

var deriveBytes = new Rfc2898DeriveBytes("mypassword", saltSize, iterations); 
byte[] salt = deriveBytes.Salt; 
byte[] key = deriveBytes.GetBytes(keySize); 

Şimdi, tuz boyutu çok önemli değil (sürece rastgele tuzlar benzersiz olmasını sağlamak için yeterli olduğu gibi), ama ne anahtar boyutu hakkında yaptığı anlıyoruz? Daha uzun bir anahtar, saldırılara karşı daha fazla güvenlik sağlar mı?

(Notlar:
1. Performans konular burada benim için içe aktarılmaz, GetBytes bir değer döndürmek için daha uzun tuz veya daha uzun bir anahtar daha zaman alacağını açıktır
2. kullanmak istiyorum. Bunları bir veritabanında saklamak için bu "karma", daha sonra bunları bir şifreleme şemasında kullanmamak için)

+0

dkLen çok daha uzun sürer PKCS # 5 V2 (veya daha eski) kullanılarak" SHA-1 – jdweng

cevap

6

Genellikle kullanıcı parolasından simetrik anahtarını oluşturmak için PKCS # 5 v2/RFC2898'i kullanırsınız. Boyut önemlidir, çünkü kullanacağınız simetrik algoritmanın gerekli boyutuna uymalıdır.

aes.Key = deriveBytes.GetBytes (16); // 16 * 8 = 128 bits 

Ancak sen bir anahtar için, şifreleri bir karma tutarak bakıyor gibi görünüyor, bu yüzden boyutu özel örneğinde olduğu gibi önemli değildir. Belirli bir değer istiyorsanız, karma boyutunu (SHA1 için 20 bayt) güvenli bir şekilde düzeltebilirsiniz.

Genel not (performans konular insanlar için): kullanarak PKCS 5. v2 (veya daha eski) bir tuzlanmış karma veya HMAC kullanarak daha uzun bir sürü (yineleme sayısı) alacaktır.

+2

en MD2 için 16 veya MD5 ve 20 ° C'de, elde edilen anahtar, pozitif bir tamsayı arasında sekizlilerde uzunluğu amaçlanan (yineleme sayısı) tuzlanmış bir hash veya bir HMAC kullanmaktan daha iyi "Neden PKCS # 5 ilk etapta kullanmak istiyorsun? Daha hızlı algoritmalar, sözlük saldırılarını çalıştırmak için daha kolay. – Joren

+1

** ana ** nedeni, * güçlü * (kriptografi bilge) anahtarlarını almaktır. Ancak bu **, ** neden algoritmanın soruna neden kullanıldığını, yani PKCS # 5 ile tuzak/karmaşanın arasındaki farkın uygun IMHO olduğunu belirtiyor. – poupou

0

anahtar boyutu, anahtarın boyutudır; Büyük bir türetilen anahtar almak istiyorsanız, daha büyük keySize kullanın.

Daha büyük anahtar boyutu için gereken süre int (keysize/hashsize) ile orantılıdır, bu nedenle keysize'yi en azından boy ile aynı uzunlukta ayarlamalısınız. Ayrıca, bazı örneklerde kullanıldığında, örneğin, önerilen uzunluktan türetilmiş anahtarlar kullanmalısınız. AES (128 - 256 bit).

İlgili konular