argon2-cffi क्या है?
argon2-cffi लाइब्रेरी Argon2 पासवर्ड हैशिंग एल्गोरिदम का आधिकारिक Python रैपर है, जो CFFI (C Foreign Function Interface) के ज़रिए काम करता है। Argon2 एक आधुनिक पासवर्ड हैशिंग एल्गोरिदम है जिसने 2015 में Password Hashing Competition जीता था और तब से इसे पासवर्ड स्टोर करने का सबसे सुरक्षित तरीका माना जाता है।
argon2-cffi का मुख्य फायदा यह है कि यह C-इम्प्लीमेंटेशन की वजह से बहुत तेज़ है, साथ ही Python का आसान इंटरफ़ेस भी देता है। इस लाइब्रेरी को कम्युनिटी एक्टिवली सपोर्ट करती है और इसे नियमित रूप से नए सुरक्षा मानकों के हिसाब से अपडेट किया जाता है।
इंस्टॉलेशन और सेटअप
सामान्य इंस्टॉलेशन
pip install argon2-cffi
अतिरिक्त डिपेंडेंसी के साथ इंस्टॉलेशन
pip install argon2-cffi[dev] # डेवलपमेंट के लिए
pip install argon2-cffi[tests] # टेस्टिंग के लिए
इंस्टॉलेशन की जाँच
import argon2
print(argon2.__version__)
Argon2 एल्गोरिदम के प्रकार
Argon2i (Data-Independent)
Argon2i साइड-चैनल अटैक (side-channel attacks) से बचाव के लिए ऑप्टिमाइज़ किया गया है। यह पासवर्ड के कंटेंट से स्वतंत्र रूप से मेमोरी को एक्सेस करता है, जिससे यह टाइमिंग अटैक के प्रति प्रतिरोधी बनता है। यह उन स्थितियों के लिए सुझाया जाता है जहाँ टाइमिंग एनालिसिस से बचाव ज़रूरी हो।
Argon2d (Data-Dependent)
Argon2d GPU अटैक और स्पेशलाइज़्ड हार्डवेयर से होने वाले हमलों से अधिकतम सुरक्षा देता है। यह डेटा पर निर्भर मेमोरी एक्सेस का उपयोग करता है, जिससे अटैक को पैरेलल करना मुश्किल हो जाता है। हालांकि, यह साइड-चैनल अटैक से कम सुरक्षित है।
Argon2id (Hybrid)
Argon2id एक हाइब्रिड मोड है जो दोनों विकल्पों के फायदों को जोड़ता है। यह argon2-cffi में डिफ़ॉल्ट रूप से उपयोग होता है और ज़्यादातर एप्लिकेशन के लिए सुझाया जाता है। पहले पास Argon2i की तरह और बाकी Argon2d की तरह काम करते हैं।
त्वरित शुरुआत
बेसिक उपयोग
from argon2 import PasswordHasher
# हैशर का इंस्टेंस बनाएँ
ph = PasswordHasher()
# पासवर्ड हैश करें
password = "मेरा_सुपर_सीक्रेट_पासवर्ड"
hash_result = ph.hash(password)
print(f"हैश: {hash_result}")
# पासवर्ड वेरिफाई करें
try:
ph.verify(hash_result, password)
print("पासवर्ड सही है!")
except Exception as e:
print(f"पासवर्ड गलत है: {e}")
विभिन्न डेटा प्रकारों के साथ काम करना
from argon2 import PasswordHasher
ph = PasswordHasher()
# स्ट्रिंग हैश करना
string_hash = ph.hash("स्ट्रिंग_पासवर्ड")
# बाइट्स हैश करना
bytes_password = b"bytes_password"
bytes_hash = ph.hash(bytes_password)
# वेरिफिकेशन
ph.verify(string_hash, "स्ट्रिंग_पासवर्ड")
ph.verify(bytes_hash, bytes_password)
PasswordHasher का कॉन्फ़िगरेशन
कंस्ट्रक्टर के पैरामीटर
from argon2 import PasswordHasher, Type
ph = PasswordHasher(
time_cost=3, # इटरेशन की संख्या (डिफ़ॉल्ट 2)
memory_cost=65536, # मेमोरी KB में (डिफ़ॉल्ट 51200)
parallelism=2, # थ्रेड्स की संख्या (डिफ़ॉल्ट 1)
hash_len=32, # हैश की लंबाई बाइट्स में (डिफ़ॉल्ट 32)
salt_len=16, # सॉल्ट की लंबाई बाइट्स में (डिफ़ॉल्ट 16)
encoding="utf-8", # एन्कोडिंग (डिफ़ॉल्ट "utf-8")
type=Type.ID # Argon2 का प्रकार (डिफ़ॉल्ट Type.ID)
)
पैरामीटर्स का सुरक्षा पर प्रभाव
time_cost एक्ज़ीक्यूशन टाइम को लीनियर रूप से बढ़ाता है। हर 1 की बढ़ोतरी हैशिंग टाइम को दोगुना कर देती है।
memory_cost किलोबाइट्स में मेमोरी की मात्रा तय करता है। बड़े वैल्यू स्पेशलाइज़्ड हार्डवेयर से होने वाले अटैक को मुश्किल बनाते हैं।