RSA & OpenSSL के साथ संदेशों / पाठ को कैसे एन्क्रिप्ट करें?


29

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

संदेश है:

हाय ऐलिस! कृपया रात के खाने के लिए malacpörkölt लाओ!

जवाबों:


36

में openssl पुस्तिका ( opensslआदमी पृष्ठ), के लिए खोज RSA, और आप देखेंगे RSA एन्क्रिप्शन के लिए आदेश है कि rsautl। फिर इसके सिंटैक्स को देखने के लिए rsautlमैन पेज पढ़ें ।

echo 'Hi Alice! Please bring malacpörkölt for dinner!' |
openssl rsautl -encrypt -pubin -inkey alice.pub >message.encrypted

डिफ़ॉल्ट पैडिंग योजना मूल PKCS # 1 v1.5 है (अभी भी कई रिसोटॉल में उपयोग की जाती है); Opensl OAEP (अब अनुशंसित) और कच्चे एन्क्रिप्शन (केवल विशेष परिस्थितियों में उपयोगी) का समर्थन करता है।

ध्यान दें कि सीधे खुलने का उपयोग करना ज्यादातर एक व्यायाम है। व्यवहार में, आप gpg (जो RSA का उपयोग करता है, लेकिन संदेश को सीधे एन्क्रिप्ट करने के लिए नहीं) जैसे उपकरण का उपयोग करेगा।


क्या समस्या है openssl?
ब्राचली

2
@Bratchley opensslकमांड लाइन टूल विभिन्न कमांड का मिश्रण है। कुछ, ज्यादातर लोग जो प्रमाण पत्र में हेरफेर करते हैं, उपयोगी हो सकते हैं, लेकिन सही ढंग से उपयोग करने के लिए कठिन हैं क्योंकि उनके सिंटैक्स और पैरामीटर quirky हैं। कुछ, जैसे rsautl, ठीक हैं, लेकिन उपयोगी कार्यक्षमता प्रदान नहीं करते हैं, वे सिर्फ कच्ची क्रिप्टोग्राफिक प्राइमेटिव्स को उजागर करते हैं - उदाहरण के लिए आरएसए एन्क्रिप्शन बहुत ही हाइब्रिड एन्क्रिप्शन के लिए एक सममित कुंजी को एन्क्रिप्ट करने के लिए उपयोग किया जाता है। कुछ, जैसे enc, सुरक्षित रूप से उपयोग करने के लिए बहुत कठिन हैं और अगर वे मौजूद नहीं थे तो दुनिया बेहतर होगी।
गिल्स एसओ- बुराई को रोकें

बहुत बढ़िया जवाब। मैंने इस फ्लैग-शोप के साथ पैडिंग को डिक्रिप्ट किया, फिर डिक्रिप्ट पर, समान निर्दिष्ट करें ... ओपनस्स्ल rsautl -decrypt -in message.encrypted -inkey private_key.pem -oaep
rustyMagnet

24

सबसे पहले, यदि आप केवल अच्छा एन्क्रिप्शन चाहते हैं, तो आपको GnuPG को देखना चाहिए । लेकिन अगर आपका प्रयोग और बस सीखना है कि यह कैसे काम करता है, तो आपको यह समझने की जरूरत है कि आरएसए क्या है। RSA को किसी भी मनमाने स्ट्रिंग को एन्क्रिप्ट करने के लिए नहीं बनाया गया है, यह एक एल्गोरिदम है जो पूर्णांक को एन्क्रिप्ट करता है। विशेष रूप से, 0 से n-1 तक पूर्णांक जहां n सार्वजनिक कुंजी से मापांक मान है। जब आप RSA कुंजी के बारे में बात करते हैं जो कि 1024 बिट्स होती है, तो इसका अर्थ है कि मापांक को बाइनरी में स्टोर करने में 1024 बिट्स लगते हैं। यह एक कारण है, आरएसए का उपयोग डेस या एईएस जैसे सममित कुंजी सिफर के साथ संयोजन में किया जाता है। आप AES के लिए यादृच्छिक 256 बिट कुंजी उत्पन्न कर सकते हैं और 1024 बिट RSA सार्वजनिक कुंजी के साथ उस कुंजी को एन्क्रिप्ट कर सकते हैं। फिर जो भी निजी कुंजी तक पहुंचता है वह सममित कुंजी को निकाल सकता है और एईएस के साथ संदेश को डीकोड कर सकता है। RSA के लिए पूर्ण मानक PKCS # 1 कहलाता है

इसके अलावा, डेस और एईएस ब्लॉक सिफर हैं। वे केवल एक विशिष्ट आकार के ब्लॉक में डेटा एन्क्रिप्ट करते हैं। DES 64-बिट ब्लॉक का उपयोग करता है और AES 128-बिट ब्लॉक का उपयोग करता है। ब्लॉक से अधिक एन्क्रिप्ट करने के लिए, आपको सीबीसी या सीटीआर जैसे ऑपरेशन के एक मोड का उपयोग करना होगा । ये मोड निर्दिष्ट करते हैं कि ब्लॉक मोड सिफर का उपयोग करके बिट्स की एक धारा को कैसे एन्क्रिप्ट किया जाए।

