2011-01-05 7 views
17

या: उपयोगकर्ताओं के समूह के लिए एन्क्रिप्टेड डेटा कैसे स्टोर करें?क्या एकाधिक निजी कुंजी (PHP) के साथ एन्क्रिप्शन होना संभव है?

मैं मानता हूं, यह एक मूर्ख सवाल है, एक निजी कुंजी केवल एक व्यक्ति तक ही सीमित है क्योंकि शब्द का तात्पर्य है। लेकिन मैं इस परिदृश्य है:

उपयोगकर्ता टॉम डेटा एक डेटाबेस में एन्क्रिप्टेड रखने की ज़रूरत हो कि प्रवेश करती है। उपयोगकर्ता निर्णय लेता है कि वह यह जानकारी जिम और बॉब को उपलब्ध करना चाहता है। उपयोगकर्ता जॉन और जेन इसे डिक्रिप्ट करने में सक्षम नहीं होना चाहिए। निस्संदेह उपयोगकर्ता टिम को भी नहीं, जिसने सर्वर को हैक किया है और एन्क्रिप्टेड डेटा और एन्क्रिप्शन/डिक्रिप्शन करने वाली स्क्रिप्ट तक पहुंच है।

मुझे लगता है कि PHPs openssl_public_encrypt फ़ंक्शन के साथ सार्वजनिक कुंजी/निजी कुंजी दृष्टिकोण यहां काम नहीं करेगा क्योंकि दो उपयोगकर्ताओं को डेटा को डिक्रिप्ट करने के लिए "निजी" कुंजी की आवश्यकता होती है।

मैं इस एक नहीं बल्कि सामान्य प्रश्न लगता है, लेकिन अगर यह महत्वपूर्ण है, यह PHP में (और MySQL शायद) किया जाना चाहिए।

उत्तर

14

ओपनपीजीपी (और, अन्य सिस्टम) में यह कैसे किया जाता है: - आप गुप्त सममित कुंजी उत्पन्न कर रहे हैं, जिसका उपयोग डेटा को एन्क्रिप्ट करने के लिए किया जाता है; - फिर, इस सममित कुंजी को टॉम की कुंजी से एन्क्रिप्ट किया गया है; - भी सममित कुंजी, जिम की और बॉब की सार्वजनिक कुंजी के साथ एन्क्रिप्टेड किया जा सकता है उन्हें कुंजी डिक्रिप्ट करने के लिए अनुमति देता है और उस डेटा को डिक्रिप्ट करने के बाद

+0

धन्यवाद - मैं इसे स्वीकार किए गए उत्तर के रूप में चुनूंगा क्योंकि अन्य मूल रूप से एक ही चीज़ की अनुशंसा करते हैं और आप पहले थे। आप सभी को धन्यवाद! – acme

3

मैं PHP में पुस्तकालयों पता नहीं है। इस प्रकार लेकिन सामान्य प्रक्रिया है:

  • डाटा एक सममित कुंजी
  • प्रत्येक प्राप्तकर्ता के लिए का उपयोग कर एन्क्रिप्टेड है, कुंजी प्राप्तकर्ता की सार्वजनिक कुंजी
  • सभी यह एक PKCS # 7 में सहेजा जाता है का उपयोग कर एन्क्रिप्टेड है फ़ाइल संरचना

जब "PHP और PKCS7" को देख कुछ परिणाम होना चाहिए ...

+0

'openssl_seal()' PHP में समारोह इस करता है (हालांकि यह PKCS # 7 उत्पादन का उत्पादन नहीं करता है)। – caf

2

एक डेटा एन्क्रिप्शन कुंजी (यह Kgeneral कहते हैं) कि टॉम की कुंजी से अलग है का प्रयोग करें।

टॉम की सार्वजनिक कुंजी के साथ एन्क्रिप्ट Kgeneral और टॉम के लिए परिणाम देते हैं - वह इसे डिक्रिप्ट और Kgeneral प्राप्त करने के लिए अपने निजी कुंजी का उपयोग कर सकते हैं।

किसी अन्य उपयोगकर्ता तो डेटा तक पहुँच की जरूरत है, टॉम (या अपने आवेदन) तो Kgeneral उसकी सार्वजनिक कुंजी के साथ एन्क्रिप्ट, और उसे इस तरह से पहुँच दे सकते हैं।

11

पीएचपी इस के लिए एक समारोह प्रदान करता है - openssl_seal()। यह फ़ंक्शन सार्वजनिक कुंजी की एक सरणी लेता है, और डेटा को एन्क्रिप्ट करता है ताकि किसी भी निजी कुंजी का उपयोग इसे डिक्रिप्ट करने के लिए किया जा सके (openssl_open() का उपयोग करके)।

+0

मैं समझता हूं कि यह फ़ंक्शन प्राप्तकर्ताओं की सार्वजनिक कुंजी की एक श्रृंखला लेता है, लेकिन प्रेषक की निजी और सार्वजनिक कुंजी के बारे में क्या? क्या यह फ़ंक्शन एक यादृच्छिक बनाता है और प्रेषक की पब्की को sealed_data में एम्बेड करता है? –

+0

@DawidGrzesiak: 'openssl_seal()' फ़ंक्शन डेटा पर हस्ताक्षर नहीं करता है, इसलिए इसे प्रेषक की चाबियों की आवश्यकता नहीं होती है। 'Openssl_seal()' के परिणाम पर हस्ताक्षर करने के लिए आप ['openssl_sign()'] (http://php.net/openssl_sign) का उपयोग कर सकते हैं। – caf

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