2011-09-23 5 views
9

सबसे पहले, मैं माफी माँगता हूँ मेरे सवाल थोड़ा भ्रमित लग रहा है, मैं पूरी कोशिश करूँगा मेरी परिदृश्य का वर्णन करने के लिए के रूप में संभव के रूप में विस्तृत जानकारी दी:डेटाबेस में निजी एन्क्रिप्टेड उपयोगकर्ता डेटा को कैसे स्टोर करें, लेकिन उन्हें अन्य चुने गए उपयोगकर्ताओं के लिए उपलब्ध कराएं?

मैं वेबसाइट जहां उपयोगकर्ता कर सकते हैं खुद के बारे में इनपुट अपने निजी डेटा है। वे मुख्य रूप से स्वास्थ्य डेटा हैं, इसलिए यह बहुत निजी और संवेदनशील जानकारी है। तो मुझे सर्वर पर इस डेटा को एन्क्रिप्ट करने की आवश्यकता है, फिर भी सर्वर से समझौता किया गया है कि इन आंकड़ों को सुरक्षित किया गया है क्योंकि वे प्रत्येक उपयोगकर्ता के पासवर्ड से एन्क्रिप्ट किए जाएंगे। बेशक, उपयोगकर्ता पासवर्ड सर्वर पर स्पष्ट प्रकार के पाठ के रूप में संग्रहीत नहीं किया जाएगा, केवल पासवर्ड हैश।

लेकिन मेरी समस्या यह है कि वेबसाइट "सामाजिक समारोह" की पेशकश जब उपयोगकर्ता किसी अन्य उपयोगकर्ता के साथ उसकी/उसके जानकारी के कुछ साझा करने के लिए चुन सकते हैं जाएगा। लेकिन यह समस्या होगी, क्योंकि मेरे पास उपयोगकर्ता के निजी डेटा को डिक्रिप्ट करने का कोई तरीका नहीं होगा और इसलिए मैं इसे किसी अन्य उपयोगकर्ता को नहीं दिखा सकता।

क्या आप मुझे कुछ विकल्प दे सकते हैं, या कम से विचारों में, यह कैसे हल किया जा सकता है? LAMP पर्यावरण का उपयोग कर पसंदीदा रूप से।

उत्तर

18

यह public-key cryptography का उपयोग कर हल किया जा सकता:

  1. प्रत्येक उपयोगकर्ता के लिए एक सार्वजनिक/निजी कुंजी युग्म उत्पन्न; और केवल उपयोगकर्ता के पासवर्ड के साथ अस्थायी रूप से निजी कुंजी को डिक्रिप्ट करें।
  2. प्रत्येक डेटा आइटम के लिए, यादृच्छिक रूप से एक (सममित) कुंजी एस चुनें और इसके साथ डेटा डी एन्क्रिप्ट करें। स्टोर एस (डी)।
  3. सार्वजनिक कुंजी पी + यू उपयोगकर्ता द्वारा एक्सेस प्रदान करना चाहते हैं, तो एस को एन्क्रिप्ट करें। प्रारंभ में, यह उपयोगकर्ता u है जिसका डेटा आप संग्रहीत कर रहे हैं।
  4. स्टोर पी + u (एस) स्थायी रूप से। अन्य सभी चाबियाँ भूल जाओ।

अब, जब कोई उपयोगकर्ता यू उपयोगकर्ता एक्स साथ डेटा साझा करने, निम्न कार्य करें चाहता है:

  1. डिक्रिप्ट उपयोगकर्ता के निजी कुंजी पी - साथ यू उपयोगकर्ता का पासवर्ड
  2. का उपयोग करना है कि निजी कुंजी, संग्रहीत डेटा डिक्रिप्ट: पी - यू (पी + यू (एस)) = एस
  3. एन्क्रिप्ट एस उपयोगकर्ता की सार्वजनिक कुंजी के साथ आप जानकारी साझा करना चाहते हैं।
  4. परिणामी पी + x (एस) स्थायी रूप से स्टोर करें। अन्य सभी चाबियाँ भूल जाओ।

अब, जब किसी भी उपयोगकर्ता एक्स, डेटा का उपयोग निम्नलिखित प्रक्रिया को करने के लिए चाहता है:

  1. डिक्रिप्ट उपयोगकर्ता के निजी कुंजी पी - उपयोगकर्ता का पासवर्ड के साथ एक्स
  2. पी + x (एस) खोजें। (यदि यह संग्रहीत नहीं है, तो इसका मतलब है कि किसी ने भी खराब उपयोगकर्ता के साथ डेटा साझा नहीं किया है x)। (+ एक्स (एस) पी) = एस
  3. एक्सएस का उपयोग करना, संग्रहीत एन्क्रिप्टेड एस डिक्रिप्ट (घ - पी :
  4. निजी कुंजी का उपयोग करना, संग्रहीत डेटा डिक्रिप्ट): एस (एस (डी)) = डी।
+1

महान समाधान के लिए धन्यवाद। मुझे इसे पूरी तरह से पचाने के लिए इसे 5 बार पढ़ना पड़ा, लेकिन यह वही है जो मैं ढूंढ रहा था, धन्यवाद। – Frodik

+0

@ फ्रोडिक क्षमा करें, मुझे पता है कि यह जटिल है, और कोई भी सभी चर को छोड़कर इसे सरल बना सकता है, लेकिन इससे यह बहुत ही कमजोर हो जाएगा। वैसे, इस समाधान को लागू करने के लिए ['openssl'] (http://php.net/manual/en/book.openssl.php) मॉड्यूल पर एक नज़र डालें। – phihag

+0

आपके प्रयास के लिए फिर से धन्यवाद। क्या आप कृपया कुछ सरल उदाहरण या ट्यूटोरियल को लिंक प्रदान कर सकते हैं? यदि नहीं, तो मैं निश्चित रूप से इसे स्वयं Google पर करने का प्रयास करूंगा, लेकिन मैंने सोचा कि आपके पास अपनी जेब में कुछ हो सकता है ;-) – Frodik

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

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