C++ में सुरक्षित प्रमाणीकरण: पासवर्ड कैसे लीक न करें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: सुरक्षित प्रमाणीकरण एक विकल्प नहीं, बल्कि आवश्यकता क्यों है

\n\n

दोस्तों, एक तस्वीर की कल्पना करें: आपने एक शानदार C++ एप्लिकेशन लिखा है - चैट के लिए सर्वर, ऑनलाइन स्टोर के लिए API, या ग्राहकों का एक सरल डेटाबेस। सब कुछ काम कर रहा है, उपयोगकर्ता खुश हैं। और फिर - बूम! - किसी ने पासवर्ड वाला डेटाबेस चुरा लिया। लीक ऑनलाइन, प्रतिष्ठा शून्य, और उपयोगकर्ता घबराए हुए। परिचित लगता है? दुर्भाग्य से, यह हजारों स्टार्टअप और दिग्गजों की कहानी है। और यह सब इसलिए क्योंकि C++ अनुप्रयोगों में सुरक्षित प्रमाणीकरण को "जल्दबाजी में" लागू किया गया था।

\n\n

इस लेख में हम उबाऊ व्याख्यान नहीं देंगे। हम चर्चा करेंगे कि आपके C++ प्रोजेक्ट में उपयोगकर्ता लॉगिन को ठीक से कैसे सुरक्षित किया जाए। आप जानेंगे कि पासवर्ड को सादे टेक्स्ट में संग्रहीत करना एक घोर पाप क्यों है, हैशिंग का सही उपयोग कैसे करें, और सबसे आम हमलों से कैसे बचाव करें। चलिए शुरू करते हैं!

\n\n

सुरक्षा की मूल बातें: तीन स्तंभ जिन पर सब कुछ टिका है

\n\n

कोड लिखने से पहले, आइए समझें कि "सुरक्षित प्रमाणीकरण" का वास्तव में क्या अर्थ है। यह केवल "लॉगिन और पासवर्ड जांचना" नहीं है। यह एक पूरी दर्शन है, जो तीन मुख्य सिद्धांतों पर आधारित है:

\n
    \n
  • पासवर्ड को कभी भी सादे टेक्स्ट में संग्रहीत न करें। भले ही हैकर डेटाबेस चुरा ले, उसे बेकार वर्णों का एक सेट ही मिलना चाहिए।
  • \n
  • "सॉल्ट" (salt) का उपयोग करें। अलग-अलग उपयोगकर्ताओं के समान पासवर्ड से अलग-अलग हैश मिलने चाहिए। यह रेनबो टेबल को बेकार कर देता है।
  • \n
  • ट्रांसमिशन चैनल को सुरक्षित करें। पासवर्ड को नेटवर्क पर सादे टेक्स्ट में यात्रा नहीं करनी चाहिए। HTTPS या प्रोटोकॉल स्तर पर एन्क्रिप्शन का उपयोग करें।
  • \n
\n\n

अब व्यावहारिक भाग पर आते हैं। हम आधुनिक क्रिप्टोग्राफ़िक लाइब्रेरीज़ का उपयोग करके C++ पर उपयोगकर्ता प्रमाणीकरण प्रणाली बनाएंगे।

\n\n

चरण 1: पासवर्ड हैशिंग - सही एल्गोरिदम चुनना

\n\n

MD5 और SHA-1 को भूल जाइए। वे पुराने जमाने के हैं। C++ में पासवर्ड के सुरक्षित भंडारण के लिए धीमे, हमलों के प्रति प्रतिरोधी एल्गोरिदम की आवश्यकता है: bcrypt, scrypt या Argon2 (अंतिम वाला PHC प्रतियोगिता का विजेता है)।

\n\n

हम bcrypt का उपयोग करेंगे - यह सरल, विश्वसनीय है और इसकी एक उत्कृष्ट लाइब्रेरी libbcrypt या bcrypt-cpp है। इसे अपने पैकेज मैनेजर (vcpkg, conan) के माध्यम से स्थापित करें या मैन्युअल रूप से बनाएं।

\n\n

उदाहरण: bcrypt के साथ पासवर्ड हैशिंग

\n\n
#include <iostream>\n#include <string>\n#include <bcrypt/bcrypt.h> // मान लें कि यह संरचना है\n\n// पासवर्ड हैश करने का फंक्शन\nstd::string hashPassword(const std::string& password) {\n    // "सॉल्ट" जनरेट करें (आमतौर पर bcrypt यह स्वचालित रूप से करता है)\n    char salt[BCRYPT_HASHSIZE];\n    char hash[BCRYPT_HASHSIZE];\n    \n    // सॉल्ट जनरेशन (वास्तविक फंक्शन भिन्न हो सकता है)\n    bcrypt_gensalt(12, salt); // 12 राउंड - गति/सुरक्षा का अच्छा संतुलन\n    \n    // पासवर्ड हैशिंग\n    bcrypt_hashpw(password.c_str(), salt, hash);\n    \n    return std::string(hash);\n}\n\nint main() {\n    std::string userPassword = "MySuperP@ssw0rd!";\n    std::string hashed = hashPassword(userPassword);\n    std::cout << "पासवर्ड हैश: " << hashed << std::endl;\n    return 0;\n}\n
\n\n

ध्यान दें: सॉल्ट पहले से ही हैश में शामिल है। bcrypt प्रत्येक पासवर्ड के लिए स्वचालित रूप से एक अद्वितीय सॉल्ट जनरेट करता है। यही रेनबो टेबल के माध्यम से ब्रूट-फोर्स से सुरक्षा है।

\n\n

लॉगिन पर पासवर्ड सत्यापन

\n\n

जब उपयोगकर्ता पासवर्ड दर्ज करता है, तो हम इसे "डी-हैश" नहीं कर सकते (हैश एक वन-वे फंक्शन है)। इसके बजाय, हम दर्ज किए गए पासवर्ड के हैश की तुलना डेटाबेस में संग्रहीत हैश से करते हैं:

\n\n
bool verifyPassword(const std::string& password, const std::string& storedHash) {\n    // bcrypt_checkpw 0 लौटाता है यदि पासवर्ड मेल खाता है\n    return (bcrypt_checkpw(password.c_str(), storedHash.c_str()) == 0);\n}\n\n// प्रमाणीकरण कोड में उपयोग का उदाहरण\nstd::string userInput = "MySuperP@ssw0rd!";                

ब्लॉग

पुस्तक अनुशंसाएँ