संपीड़ित करें और फिर एन्क्रिप्ट करें, या इसके विपरीत?


88

मैं एक वीपीएन सिस्टम लिख रहा हूं जो नेट के पार (एईएस 256) अपने ट्रैफ़िक को एनक्रिप्ट कर देता है (जब मैं खुद लिखता हूं कि वहां 1,000,001 अन्य लोग पहले से ही बाहर हैं? खैर, मेरा एक विशिष्ट कार्य के लिए एक विशेष है जो दूसरों में से कोई भी फिट नहीं है)।

मूल रूप से मैं अपनी सोच को चलाना चाहता हूं ताकि आप यह सुनिश्चित कर सकें कि मैं यह सही क्रम में कर रहा हूं।

फिलहाल पैकेट्स को बाहर भेजे जाने से पहले एन्क्रिप्ट किया जाता है, लेकिन मैं डेटा के ट्रैफ़र को थोड़ा ऑप्टिमाइज़ करने के लिए उनमें कुछ स्तर के कंप्रेशन को जोड़ना चाहता हूं। भारी संपीड़न नहीं - मैं सीपीयू को हर समय अधिकतम नहीं करना चाहता, लेकिन मैं यह सुनिश्चित करना चाहता हूं कि संपीड़न यथासंभव कुशल हो।

इसलिए, मेरी सोच यह है कि, मुझे एनक्रिप्टेड पैकेट के रूप में एन्क्रिप्ट करने से पहले पैकेट को कंप्रेस करना चाहिए क्योंकि एन्क्रिप्टेड पैकेट से बेहतर सेक होगा? या फिर इसके विपरीत?

मैं शायद संपीड़न के लिए zlib का उपयोग कर रहा हूँ।

सुपर यूजर ब्लॉग पर अधिक पढ़ें ।


4
"प्रोग्रामिंग" के रूप में लेखन? तब स्टैक ओवरफ्लो के लिए बेहतर अनुकूल होगा।
सुमा

4
अगर मैं इसके प्रोग्रामिंग के बारे में पूछ रहा था, हां, लेकिन मैं नहीं। यह एक सामान्य सेक है, फिर एन्क्रिप्ट या एनक्रिप्ट करें फिर कंप्रेस सवाल है जो अगर आप चाहते हैं तो केवल सादे फाइलों के साथ काम करने के लिए लागू हो सकता है। प्रोग्रामिंग साइड सिर्फ संदर्भ है कि मैं सवाल क्यों पूछ रहा हूं।
मजेंको



1
वे संपीड़न के बारे में जानते हैं कि वे क्या करते हैं?
मजेंको

जवाबों:


176

यदि एन्क्रिप्शन ठीक से किया जाता है, तो परिणाम मूल रूप से यादृच्छिक डेटा है। अधिकांश संपीड़न योजनाएं आपके डेटा में ऐसे पैटर्न ढूंढकर काम करती हैं जो किसी तरह से फैक्टर हो सकते हैं, और एन्क्रिप्शन के लिए धन्यवाद अब कोई नहीं है; डेटा पूरी तरह से अयोग्य है।

एन्क्रिप्ट करने से पहले संपीड़ित करें।


41
अधिक महत्वपूर्ण: संपीड़न एन्ट्रापी जोड़ता है। एन्ट्रॉपी जोड़ना आपके एन्क्रिप्शन के लिए अच्छा है (ज्ञात-प्लेनटेक्स्ट हमलों के साथ तोड़ना कठिन)।
ओली

8
इसके अलावा, संसाधनों को एन्क्रिप्ट करने से छोटी फ़ाइल को एन्क्रिप्ट करने में कम संसाधन लगेंगे। तो एन्क्रिप्ट करने से पहले संपीड़ित करें।
गठरन

9
@ ओली - जरूरी नहीं कि कंप्रेशन स्कीम ज्ञात पाठ को जोड़ता हो। सबसे खराब स्थिति में कल्पना करें कि यह डेटा के मोर्चे पर एक ज्ञात 512byte हैडर लगाता है और आप एक ब्लॉक मोड एन्क्रिप्शन का उपयोग कर रहे थे।
मार्टिन बेकेट

25
मुझे यकीन नहीं है कि @ ओली की टिप्पणी गलत क्यों होगी, क्योंकि यह गलत है; न केवल यह काफी कम महत्वपूर्ण है, किसी भी आधे-सभ्य एन्क्रिप्शन के लिए यह महत्वपूर्ण नहीं होना चाहिए । यही है, एन्क्रिप्शन की ताकत संदेश के एन्ट्रापी से पूरी तरह से असंबंधित होनी चाहिए।
ब्लूराजा -

8
यदि आप सभी को संकुचित करते हैं, तो यह वास्तव में संदेश को एन्क्रिप्ट करने से पहले ही किया जा सकता है, लेकिन ध्यान में रखते हुए, यह मूल संदेश की 'कम्प्रेसिबिलिटी' के बारे में जानकारी को लीक कर सकता है, इसलिए यदि आप इस पक्ष के लिए कोई परिणाम चाहते हैं तो विचार करना चाहेंगे। चैनल। एक निश्चित आकार की फ़ाइल पर विचार करें जो या तो सभी 0 या एक संदेश है। सभी 0 फ़ाइल किसी भी उचित संपीड़न योजना के तहत एक छोटे से पेलोड में परिणत होंगी। हालांकि इस विशेष उपयोग के मामले में कोई समस्या नहीं है।
एडवर्ड KMETT 20

