2008-09-02 13 views
8

बुनियादी बातों ठीक दो कुंजी के साथ डेटा एन्क्रिप्शन (जो पासवर्ड आधारित किया जा सकता है) पूरा करने के लिए क्या कर रहे हैं, लेकिन केवल आवश्यकता होगी, एक (या तो एक) दो चाबियों का डेटा डिक्रिप्ट करने के लिए?एकाधिक प्राप्तकर्ताओं के लिए एक संदेश कैसे एन्क्रिप्ट करना है?

उदाहरण के लिए, डेटा किसी उपयोगकर्ता का पासवर्ड और उनकी कंपनी का पासवर्ड के साथ एन्क्रिप्टेड है, और फिर वह या उनकी कंपनी डेटा को डिक्रिप्ट कर सकते हैं। उनमें से कोई भी अन्य पासवर्ड नहीं जानता है। एन्क्रिप्टेड डेटा की केवल एक प्रति संग्रहित की जाती है।

मैं सार्वजनिक/निजी कुंजी मतलब यह नहीं है। शायद सममित कुंजी क्रिप्टोग्राफी के माध्यम से और शायद इसमें एन्क्रिप्टिंग के लिए उपयोग करने के लिए एक साथ कुंजी को XORing करना शामिल है।

अद्यतन: मैं भी एक समाधान है कि सब पर चाबियाँ भंडारण को शामिल नहीं करता प्राप्त करना चाहते हैं।

+0

भी देखें: https://superuser.com/q/554513/199930 –

उत्तर

18

तरीका यह प्रथानुसार किया जाता है डेटा एन्क्रिप्ट करने के लिए एक एकल सममित कुंजी उत्पन्न करने के लिए है। फिर आप प्रत्येक प्राप्तकर्ता की कुंजी या पासवर्ड के साथ सममित कुंजी को एन्क्रिप्ट करते हैं ताकि वे इसे स्वयं ही डिक्रिप्ट कर सकें। एस/एमआईएमई (वास्तव में क्रिप्टोग्राफिक संदेश सिंटेक्स जिस पर एस/एमआईएम आधारित है) इस तकनीक का उपयोग करता है।

इस तरह, आप केवल एन्क्रिप्टेड संदेश की एक प्रति स्टोर करने के लिए है, लेकिन उसके प्रमुख की कई प्रतियां।

+0

वहाँ इस विधि सुरक्षा संबंधी कोई समस्या है? अगर मैं प्राप्तकर्ताओं की एक ही सूची में कई फाइलें (एक अलग सममित कुंजी के साथ प्रत्येक फ़ाइल) भेज रहा हूं (उन्हें ए, और बी कहते हैं)। क्या व्यक्ति देख सकता है कि सममित कुंजी (स्रोत टेक्स्ट) और व्यक्ति बी के लिए एन्क्रिप्टेड फॉर्म क्या है और पर्याप्त संदेश भेजे जाने पर व्यक्ति बी की कुंजी निर्धारित करता है? –

+1

आसा, यह सामग्री (संदेश) एन्क्रिप्शन कुंजी एन्क्रिप्ट करने के लिए प्रयुक्त एल्गोरिदम पर निर्भर करेगा। कुछ एल्गोरिदम कमजोर हो सकते हैं। मैं आम तौर पर सामग्री एन्क्रिप्शन कुंजी को एन्क्रिप्ट करने के लिए आरएसए का उपयोग करता हूं, और वहां, सही पैडिंग मोड सादा टेक्स्ट हमलों के खिलाफ बचाव कर सकता है। जब भी संभव हो मैं ओएईपी का उपयोग करता हूं। – erickson

+0

एरिक्सन, तो आपके पास कुंजी ए होगा जिसका उपयोग संदेश को एन्क्रिप्ट करने के लिए किया गया था, फिर उपयोगकर्ता को 1 की पब कुंजी के साथ एन्क्रिप्टेड ए की एक प्रति भेजें, उपयोगकर्ता 2 को 2 की पब कुंजी आदि के साथ एन्क्रिप्टेड की एक प्रति भेजें? – user8675309

6

सामान्य शब्दों में, आप क्या करते हैं यादृच्छिक रूप से जनरेट कुंजी के साथ डेटा एन्क्रिप्ट है, और फिर उस यादृच्छिक महत्वपूर्ण यह है कि हर ज्ञात कुंजी से एन्क्रिप्ट किया गया है के संस्करणों जोड़ देते हैं। तो वैध कुंजी वाला कोई भी व्यक्ति 'असली' कुंजी खोज सकता है जिसे डेटा एन्क्रिप्ट करने के लिए उपयोग किया गया था।

0

मुझे लगता है कि मैं एक समाधान है कि काम करेगा के बारे में सोचा:

D = data to encrypt 
h1 = hash(userpassword) 
h2 = hash(companyPassword) 
k = h1 concat h2 

