2014-09-19 8 views
5

का उपयोग कर प्रति उपयोगकर्ता अद्वितीय नमक पासवर्ड को सलाम करने के बारे में थोड़ा सा पढ़ने के बाद, ऐसा लगता है कि प्रत्येक उपयोगकर्ता के लिए एक अद्वितीय नमक का उपयोग करना सबसे अच्छा है। मैं फ्लास्क-सुरक्षा एटीएम को कार्यान्वित करने पर काम कर रहा हूं, और प्रलेखन से ऐसा लगता है कि आप केवल वैश्विक नमक सेट कर सकते हैं: यानी सिक्योरिटी_PASSWORD_SALT = 'थीसाल्ट'फ्लास्क-सुरक्षा

प्रश्न: प्रत्येक पासवर्ड के लिए एक अद्वितीय नमक बनाने के बारे में कोई कैसे होगा?

धन्यवाद!

संपादित करें: फ्लास्क-सुरक्षा पर दस्तावेज़ों से, मुझे यह मिला, जो फिर से सुझाव देता है कि यह मॉड्यूल केवल बॉक्स के बाहर सभी पासवर्ड के लिए एक ही नमक का उपयोग करता है।

flask_security.utils.get_hmac(password) 
    Returns a Base64 encoded HMAC+SHA512 of the password signed with the salt 
    specified by SECURITY_PASSWORD_SALT. 
+1

एक वैश्विक नमक एक नमक नहीं है। यदि सभी के लिए एक ही नमक का उपयोग किया जाता है, तो दो उपयोगकर्ता जो एक ही पासवर्ड वाले होते हैं, उनके पास एक ही पासवर्ड है। यही वह चीज है जिसे नमक को रोकने के लिए किया जाता है। –

+0

@ माइकलबुर ठीक है, यही वह था जो मैं सोच रहा था ... यही कारण है कि मैं उलझन में हूं। प्रत्येक पासवर्ड के लिए एक अद्वितीय नमक बनाने के लिए मैं इस सेटिंग का उपयोग कैसे करूं? या क्या ऐसा करने के लिए मुझे फ्लास्क-सिक्योरिटी में अंतर्निहित लवण को ओवरराइड करना होगा? – Chockomonkey

+1

मुझे खेद है - मुझे फ्लास्क के बारे में कुछ नहीं पता है। मैं सिर्फ वैश्विक नमक के विचार पर टिप्पणी कर रहा था। समाधान खोजने के बाद –

उत्तर

12

हाँ, कुप्पी के सुरक्षा प्रति-उपयोगकर्ता लवण डिजाइन द्वारा अगर इस तरह के des_crypt, pbkdf2_sha256 के रूप में अन्य योजनाओं bcrypt का उपयोग कर (और का उपयोग करता है, pbkdf2_sha512, sha256_crypt, sha512_crypt)।

'SECURITY_PASSWORD_SALT' के लिए कॉन्फ़िगरेशन केवल एचएमएसी एन्क्रिप्शन के लिए उपयोग किया जाता है। यदि आप हैशिंग एल्गोरिदम के रूप में bcrypt का उपयोग कर रहे हैं फ्लास्क-सुरक्षा हैशिंग के लिए पासलिब का उपयोग करता है और यह हैशिंग के दौरान यादृच्छिक नमक उत्पन्न करता है। यह confustion मुद्दा 268 में उल्लेख किया गया है: https://github.com/mattupstate/flask-security/issues/268

यह कोड में सत्यापित किया जा सकता, एन्क्रिप्ट से चलने passlib रहे हैं:

flask_security/utils.py (लाइनों 143-151, 39, और 269)

def encrypt_password(password): 
    ... 
    return _pwd_context.encrypt(signed) 

_pwd_context = LocalProxy(lambda: _security.pwd_context) 

flask_security/core.py (269, 244-251, और 18)

pwd_context=_get_pwd_context(app) 

def _get_pwd_context(app): 
    ... 
    return CryptContext(schemes=schemes, default=pw_hash, deprecated=deprecated) 

from passlib.context import CryptContext 

और अंत में से: https://pythonhosted.org/passlib/password_hash_api.html#passlib.ifc.PasswordHash.encrypt

ध्यान दें कि प्रत्येक कॉल एन्क्रिप्ट करने के लिए() एक नया नमक उत्पन्न करता है,

5

बाहर निकलता है कि यदि आप बीक्रिप्ट का उपयोग करते हैं, तो यह लवण का ख्याल रखता है और इसे हैश के साथ स्टोर करता है। तो मैं उस मार्ग पर जाऊंगा!

इस विषय जो के लिए धन्यवाद मुझे इस खोज के लिए नेतृत्व:

Do I need to store the salt with bcrypt?

+2

कुडोस अपने स्वयं के प्रश्न पर वापस आने पर। –

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

  • कोई संबंधित समस्या नहीं^_^