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