linux एन्क्रिप्शन/डिक्रिप्शन दो अलग-अलग ओपनसेल संस्करणों के बीच अच्छी तरह से काम नहीं करता है




encryption openssl (3)

मैंने डाउनलोड किया है और openssl-1.1.0 संकलित किया है।

मैं openssl के समान एक्स का उपयोग करके एन्क्रिप्ट और डीक्रिप्ट कर सकता हूं (जैसा कि here )

[email protected]:~/openssl-1.1.0$ LD_LIBRARY_PATH=. ./apps/openssl aes-256-cbc -a -salt -in file.txt -out file.txt.enc
enter aes-256-cbc encryption password: 123
Verifying - enter aes-256-cbc encryption password:
[email protected]:~/openssl-1.1.0$ LD_LIBRARY_PATH=. apps/openssl aes-256-cbc -a -d -in file.txt.enc -out file.txt.dec
enter aes-256-cbc decryption password: 123

यह libcrypto.so.1.1, libssl.so.1.1 उपयोग करता है: libcrypto.so.1.1, libssl.so.1.1

जब मैं अपने ubuntu पर इंस्टॉल किए गए /lib/x86_64-linux-gnu/libssl.so.1.0.0, /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 साथ डिक्रिप्ट करने की कोशिश करता हूं, जो उपयोग करता है: /lib/x86_64-linux-gnu/libssl.so.1.0.0, /lib/x86_64-linux-gnu/libcrypto.so.1.0.0

मुझे एक त्रुटि मिली:

[email protected]:~/openssl-1.1.0$ openssl aes-256-cbc -a -d -in file.txt.enc -out file.txt.dec2
enter aes-256-cbc decryption password: 123
bad decrypt
140456117421728:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:539:

इसका क्या कारण हो सकता है? धन्यवाद


मैंने संस्करण 1.1.0a (Opensl.org से डाउनलोड किया गया) और संस्करण 1.0.2g-fips (मेरे ubuntu 16.04 से) के साथ एईएस एन्क्रिप्शन और डिक्रिप्शन का परीक्षण किया

-p के 2 अलग-अलग संस्करणों के साथ -p विकल्प का उपयोग करते समय, IV और कुंजी भिन्न होते हैं:

$ LD_LIBRARY_PATH=~/openssl-1.1.0a/ ~/openssl-1.1.0a/apps/openssl aes-256-cbc -a -p -salt -in file -out file.enc
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
salt=6A80B2A3B4CFE048
key=637E17094DF7892A7AFC14957EAA13991DFFD3273A2459EDA613F3AD8A406C38
iv =6AC7CE5C9AADC6C46C633BF5124DAFBF

$ openssl aes-256-cbc -a -d -p -in file.enc -out file.dec
enter aes-256-cbc decryption password:
salt=6A80B2A3B4CFE048
key=6220AF2E25CB0B5D9994A0A1B05503D82AC5B0B4C9015E241CACBF8BF62DAC77
iv =2DC04EF29AA57478EBE606DF87277EA6
bad decrypt
140557073118872:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:592:

मुझे 2 संस्करणों के साथ नमक के आधार पर कुंजी और IV के एक अलग व्युत्पत्ति पर संदेह है।

यदि आप इस डिक्रिप्शन त्रुटि से छुटकारा चाहते हैं, तो आप -salt विकल्प को हटा सकते हैं और अपने -iv कमांड में कुंजी और -iv लिए विकल्प -K उपयोग कर सकते हैं।


डिफ़ॉल्ट पाचन को MD5 से SHA256 में बदलकर Openssl 1.1 कर दिया गया था

-Md md5 का उपयोग करके देखें

[email protected]:~$ echo "it-works!" > file.txt
[email protected]:~$ LD_LIBRARY_PATH=~/openssl-1.1.0/ openssl-1.1.0/apps/openssl aes-256-cbc -a -salt -in ~/file.txt -out ~/file.txt.enc -md md5
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
[email protected]:~$ LD_LIBRARY_PATH=~/openssl-1.0.1f/ openssl-1.0.1f/apps/openssl aes-256-cbc -a -in ~/file.txt.enc -d
enter aes-256-cbc decryption password:
it-works!

बदसूरत विवरण:

प्रवेश किए गए पासवर्ड का उपयोग ऐस (या अन्य एन्क्रिप्शन) द्वारा नहीं किया जाता है, लेकिन कमांड इसके बारे में महत्वपूर्ण रूप से बताता है। मुख्य व्युत्पत्ति मेसेज डाइजेस्ट का उपयोग करती है जो कि ओपनएसएल 1.1 में बदली गई थी SHA256 का उपयोग एमडी 5 डिफॉल्ट डाइजेस्ट के रूप में नहीं करें।

यदि आप इसे सरल पासवर्ड रखना चाहते हैं, और कुंजीयन मार्शल (-K, -iv) के साथ खिलवाड़ करना शुरू नहीं करते हैं, तो केवल वही डाइजेस्ट को पचाने के लिए मजबूर करें


यह समस्या OpenSSL 1.1 और LibreSSL के बीच भी हो सकती है। इस मामले में, और अन्य मामलों में जहां अधिक सुरक्षित संदेश डाइजेस्ट उपलब्ध हैं, आपको -md md5 5 एल्गोरिदम की व्यापक कमजोरियों के बाद से नई फ़ाइलों को एन्क्रिप्ट करने के लिए -md md5 का उपयोग करने से बचना चाहिए।

आपको इसके बजाय -md sha256 या अन्य सभी संस्करणों द्वारा समर्थित कुछ और अधिक सुरक्षित संदेश डाइजेस्ट का उपयोग करना चाहिए। -md md5 उपयोग केवल पुरानी फ़ाइलों को डीक्रिप्ट करने के लिए किया जाना चाहिए, और उन्हें आदर्श रूप से sha256 का उपयोग करके पुनः एन्क्रिप्ट किया जाना चाहिए। यह भी OpenSSL सामान्य प्रश्न में उल्लिखित है:

एक संदेश डाइजेस्ट का उपयोग मानव-दर्ज पासफ़्रेज़ से एन्क्रिप्ट / डिक्रिप्ट कुंजी बनाने के लिए किया जाता है। OpenSSL 1.1.0 में हम MD5 से SHA-256 में बदल गए। हमने इसे अब असुरक्षित और टूटे हुए एमडी 5 एल्गोरिदम से दूर जाने के लिए एक समग्र परिवर्तन के हिस्से के रूप में किया। यदि आपके पास पुरानी फाइलें हैं, तो उन्हें डिक्रिप्ट करने के लिए "-md md5" ध्वज का उपयोग करें।

यह जाँचने के लिए कि आपके द्वारा चलाए जा रहे विभिन्न संस्करणों द्वारा कौन से संदेश डाइजेस्ट समर्थित हैं, openssl help चलाएँ openssl help :

लिब्रेएसएस 2.2.7 (macOS 10.13 हाई सिएरा के साथ शामिल):

$ openssl help
…
Message Digest commands (see the `dgst' command for more details)
gost-mac          md4               md5               md_gost94
ripemd160         sha               sha1              sha224
sha256            sha384            sha512            streebog256
streebog512       whirlpool
…

OpenSSL 1.1f:

$ openssl help
…
Message Digest commands (see the `dgst' command for more details)
blake2b512        blake2s256        gost              md4
md5               rmd160            sha1              sha224
sha256            sha384            sha512
…




libssl