OpenSSL aes-128-cfb अपेक्षित आकार का उत्पादन नहीं करता है
मैं सीखने के लिए खुद को एईएस -128-सीएफबी लागू करने की कोशिश करता हूं। यह सुनिश्चित करने के लिए कि मेरा कार्यान्वयन सही है, मैं इसे एक प्रसिद्ध पुस्तकालय जैसे ओपनएसएसएल के साथ सत्यापित करना चाहता हूं। लेकिन तब मुझे कुछ अजीब लगा जब मैंने OpenSSL को एन्क्रिप्ट करने के लिए उपयोग करने की कोशिश की।
मेरे पास cleartext.txt
निम्नलिखित सामग्री है:
This is cleartext that will be used to encrypt with OpenSSL.
तब मैं इस आज्ञा का पालन करता हूं
openssl enc -aes-128-cfb -in cleartext.txt -K 48656c6c6f20576f726c642041455321 -iv 72616e646f6d20313662797465206976 -out output.txt
अजीब बात यह है कि आउटपुट फ़ाइल में केवल 60 बाइट्स होते हैं। एईएस ब्लॉक 16 बाइट्स है। बाइट में अपेक्षित आउटपुट का आकार 16 का कई होना चाहिए। 60 16 का गुणक नहीं है।
क्या मुझे यहाँ कुछ महत्वपूर्ण याद आया?
जवाब
क्योंकि सीएफबी को ऑपरेशन के सीटीआर और ओएफबी मोड के समान पैडिंग की आवश्यकता नहीं होती है। ये मोड सिफर ब्लॉक बनाते हैं और उनमें से एक आवश्यक राशि का उपयोग करता है।
openssl enc -K -iv
IV के मामले में आउटपुट फाइल पर नहीं लिखा जाता हैoutput.txt
। इसलिए इसका आकार बाइट्स में प्लेटेक्स्ट के समान है;61
मेरी फ़ाइल के लिए प्रत्येक बाइट्स। इस मामले में, आपको IV को संभालना होगा। चूंकि आप IV प्रदान कर रहे हैं, इसलिए सुनिश्चित करें कि इसका दोबारा उपयोग नहीं किया गया है। अन्यथा, CTR मोड या OTP के प्रमुख पुन: उपयोग में एक क्राइब-ड्रैगिंग हो सकती है।के मामले में
-k/-kfile/-pass
, आईवी और कुंजी उपयोगकर्ता के पासवर्ड और 8-बाइट यादृच्छिक नमक का उपयोग करके प्रमुख व्युत्पत्ति विधि से प्राप्त किए जाते हैं।ओपनएसएसएल पहले 8-बाइट नमक का फाइल मैजिक लिखता है
Salted__
फिर फाइल में सिफरटेक्स्ट। अब आउटपुट साइज आपका हैmagic size + salt size + data-size
। मेरे सिस्टम में,8+8+61 = 77
बाइट्स।यदि ईसीबी मोड का उपयोग किया जाता है
openssl enc -aes-128-ecb -in cleartext.txt -k -pass -out output.txt
फिर
80
पैडिंग के कारण आकार बाइट्स है। बेशक, ईसीबी IV का उपयोग नहीं करता है और किसी को इस मोड को भूलना चाहिए!सीबीसी मोड ईसीबी के साथ समान परिणाम है।
व्युत्पन्न IV आकार 8-बाइट ब्लॉक सिफर TDES की तरह उपयोग किए गए एन्क्रिप्शन algoritm के अनुसार बदल सकता है और ब्लोफ़िश को 8-बाइट IV की आवश्यकता होती है और AES की तरह 16-बाइट ब्लॉक सिफर और Twofish को 16-बाइट IV की आवश्यकता होती है।
पासवर्ड का उपयोग करते समय कोई भी पासवर्ड की एन्ट्रापी और प्रयुक्त कुंजी व्युत्पत्ति विधि के बारे में सावधान रह सकता है। डायवर्वेयर पासवर्ड का उपयोग करने की सलाह दी जाती है और कुंजी व्युत्पत्ति के लिए कम से कम PBKDF2। OpenSSL मुख्य व्युत्पत्ति के लिए विभिन्न विधि प्रदान करता है