अंत में, आपके द्वारा प्राप्त किए जा रहे डेटा को सत्यापित करना महत्वपूर्ण है। हालांकि एक हमलावर पारगमन में डेटा को पढ़ने में सक्षम नहीं हो सकता है, वह बिना किसी अखंडता या प्रामाणिकता के पता लगाने के लिए बिट्स को फ्लिप करने में सक्षम हो सकता है यदि डेटा स्ट्रीम में लागू नहीं किया गया है। एक हमलावर आसानी से अनुमान लगा सकता है कि 443 को पोर्ट करने के लिए एक एसएसएल कनेक्शन संभवतः एक वेबपेज अनुरोध है, जिसके साथ GET /वह शुरू कर सकता है और वह PUT /बाकी एन्क्रिप्शन के साथ हस्तक्षेप किए बिना इसे थोड़ा बदल सकता है। अखंडता के लिए एक सरल दृष्टिकोण एमडी 5 या एसएचए -1 राशि को अंत में जोड़ना है, लेकिन यह केवल डेटा अखंडता प्रदान करता है, प्रामाणिकता नहीं। डेटा स्ट्रीम की पूरी जानकारी रखने वाला कोई भी व्यक्ति एक सही योग उत्पन्न कर सकता है, एचएमएसी जैसे की-हैश का उपयोग करने के लिए अधिक सुरक्षित तरीका है जिससे अखंडता के अतिरिक्त डेटा प्रामाणिकता प्रदान करने के लिए एक गुप्त कुंजी के ज्ञान की आवश्यकता होती है।


2
यह वास्तव में अच्छा है
mko

5

नीचे, ध्यान दें कि आप जो भी एल्गोरिथ्म चाहते हैं, उसे निर्दिष्ट कर सकते हैं, चाहे वह सूचीबद्ध हो या आरएसए (हालांकि मुझे ओपनएसएसएल द्वारा आरएसए के लिए इस्तेमाल किया गया सटीक नाम नहीं पता है)

अपने सिस्टम पर समर्थित सिफर की एक सूची प्राप्त करने के लिए "ओफ़्स्सेल एनएच-एलएलपी" का उपयोग करें, और तर्क के रूप में इसे पास करें। उदाहरण के लिए, "-a2525"

मेरे सिस्टम पर ध्यान दें मेरे पास मेरे विकल्पों में आरएसए नहीं है - कम से कम उस नाम से।


मैं S / MIME संदेश को कैसे एन्क्रिप्ट करूं?

मान लीजिए कि कोई व्यक्ति आपको अपना सार्वजनिक प्रमाणपत्र भेजता है और पूछता है कि आप उसे कुछ संदेश एन्क्रिप्ट करते हैं। आपने उसके प्रमाणपत्र को उसके रूप में सहेज लिया है। आपने अपना उत्तर my-message.txt के रूप में सहेज लिया है।

डिफ़ॉल्ट प्राप्त करने के लिए - हालांकि काफी कमजोर- RC2-40 एन्क्रिप्शन, आप सिर्फ ओप्सनल को बताते हैं कि संदेश और प्रमाणपत्र कहां स्थित हैं।

opensl smime her-cert.pem -encrypt -in my-message.txt

यदि आपको पूरा यकीन है कि आपके दूरस्थ संवाददाता के पास एक मजबूत एसएसएल टूलकिट है, तो आप ट्रिपल डेस जैसे मजबूत एन्क्रिप्शन एल्गोरिथ्म को निर्दिष्ट कर सकते हैं:

opensl smime her-cert.pem -encrypt -des3 -in my-message.txt

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

openssl smime her-cert.pem \
   -encrypt \
   -des3 \
   -in my-message.txt \
   -from 'Your Fullname <you@youraddress.com>' \
   -to 'Her Fullname <her@heraddress.com>' \
   -subject 'My encrypted reply' |\
 sendmail her@heraddress.com

मैं S / MIME संदेश पर कैसे हस्ताक्षर करूं?

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

 openssl smime \
   -sign \
   -signer /path/to/your-cert.pem \
   -in my-message.txt \
   -from 'Your Fullname <you@youraddress.com>' \
   -to 'Her Fullname <her@heraddress.com>' \
   -subject 'My signed reply' |\
 sendmail her@heraddress.com

( http://www.madboa.com/geek/openssl/ से )

(एर ... उन सभी backslashes - उन माना जाता है कि बचने के लिए newlines है। यकीन नहीं हो रहा है क्या चल रहा है, क्योंकि यह यहाँ मेरे संपादित बॉक्स में ठीक प्रदर्शित करता है!


1
आपको नई रेखाओं को संरक्षित करने के लिए प्रत्येक पंक्ति के शुरू में चार स्थान रखने की आवश्यकता है। मैंने आपको दिखाने के लिए पहला ब्लॉक बदला। क्या आप दूसरा ठीक कर सकते हैं?
मिकेल

1
आपको RSA नहीं मिला openssl encक्योंकि encयह केवल सममित एन्क्रिप्शन के लिए है। हाँ, खुलता है के विकल्प बहुत अच्छी तरह से व्यवस्थित नहीं हैं। असममित एल्गोरिदम की अपनी आज्ञाएँ होती हैं: rsa/ / dsa/ dhकुंजी को हेरफेर करने के लिए, rsautl/ dsautlएन्क्रिप्ट करने के लिए / डिक्रिप्ट / सत्यापित / साइन करने के लिए, और genrsa/ gendsa/ gendhकुंजी बनाने के लिए।
गिल्स एसओ- बुराई को रोकना '
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.