22

एन्क्रिप्शन से पहले संपीड़ित करें। स्रोत डेटा में छोटे परिवर्तनों के लिए संपीड़ित डेटा काफी भिन्न हो सकते हैं, इसलिए अंतर क्रिप्टोनालिसिस करना बहुत मुश्किल है।

इसके अलावा, जैसा कि श्रीअल्पा बताते हैं, यदि आप पहले एन्क्रिप्ट करते हैं, तो परिणाम संपीड़ित करना बहुत मुश्किल है।


12
ठीक है, यह सही है, लेकिन आपके द्वारा पोस्ट किए जाने से 2 घंटे पहले पोस्ट किया गया था ... एंट्रॉपी
कोनरक

3

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

हम सर्वर पर एक संदेश भेजने वाले एक उपयोगकर्ता और हमलावर को भेजने से पहले उपयोगकर्ता संदेश को पाठ को जोड़ने की संभावना के साथ एक हमलावर मान लेते हैं (जैसे जावास्क्रिप्ट के माध्यम से)। उपयोगकर्ता कुछ समझदार डेटा सर्वर पर भेजना चाहता है और हमलावर यह डेटा प्राप्त करना चाहता है। इसलिए वह उपयोगकर्ता को सर्वर पर भेजे जाने वाले डेटा में विभिन्न संदेशों को जोड़ने की कोशिश कर सकता है। फिर उपयोगकर्ता अपने संदेश और हमलावर से संलग्न पाठ को संपीड़ित करता है। हम एक DEFLATE LZ77 संपीड़न मान लेते हैं, इसलिए फ़ंक्शन एक ही सूचना को सूचक के साथ पहली उपस्थिति में बदल देता है। इसलिए अगर हमलावर होल प्लेनटेक्स्ट को पुन: उत्पन्न कर सकता है, तो कंप्रेशन-फ़ंक्शन सादे टेक्स्ट के आकार को मूल आकार और एक पॉइंटर में कम कर देता है। और एन्क्रिप्शन के बाद, हमलावर सिफर ब्लॉकों की संख्या की गणना कर सकता है, इसलिए वह देख सकता है, अगर उसका जोड़ा गया डेटा वैसा ही था जैसा कि उपयोगकर्ता सर्वर पर भेजे गए डेटा का था। भले ही यह मामला थोड़ा सा निर्मित हो, यह टीएलएस में एक गंभीर सुरक्षा मुद्दा है। सत्र चोरी करने के लिए TLS कनेक्शन में कुकीज़ लीक करने के लिए CRIME नामक हमले के द्वारा इस विचार का उपयोग किया जाता है।

स्रोत: http://www.ekoparty.org/archive/2012/CRIME_ekoparty2012.pdf


2

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


1

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


1

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


यह स्वीकृत और दूसरे उत्तरों की पुनरावृत्ति प्रतीत होता है। प्रत्येक उत्तर में प्रश्न के नए समाधान में योगदान करना चाहिए।
फिक्सर 1234

0

संपीड़न सूचना एन्ट्रापी को कम करता है। अधिकतम संपीड़न एन्ट्रापी को न्यूनतम बनाता है। पूरी तरह से एन्क्रिप्टेड डेटा (शोर) के लिए अधिकतम और न्यूनतम एन्ट्रापी समान है।


2
रुको, क्या आपके पास वह पीछे नहीं है? मुझे लगा कि अतिरेक के कम होते ही एन्ट्रापी बढ़ गई। इसलिए संपीड़न को एन्ट्रापी में वृद्धि करनी चाहिए।
ज़ैन लिंक्स

नोप, कम एन्ट्रॉपी = अधिक पैटर्न। यादृच्छिकता में सबसे अधिक एन्ट्रापी है।
AbiusX

1
लेकिन यह जानकारी एन्ट्रापी है इसलिए यह अर्थ के बारे में है। यादृच्छिकता का मतलब कुछ भी नहीं है इसलिए यह लागू नहीं होता है। एक अंग्रेजी वाक्य में अक्षरों को बदल दिया जा सकता है और फिर भी इसका मतलब वही हो सकता है इसलिए इसमें कम एन्ट्रॉपी है। यदि एक बिट में सबसे अधिक परिवर्तन होता है, तो एक संकुचित अंग्रेजी वाक्य अपठनीय हो सकता है। या तो मुझे लगता है।
ज़ेन लिंक्स

एंट्रोपी समझ और पढ़ने या समझने की क्षमता के बारे में नहीं है, इसके सभी पैटर्न के बारे में। संपीड़ित फाइलें पैटर्न से भरी होती हैं।
AbiusX

1
@AbiusX: सही है। पैटर्न। और कम पैटर्न, अधिक एन्ट्रापी। इसका मतलब यह है कि संपीड़न जो एक प्रतिलिपि के साथ सभी दोहराया पैटर्न को बदल देता है एंट्रॉपी बढ़ जाती है।
ज़ैन लिंक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.