परिष्कृत एन्क्रिप्टेड कुंजी सेटअप को संभालने के लिए वास्तव में कोई अंतर्निहित MySQL सुविधाएँ नहीं हैं। आपको अपने स्वयं के PHP और / या ब्राउज़र-साइड (जावास्क्रिप्ट?) कोड में एन्क्रिप्शन तर्क के थोक को लागू करने की आवश्यकता होगी।
लेकिन आपकी बताई गई चिंताएँ थोड़ी अजीब हैं: ऐसा लगता है कि आपकी एकमात्र वास्तविक चिंताएँ एक एसक्यूएल इंजेक्शन या ब्रूट फोर्स (पासवर्ड-अनुमान लगाना, मुझे लगता है) एक दूरस्थ क्लाइंट डेस्कटॉप / लैपटॉप वर्कस्टेशन से हमला करती हैं। इससे मुझे संदेह है कि आपके पास पहले से ही कुछ अन्य, संयुक्त राष्ट्र के सुरक्षा उपायों की योजना है, और आपने समझौते के संभावित संकेतों का विश्लेषण किया है।
एक के लिए, मैं मान रहा हूँ कि आपके पास फ़ायरवॉल नियम हैं जो बिना किसी दूरस्थ क्लाइंट IP से किसी भी प्रकार की पहुँच के खिलाफ MySQL / PHP होस्ट की सुरक्षा करते हैं। यदि मैं सही हूं, तो यह समझ में आता है कि आप केवल समझौता किए गए उपयोगकर्ताओं के कार्यस्थानों के हमलों से चिंतित हैं।
इसके अलावा, मैं आपको यह समझा रहा हूं कि यदि दूरस्थ क्लाइंट होस्ट पर कोई हमलावर रूट / व्यवस्थापक निजी को बढ़ा सकता है, या सीधे वास्तविक उपयोगकर्ता के खाते से समझौता कर सकता है, तो उस ग्राहक के डेटा में एन्क्रिप्शन या किसी अन्य सुरक्षा उपायों की परवाह किए बिना शून्य सुरक्षा है। (हमलावर डिस्क पर सहेजे गए स्थान से कुंजियों को पढ़ सकते हैं, या उन्हें स्नूप कर सकते हैं क्योंकि असली उपयोगकर्ता उन्हें लॉगऑन में प्रवेश करता है, और कुंजी डेटा तक ले जाती है।)
उन दो मान्यताओं से शुरू, यह हमारे लिए यह निष्कर्ष निकालने के लिए समझ में आता है कि केवल दो प्रासंगिक खतरे ए) जानवर बल पासवर्ड अनुमान लगा रहे हैं, और बी) एसक्यूएल इंजेक्शन प्रयास:
- यदि हमलावर को वास्तविक उपयोगकर्ता की कुंजी का एनहोल्ड नहीं मिलता है, या यदि वह वास्तविक उपयोगकर्ता के डेटा से अधिक का उपयोग करना चाहता है, तो वह वास्तविक उपयोगकर्ता या किसी अन्य खाते के लिए ब्रूट-फोर्सिंग लॉगोन क्रेडिट की कोशिश कर सकता है। (सिद्धांत में आप प्रत्येक खाते को एक विशिष्ट दूरस्थ ग्राहक आईपी में बंद कर सकते हैं, जो जोखिमों को कम करने में मदद करेगा।)
- यदि हमलावर को वास्तविक उपयोगकर्ता के लिए एक वैध कुंजी मिलती है, तो उसके पास संभावित छोटी गाड़ी ऐप कोड के सॉफ्ट अंडरबेली के लिए लॉगऑन स्क्रीन (जो कि संभवतः सुरक्षित होने के लिए पर्याप्त सरल है) में एक एवेन्यू है। वास्तविक उपयोगकर्ता के संदर्भ से एक सफल SQL इंजेक्शन उसे अन्य क्लाइंट डेटा तक भी पहुँच दे सकता है।
अब, चलिए इस बारे में बात करते हैं कि सर्वर-साइड एन्क्रिप्शन इन स्थितियों पर कैसे लागू होता है:
- सर्वर-साइड एन्क्रिप्शन निश्चित रूप से SQL इंजेक्शन खतरे के खिलाफ मदद करता है। यदि डीबी तालिकाओं में पंक्ति मान एन्क्रिप्ट किए गए हैं, तो हमलावर केवल उस डेटा के जिबरिश सिफरटेक्स्ट को देख सकता है जो अन्य खातों से संबंधित है। खतरा निहित है, कंपार्टमेंटल है।
- हालांकि, पासवर्ड अनुमान लगाने के लिए क्रूरतापूर्ण, सर्वर-साइड एन्क्रिप्शन का सामना करने वाले हमलावर के लिए वास्तव में कोई कठिन नहीं है। भले ही उपयोगकर्ताओं की कुंजी सर्वर पर संग्रहीत हो या पासवर्ड से ऑन-द-स्पॉट उत्पन्न हो, केवल एक चीज जो मायने रखती है कि क्या आपके पास सही पासवर्ड है। या तो सर्वर आपको मान्य संग्रहीत कुंजी का उपयोग करने देने का निर्णय करता है क्योंकि यह जांचता है कि आपका पासवर्ड सही है, या यह आपके लिए वैध कुंजी की गणना करता है क्योंकि आपका पासवर्ड उस कुंजी को उत्पन्न करने के लिए सही इनपुट है।
दूसरी ओर क्लाइंट एन्क्रिप्शन, वास्तव में ब्रूट फोर्स पासवर्ड हमलों को अप्रासंगिक बनाता है। आप सही ढंग से निर्मित कुंजी को ब्रूट-बल नहीं कर सकते। क्लाइंट-साइड एन्क्रिप्शन मूल रूप से सर्वर-साइड एन्क्रिप्शन के रूप में SQL इंजेक्शन के खिलाफ सुरक्षा का समान स्तर रखता है। क्लाइंट लॉगऑन पर सर्वर की कुंजी को पारित कर सकता है, सत्र समाप्त होने तक मेमोरी में एक कॉपी रखते हुए, जो सर्वर पर क्रिप्टो सीपीयू बोझ डालता है। या, क्लाइंट ब्राउज़र में स्वयं एन्क्रिप्शन / डिक्रिप्शन को संभाल सकता है। दोनों तकनीकों में उतार-चढ़ाव हैं:
- सर्वर के लिए इसकी कुंजी को पास करना और कोड करना और प्रबंधित करना बहुत आसान है, और आमतौर पर अधिक अनुकूलित क्रिप्टो कोड (संकलित सी, शायद) के कारण बहुत तेजी से होता है।
- एक शुद्ध क्लाइंट-साइड दृष्टिकोण अतिरिक्त सुरक्षा देता है, क्योंकि अगर किसी हमलावर को सर्वर पर रूट मिलता है, तो भी वह एन्क्रिप्ट किए गए डेटा को नहीं पढ़ सकता है, और वह कभी भी इसे पढ़ने में सक्षम नहीं होगा। दूरस्थ क्लाइंट कार्य केंद्र से समझौता करने के लिए एकमात्र संभव हमला वेक्टर है।
अंत में, मैं यह नोट करने जा रहा हूं कि डेटाबेस में डेटा एन्क्रिप्ट करने के लिए कुछ विशाल परिचालन डाउनसाइड हैं। क्योंकि एन्क्रिप्ट किए गए डेटा अभ्यावेदन अनिवार्य रूप से यादृच्छिक पैटर्न हैं, बुनियादी डेटाबेस जैसे अनुक्रमण, जॉन्स, आदि काम करने वाले नहीं हैं। क्लाइंट एक बड़ा तर्क बोझ उठाता है, और डेटाबेस सुविधाओं को सामान्य रूप से लाने के लिए बहुत सारे लाभ खो सकता है।