आप सही हैं - स्क्रिप फ़ंक्शन उन दो लिंक के साथ खेल रहे हैं, स्क्रिप फ़ाइल एन्क्रिप्शन उपयोगिता, अंतर्निहित केडीएफ नहीं हैं। मैं धीरे-धीरे पाइथन के लिए एक स्टैंडअलोन स्क्रिप-आधारित पासवर्ड हैश बनाने पर काम कर रहा हूं, और इस मुद्दे में खुद भाग गया।
स्क्रिप फ़ाइल उपयोगिता निम्न कार्य करती है: आपके सिस्टम & "न्यूनतम समय" पैरामीटर के लिए विशिष्ट स्क्रिप के एन/आर/पी पैरामीटर चुनती है। यह तब 32 बाइट नमक उत्पन्न करता है, और फिर 64 बाइट कुंजी बनाने के लिए scrypt(n,r,p,salt,pwd)
पर कॉल करता है। द्विआधारी स्ट्रिंग उपकरण रिटर्न से बना है: 1) एक हेडर जिसमें एन, आर, पी मान, और बाइनरी में एन्कोडेड नमक होता है; 2) शीर्षलेख का sha256 चेकसम; और 3) कुंजी के पहले 32 बाइट्स का उपयोग करके चेकसम के एक एचएमएसी-शाए 256 हस्ताक्षरित प्रति। उसके बाद, यह इनपुट डेटा को एईएस एन्क्रिप्ट करने के लिए कुंजी के शेष 32 बाइट्स का उपयोग करता है।() एक नया नमक उत्पन्न
इनपुट डेटा व्यर्थ है, क्योंकि यह वास्तव में नमक को प्रभावित नहीं करता इस्तेमाल किया जा रहा है, और एन्क्रिप्ट:
इस के निहितार्थ है कि मैं देख सकता हूँ के एक जोड़े हैं हर बार।
आप एन, आर, पी वर्कलोड मैन्युअल रूप से या किसी अन्य तरीके से कॉन्फ़िगर नहीं कर सकते हैं लेकिन अजीब मिनट-समय पैरामीटर। यह असुरक्षित नहीं है, लेकिन कार्य कारक को नियंत्रित करने के लिए एक अजीब तरीका है।
के बाद डिक्रिप्ट कॉल कुंजी पुन: बनाता है और HMAC के खिलाफ यह तुलना, यह सही वहाँ सब कुछ को अस्वीकार कर देंगे, तो आपका पासवर्ड गलत है - लेकिन अगर यह सही है, यह पर आगे बढ़ेंगे भी डेटा पैकेज डिक्रिप्ट। यह बहुत अधिक काम है जिसे हमलावर को प्रदर्शन नहीं करना पड़ेगा - उन्हें 64 बाइट्स भी प्राप्त नहीं करना है, केवल 32 हस्ताक्षर की जांच करने के लिए आवश्यक है। यह समस्या असुरक्षित बिल्कुल ठीक नहीं करती है, लेकिन काम करने से आपका हमलावर कभी वांछनीय नहीं होता है।
नमक कुंजी, व्युत्पन्न कुंजी आकार इत्यादि को कॉन्फ़िगर करने का कोई तरीका नहीं है, वर्तमान मान खराब नहीं हैं, लेकिन फिर भी, यह आदर्श नहीं है।
डिक्रिप्ट उपयोगिता की "अधिकतम समय" सीमा पासवर्ड हैशिंग के लिए गलत है - प्रत्येक बार डिक्रिप्ट कहा जाता है, यह आपके सिस्टम की गति का अनुमान लगाता है, और कुछ "अनुमान लगाता है" कि यह अधिकतम समय के भीतर कुंजी की गणना कर सकता है - अधिक ओवरहेड आपके हमलावर को नहीं करना है (देखें # 3), लेकिन इसका मतलब यह भी है कि डिक्रिप्ट भारी सिस्टम लोड के तहत पासवर्ड को अस्वीकार करना शुरू कर सकता है।यहां तक कि लिंक करने के लिए निर्यात नहीं -
मुझे यकीन है कि क्यों कॉलिन पर्सिवल KDF & पैरामीटर-चुनने सार्वजनिक एपीआई के कोड हिस्सा नहीं था, लेकिन यह वास्तव में स्पष्ट रूप से चिह्नित किया गया है "निजी" स्रोत कोड के अंदर नहीं कर रहा हूँ । यह मुझे बहुत अधिक अध्ययन किए बिना सीधे पहुंचने में संकोच करता है।
सभी में
सभी, क्या जरूरत है एक अच्छा हैश प्रारूप कि scrypt स्टोर कर सकते हैं, और एक कार्यान्वयन कि अंतर्निहित KDF और पैरामीटर-चुनने एल्गोरिथ्म को उजागर करता है। मैं वर्तमान में passlib के लिए इस पर काम कर रहा हूं, लेकिन इसने अधिक ध्यान नहीं देखा है :(
बस नीचे की रेखाओं के नीचे - उन साइट के निर्देश 'ठीक' हैं, मैं बस एक खाली स्ट्रिंग का उपयोग करता हूं फ़ाइल सामग्री, और अतिरिक्त भूमि के ऊपर और मुद्दों के बारे में पता होना
स्रोत
2012-12-01 20:17:21
धन्यवाद। मैंने कुछ डिक्रिप्ट का समय दिया और वे एक चरित्र तारों के लिए भी अत्यधिक परिवर्तनीय और समय लेने वाली लगते हैं। अन्य मुद्दों के साथ मैं रह सकता था, लेकिन यह नहीं जानना कि किस मूल्य को रखना है ताकि डिक्रिप्शन वापस नहीं आएगा "डिक्रिप्टिंग फ़ाइल में बहुत लंबा समय लगेगा " त्रुटि यह मेरे लिए अनुपयोगी बनाती है। bcrypt बहुत अधिक दोस्ताना दिखता है और शायद मेरे लिए ठीक होगा। – Mitch