मैं ऐसे TripleDes, डेस, आदिPasswordDeriveBytes बनाम Rfc2898DeriveBytes, अप्रचलित लेकिन जिस तरह से तेजी से
मूल रूप से दो विकल्प संगत कुंजी और चतुर्थ के लिए उत्पन्न करने के लिए कर रहे हैं के रूप में SymmetricAlgorithm से विरासत में मिली वर्गों के आधार पर एक एन्क्रिप्शन कार्यक्षमता पर काम कर रहा हूँ मेरी एल्गोरिदम कक्षा, PasswordDeriveBytes
और Rfc2898DeriveBytes
, दोनों DeriveBytes अमूर्त वर्ग से प्राप्त होते हैं।
PasswordDeriveBytes.GetBytes()
विधि नेट ढांचे में के रूप में अप्रचलित चिह्नित है, जबकि Rfc2898DeriveBytes.GetBytes() की सिफारिश की है, के रूप में यह PBKDF2 मानक मेल खाता है। लेकिन, मेरा परीक्षण पर आधारित, बुला Rfc2898DeriveBytes कक्षा में एक ही GetBytes()
विधि लगभग 15 गुना है कि PasswordDeriveBytes
वर्ग है, जो अप्रत्याशित CPU उपयोग (हमेशा से अधिक 50%) की ओर जाता है की तुलना में धीमी है।
Here're कुछ परीक्षण डेटा:
- पुनरावृत्ति: 100
- एल्गोरिथ्म के प्रकार: डेस
- मूल पाठ: "मैं एक परीक्षण कुंजी हूँ, मुझे एन्क्रिप्ट कृपया"
- समय:
- PasswordDeriveBytes: 99ms
- Rfc2898DeriveBytes: 1,373ms
परीक्षण के आधार पर, Rfc2898DeriveBytes
के खराब प्रदर्शन उत्पादन वातावरण में स्वीकार्य नहीं है।
किसी को भी करने से पहले इस समस्या को देखा है? कोई समाधान मैं अभी भी प्रदर्शन को मारने के बिना एक मानक एक का उपयोग कर सकते हैं? एक अप्रचलित विधि का उपयोग करने के लिए कोई जोखिम (भविष्य के संस्करण में हटाया जा सकता है)?
धन्यवाद दोस्तों!
संपादित करें:
शायद मैंने पाया जहां समस्या है ... PasswordDeriveBytes
के लिए डिफ़ॉल्ट पुनरावृत्ति संख्या संख्या 100 है, जबकि Rfc2898DeriveBytes
के लिए 1000 के बाद मैं 1000 में एक ही नंबर के लिए उन्हें बदल गया है, को क्रियान्वित Rfc2898DeriveBytes
केवल दो बार है।
आप उत्पादन वातावरण में कितनी बार चाबियाँ प्राप्त करने जा रहे हैं? और, आपके समय के डेटा के बारे में, जब आपने "100 पुनरावृत्तियों" कहा - क्या यह एक कुंजी पर पुनरावृत्तियों है, या आपने 100 कुंजी उत्पन्न की हैं। 100 परीक्षणों के आधार पर कोई भी पेफ डेटा संदिग्ध है, लेकिन मुझे लगता है कि आपने वास्तव में एक परीक्षण का परीक्षण किया है। सभी perf विश्लेषण मामलों में, एक परीक्षण के प्रतिक्रिया समय के आधार पर सर्वर प्रदर्शन के बारे में निष्कर्ष निकालने के लिए उचित नहीं है। – Cheeso
@ चेसियो परीक्षण इन दो वर्गों के प्रदर्शन के सिर्फ एक यूनिट परीक्षण था और यह वास्तविक ऐप में नहीं किया गया था। मैंने उल्लेख किया कि "100 पुनरावृत्तियों" थोड़ा उलझन में था, जिसका मतलब है कि मैंने उनमें से प्रत्येक को 100 बार निष्पादित किया था। यह वास्तविक पर्फ परीक्षण नहीं है बल्कि सिर्फ एक तुलना है। – tshao
मुझे लगता है कि आपने बिंदु 'आरएफसी 28 9 8 डीरिवेट्स' को याद किया होगा, धीमे होने के लिए मूल रूप से _ डिज़ाइन किया गया है ताकि पासवर्ड हैश चेक (लॉग-ऑन किया गया हो और इसलिए काफी बार-बार) ब्रूट फोर्स हमलों के दौरान प्रदर्शन हिट पर ध्यान न दें। यदि आपको हैश के लोड उत्पन्न करने की आवश्यकता है 'आरएफसी 28 9 8 डेरिवेट्स' आपके लिए नहीं है, लेकिन अगर आपको ब्रूट फोर्स हमलों से कुछ सुरक्षा की आवश्यकता है तो यह है। – Keith