2011-11-09 8 views
8

इस कोड को मैं "हैश" करने के लिए उपयोग है (या निकाले जाते हैं कुंजी के रूप में PKCS मानक के PBKDF2 कार्यान्वयन में कहा जाता है) में उपलब्ध कराई गई Rfc2898DeriveBytes वर्ग के साथ पासवर्ड तार नेट:महत्व (PBKDF2) कार्यान्वयन

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); 

अब, मैं समझता हूँ कि नमक आकार नहीं ज्यादा बात (जब तक कि यह सुनिश्चित करना है कि यादृच्छिक लवण अनूठा होगा पर्याप्त है), लेकिन क्या कुंजी आकार के बारे में है? क्या लंबी कुंजी हमलों के खिलाफ अधिक सुरक्षा प्रदान करती है?

(नोट:
1. प्रदर्शन मामलों मुझे यहाँ के लिए आयात नहीं करते हैं, यह है कि एक लंबे समय तक नमक या एक लंबे समय तक कुंजी और समय लगेगा GetBytes एक मूल्य के वापस जाने के लिए के लिए स्पष्ट है
2. मैं उपयोग करना चाहते हैं। यह "हैश" डेटाबेस में उन्हें स्टोर करने के लिए, बाद में उन्हें एन्क्रिप्शन योजना में उपयोग नहीं करने के लिए)

+0

dkLen PKCS # 5 वी 2 (या पुराने) का उपयोग कर एक बहुत लंबा समय लगेगा व्युत्पन्न कुंजी, एक सकारात्मक पूर्णांक के ओक्टेट्स में लंबाई का इरादा, SHA-1 – jdweng

उत्तर

6

आम तौर पर आप उपयोगकर्ता पासवर्ड से सममित कुंजी बनाने के लिए PKCS # 5 v2/RFC2898 का ​​उपयोग करते हैं। आकार महत्वपूर्ण है क्योंकि यह आपके द्वारा उपयोग किए जा रहे सममित एल्गोरिदम के आवश्यक आकार से मेल खाना चाहिए।

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

हालांकि आप एक कुंजी के लिए नहीं, पासवर्ड के हैश रखने को देखकर प्रतीत हो रहा है, इसलिए आकार अपने विशिष्ट मामले में के रूप में महत्वपूर्ण नहीं है। यदि आप एक विशिष्ट मान चाहते हैं तो आप इसे हैश आकार (SHA1 के लिए 20 बाइट) पर सुरक्षित रूप से ठीक कर सकते हैं।

जनरल टिप्पणी (लोग जहां प्रदर्शन मामलों के लिए): PKCS का उपयोग कर # 5 वी 2 (या पुराने) एक नमकीन हैश या एक HMAC का उपयोग कर की तुलना में बहुत लंबे समय तक (पुनरावृत्ति संख्या) ले जाएगा।

+2

के लिए MD2 के लिए सबसे अधिक 16 या MD5 और 20 पर "(पुनरावृत्ति संख्या) नमकीन हैश या एचएमएसी का उपयोग करने से "क्या आप कारण नहीं है कि आप पहली जगह पीकेसीएस # 5 का उपयोग करना चाहते हैं? – Joren

+1

पर डिक्शनरी हमलों को चलाने के लिए तेज़ एल्गोरिदम आसान हो रहे हैं ** ** ** ** ** मजबूत * (क्रिप्टोग्राफी वार) कुंजी प्राप्त करना है। लेकिन यह ** नहीं ** ** प्रश्न में एल्गोरिदम का उपयोग क्यों किया गया था, इसलिए पीकेसीएस # 5 और नमकीन/हैशिंग के बीच का अंतर उचित आईएमएचओ था। – poupou

0

चाबियाँ समर्पित कुंजी का आकार है; इसलिए यदि आप एक बड़ी व्युत्पन्न कुंजी प्राप्त करना चाहते हैं, तो बड़े कुंजी आकार का उपयोग करें।

बड़ी चाबियाँ के लिए आवश्यक समय int (keyize/hashsize) के आनुपातिक है, इसलिए आपको कम से कम उसी लंबाई को हैशसाइज के रूप में सेट करना चाहिए।

इसके अलावा, आपको कुछ साइफर में उपयोग किए जाने पर अनुशंसित लंबाई की व्युत्पन्न कुंजी का उपयोग करना चाहिए, उदा। एईएस (128 - 256 बिट)।

संबंधित मुद्दे