2015-02-15 9 views
11

मैं वर्तमान में एन्क्रिप्शन सुरक्षा के मामले में एक (peer2peer) संदेश क्लाइंट बनाने के लिए संभावनाओं का शोध कर रहा हूं। यह एप्लिकेशन वेब प्रौद्योगिकियों (यदि संभव हो) पर आधारित होगा।जावास्क्रिप्ट में एंड-टू-एंड एन्क्रिप्शन संभव है?

मेरे प्रश्न हैं: केवल जावास्क्रिप्ट (क्लाइंट & node.js/peer.js) के साथ अंत-टू-एंड एन्क्रिप्शन संभव है? यदि हां: क्या एचएमएसी (आरएसए) एन्क्रिप्शन तकनीकों की तरह देखना सही है? मैंने पहले से ही यह समझने की कोशिश की है कि ये पुस्तकालय कैसे काम करते हैं लेकिन मेरे पास अब तक कोई भाग्य नहीं है :)

lib मुझे दिलचस्प लगता है लेकिन मैं समझ नहीं पा रहा हूं (पूरी तरह से) समझता हूं और कैसे कार्यान्वित करना है (इस उपयोग-मामले में):

मैं अगर जरूरत अधिक विस्तृत करने की कोशिश कर सकते हैं।

अद्यतन: आवेदन मोबाइल एप्लिकेशन होने जा रहा है। वेब प्रौद्योगिकियों का उपयोग थोड़ा सा सबूत है।

+4

क्यों न सिर्फ किसी अन्य एसएसएल प्रमाणपत्र को खरीदना? – Emissary

+0

जब मैं एक (पी 2 पी वेबआरटीसी) चैट एप्लिकेशन बना रहा हूं तो एसएसएल प्रमाणपत्र लागू करके समस्या हल हो गई है? शायद मुझे यह जोड़ना होगा कि यह भविष्य में एक मोबाइल (वेब) एप्लीकेशन होगा। – Dominique

+2

मुझे यकीन है कि आप 'window.crypto.getRandomValues ​​(uintarr) का उपयोग करके किसी प्रकार का आरएसए लागू कर सकते हैं; 'सवाल यह है कि" क्या यह अच्छा एन्क्रिप्शन होगा? " और "क्या यह सुरक्षित है?" साथ ही "ओवरहेड स्वीकार्य है?" –

उत्तर

4

आप वर्तमान में सुरक्षा कार्यान्वयन देख रहे हैं। यदि आप इन पुस्तकालयों के पीछे सुरक्षा मॉडल & क्रिप्टोग्राफी को नहीं समझते हैं, तो आपका समाधान - एक उच्च निश्चितता के लिए - सुरक्षित नहीं होगा।

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

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

+0

तो आप कह रहे हैं, अगर मुझे नहीं पता कि वास्तव में, बस इसे अपने आप मत करो? मैं समझता हूं कि क्लाइंट प्रमाणीकरण एक कठिन बिंदु है क्योंकि हम सभी ग्राहक पर भरोसा नहीं कर सकते हैं। फिर भी, क्या आप कुछ चीजों को अनुशंसा करते हैं जिन्हें मैं पढ़ सकता हूं या आपको लगता है कि मैं इसे बहुत अधिक समझ रहा हूं? : पी निश्चित रूप से आपके 2 सेंट के लिए धन्यवाद। – Dominique

+0

आपको सबसे पहले यह निर्धारित करने की आवश्यकता है कि आप प्रत्येक स्थान पर क्या भरोसा कर सकते हैं। अधिकांश परिदृश्यों के लिए आप केवल गोपनीयता नहीं चाहते हैं, आपको अखंडता और प्रमाणीकरण की भी आवश्यकता होगी, क्योंकि आमतौर पर मध्य हमलों में मनुष्य * संभव है। परिवहन प्रोटोकॉल के लिए टीएलएस/डीटीएलएस सबसे तार्किक विकल्प होंगे, लेकिन आपको अधिकांश कार्यान्वयन में विश्वसनीय प्रमाणपत्रों की आवश्यकता होगी (पासवर्ड आधारित आदि भी है)। –