E = function to encrypt 
//C is the encrypted data 
C = E_h1(h2) concat E_h2(h1) concat E_k(D) 

तो या तो व्यक्ति को दूसरे व्यक्ति के हैश डिक्रिप्ट कर सकते हैं, और फिर डेटा के बाकी डिक्रिप्ट करने के लिए उन्हें गठबंधन।

शायद वहाँ हालांकि इस तुलना में एक बेहतर समाधान है?

+0

वह समाधान काम करेगा, हालांकि 2 से अधिक कुंजी होने पर यह अनावश्यक हो जाता है। –

0

अधिक सामान्य मामले में, एक रहस्य (इस एप्लिकेशन में, डेटा के लिए एक डिक्रिप्शन कुंजी) को शेयरों में विभाजित किया जा सकता है जैसे कि इन शेयरों की कुछ सीमा संख्या गुप्त को पुनर्प्राप्त करने के लिए आवश्यक है। इसे गुप्त साझाकरण या एन शेयरों और टी की सीमा, ए (टी, एन) - थ्रेसहोल्ड योजना के रूप में जाना जाता है।

ऐसा करने का एक तरीका यह है कि ऑर्डर टी -1 का बहुपद बनाकर, पहला गुणांक के रूप में रहस्य स्थापित करना, और शेष गुणांक को यादृच्छिक रूप से चुनना। फिर, इस वक्र पर एन यादृच्छिक बिंदु चुने जाते हैं और शेयर बन जाते हैं।

+0

अपने उपयोग के मामले के लिए, गुप्त साझाकरण खराब हो जाएगा, टी = 1 के रूप में, और "वक्र" रहस्य के माध्यम से क्षैतिज रेखा से गुजरना होगा। साथ ही, ध्यान दें कि साझा बिंदुओं को यादृच्छिक रूप से चुनना महत्वपूर्ण नहीं है। अभ्यास में, शेयर अक्सर अनुक्रम में जारी किए जाते हैं: 1, 2, 3 ... – erickson

1

अगर मैं तुम्हें सही ढंग से समझ में आया, आप कुछ डेटा है कि आप एन्क्रिप्ट और n में। 'कुंजी टुकड़े' (आपके मामले में 2 टुकड़े)

कि splitted एन्क्रिप्शन कुंजी वितरित करने के लिए तैयार हैं, तो आप इस्तेमाल कर सकते हैं एक्सओआर आधारित विभाजन, यह है कि यह कैसे काम करता है: आप आवश्यक संख्या में टुकड़े प्रदान करते हैं - एन, और गुप्त कुंजी - के। अपनी कुंजी के एन टुकड़े उत्पन्न करने के लिए, आपको यादृच्छिक संख्या (एन -1) बनाने की आवश्यकता है: आर 1, आर 2, आर 3,। । । , आरएन -1।
आर एन = R1 ⊕ R2 ⊕ R3 ⊕: कश्मीर - कि आप एक SecureRandom संख्या जनरेटर है, जो हमें duplicates.Then करने से रोकेगा उपयोग कर सकते हैं आप इन आर एन -1 टुकड़े और अपने प्रमुख पर XOR समारोह कार्य करते हैं। । । ⊕ आरएन -1 ⊕ के

अब आपके पास अपने एन टुकड़े हैं: आर 1, आर 2, आर 3, ..., आरएन -1, आरएन और आप के को नष्ट कर सकते हैं। उन टुकड़ों को आपके कोड में फैलाया जा सकता है या उपयोगकर्ताओं को भेजा जा सकता है।

कुंजी को फिर से इकट्ठा करने के लिए, हम अपने आरएन टुकड़ों पर एक्सओआर ऑपरेशन का उपयोग करते हैं:
के = आर 1 ⊕ आर 2 ⊕ आर 3 ⊕। । । ⊕ आरएन -1 ⊕ आरएन

एक्सओआर फ़ंक्शन (⊕) के साथ प्रत्येक टुकड़ा कुंजी के पुनर्निर्माण में स्वाभाविक रूप से महत्वपूर्ण है, यदि किसी भी टुकड़े में कोई भी बिट बदल जाता है, तो कुंजी पुनर्प्राप्त करने योग्य नहीं है।
GitHub परियोजना:: https://github.com/aivarsda/Secret-Key-Split-Util

इसके अलावा आपको लगता है कि का उपयोग करता है जो उपयोगिता गोपनीय कुंजी स्प्लिटर डेमो एप्लिकेशन की कोशिश कर सकते

अधिक जानकारी और कोड के लिए, आप एंड्रॉयड उपयोगिता पर एक नज़र मैं उस उद्देश्य के लिए लिखा है ले जा सकते हैं:
GooglePlay: https://play.google.com/store/apps/details?id=com.aivarsda.keysplitter

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