2

अधिकतर, आप वेब ब्राउज़र में जावास्क्रिप्ट का उपयोग करके "नवीनता" अंत-टू-एंड एन्क्रिप्शन प्राप्त कर सकते हैं। यही है, यह अंत-टू-एंड एन्क्रिप्शन की तरह दिखता और महसूस करेगा, लेकिन कार्यान्वयन को क्रिप्टोग्राफरों द्वारा सबसे ज्यादा प्रभावित किया जाएगा।

मुख्य कारण यह है कि इससे कोई फर्क नहीं पड़ता कि आप अग्रभाग पर डेटा एन्क्रिप्ट करने के लिए कितनी पहेली डालते हैं, आपका ग्राहक आखिरकार सर्वर पर क्या भेजता है इस पर निर्भर करता है।

आवश्यक पढ़ने:

+0

जावास्क्रिप्ट का मतलब ब्राउज़र में एन्क्रिप्शन का मतलब नहीं है। उन्होंने टेक स्टैक में node.js सूचीबद्ध किया। – thomasmeadows

0

एंड-टू-एंड एन्क्रिप्शन के लक्ष्य उन संचार की सुरक्षा भी केंद्रीय सर्वर अगर के कुछ किया जा सकता है धोखा दे रहा है। हल करने की आवश्यकता के लिए दो मुख्य चुनौतियां हैं:

(1) उपयोगकर्ताओं को 100% निश्चित होना चाहिए कि वे किसके साथ संवाद कर रहे हैं, जिसके बारे में वे सोचते हैं कि वे संचार कर रहे हैं।यह मैन-इन-द-बीच (एमआईटीएम) हमलों को रोकने के लिए है, जहां मैन-इन-द-बीच सर्वर सर्वर सहित कोई भी हो सकता है (उदाहरण: Apple iMessage has this weakness)।

(2) आपको 100% सुनिश्चित होना चाहिए कि क्लाइंट-साइड कोड धोखाधड़ी नहीं कर रहा है। उदाहरण के लिए, क्या यह वास्तव में अन्य व्यक्ति की सार्वजनिक कुंजी का उपयोग कर डेटा एन्क्रिप्ट कर रहा है, या यह इसे कहीं और सादे पाठ में भेज रहा है, और फिर वहां से एन्क्रिप्ट कर रहा है। यह देखते हुए कि सर्वर के पास जो भी पहुंच है, वह किसी भी समय जावास्क्रिप्ट को स्वैप कर सकता है, यह एक बड़ी चुनौती है।

दोनों समस्याएं हल करने योग्य लगती हैं।

के लिए (1), उपयोगकर्ताओं को बाहर का बैंड सार्वजनिक कुंजी सत्यापित कर सकते हैं के रूप में PGP/GPG में किया जाता है (दुर्भाग्य से कई लोगों को इस कदम को छोड़, लेकिन सच एंड-टू-एंड सुरक्षा के लिए, आप इसे की जरूरत है) या keybase.io

(2), एमआईटी के एक समूह ने अपने Mylar डिज़ाइन में इसे हल करने का दावा किया है। धारा 6 देखें। यह कहा जाना चाहिए कि शोधकर्ताओं को माइलर के साथ सुरक्षा समस्याएं मिली हैं, लेकिन मेरे ज्ञान के लिए, क्लाइंट-साइड कोड अखंडता के उनके समाधान से समझौता नहीं किया गया है।

तो सिद्धांत रूप में, एंड-टू-एंड एन्क्रिप्शन जावास्क्रिप्ट में पूरी तरह से किया जा सकता है (कौन सी सर्वर भाषा का उपयोग किया जाता है इतना प्रासंगिक नहीं है)। अभ्यास में ... यह आसान नहीं होगा।

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