किसी पाठ को एन्क्रिप्ट करने के लिए ssh-rsa सार्वजनिक कुंजी का उपयोग कैसे करें?


55

तो, परिदृश्य यह है: गिवेन आइ एम बॉब, मैं एलिस के लिए कुछ संदेश एन्क्रिप्ट करना चाहता हूं। मेरे पास एकमात्र सार्वजनिक कुंजी उसकी ssh-rsaid_rsa.pub है:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyb + qaZLwgC7KAQJzYikf3XtOWuhlMXVv2mbTKa5dp0sHPRd2RaYnH8ZRkt7V8bjqct1IHGCuxI8xyoEp4at3FHe6j9RfWiarc1ldLUCmTtryI0GGpRs6Zpvqdtpcq / 1NCIYtUQAvsImyEFCtqmB2suDo1ZSllZQ0x9TCKHdCANYIOeaniuFzR57POgE3vxk / r6PO24oy8BIWqxvi29r0n1LUigVBJ7CmMHuzb4 / + i1v6PxV1Lqnj6osPP9GpXpsh8kLUCby / KcmcryWNdSP0esyCdDxkA5hlIuk8qL1vzsyPluUQuc0BEHu6nuw8WQlCF1mFFxcpJL + MhWEr01WIIw == sikachu@Sikachus-Notebook.local

तो, क्या इस सार्वजनिक कुंजी का उपयोग करके स्ट्रिंग को एन्क्रिप्ट करने का एक तरीका है ताकि वह संदेश को डिक्रिप्ट करने के लिए अपनी निजी कुंजी का उपयोग id_rsa(इससे उत्पन्न ssh-keygen) कर सके?

(मुझे पता है कि यदि आप .pemकुंजी जोड़ी फ़ाइल का उपयोग कर रहे हैं तो यह तुरंत संभव है । यदि आप मुझे यह दिखा सकते हैं कि यह उस प्रारूप में कैसे परिवर्तित होता है जो opensslसमर्थन करता है, तो यह बहुत अच्छा होगा!)

धन्यवाद!


5
आपको और ऐलिस को वास्तव में gpg ... gnupg.org ; D
tink

4
हाहाहा, वाकई! हालाँकि, मेरे पास जो परिदृश्य है वह यह है कि मेरे पास उनकी ssh-rsaसार्वजनिक कुंजी पहले से मौजूद है, और मैं जटिलता की एक और परत जोड़ना नहीं चाहता (जैसे, प्राप्तकर्ता को gpg स्थापित करने के लिए
कहना

जवाबों:


71

अपनी ssh सार्वजनिक कुंजी को PEM प्रारूप में परिवर्तित करना संभव है (कि 'Opensl rsautl' इसे पढ़ सकता है):

उदाहरण:

ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PKCS8 > id_rsa.pem.pub

'MyMessage.txt' मान लें कि आपका संदेश सार्वजनिक-एन्क्रिप्टेड होना चाहिए।

फिर बस अपने संदेश को Opensl rsautl और अपनी परिवर्तित PEM सार्वजनिक-कुंजी के साथ एन्क्रिप्ट करें जैसा कि आप सामान्य रूप से करते हैं:

openssl rsautl -encrypt -pubin -inkey id_rsa.pem.pub -ssl -in myMessage.txt -out myEncryptedMessage.txt

परिणाम 'myEncryptedMessage.txt' में आपका एन्क्रिप्टेड संदेश है

ऐलिस की निजी कुंजी के साथ डिक्रिप्ट करने के लिए अपने काम का परीक्षण करने के लिए:

openssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in myEncryptedMessage.txt -out myDecryptedMessage.txt

5
मैंने इसे एक स्क्रिप्ट में लपेटा है जो उपयोगकर्ताओं को GitHub से सार्वजनिक कुंजी खींचती है। github.com/twe4ked/catacomb
twe4ked

यह मेरे लिए काम नहीं करता है। मेरे ssh-keygenपास कोई -mविकल्प नहीं है । (मैं इसके संस्करण के लिए ssh-keygen पूछने के तरीके का पता नहीं लगा सकता।) कार्यों के -mसाथ प्रतिस्थापित -tकरता opensslहूं , लेकिन फिर मुझे "सार्वजनिक कुंजी लोड करने में असमर्थ" बताता है। Stackoverflow.com/questions/18285294/… देखें ।
जेसन ग्रॉस

1
एक ही मुद्दा जेसन के रूप में MaxOS Mavericks पर है। Keygen सक्षम कुंजी पीढ़ी के लिए -t के साथ -m प्रतिस्थापित।
रॉबर्ट क्रिश्चियन

8
ध्यान दें कि यह केवल तभी काम करता है जब फ़ाइल काफी छोटी हो। जैसे 200 बाइट्स। देखें stackoverflow.com/questions/7143514/...
h__

1
@Hyh ने क्या कहा, यह केवल तभी काम करता है जब इनपुट फ़ाइल छोटी होती है (पंक्ति कहीं 254 बाइट्स की होती है, अन्यथा यह "rsa रूटीन देगी: RSA_padding_add_SSLv23: कुंजी आकार में बहुत बड़ा डेटा: /SourceCache/OpenSSL098/OpenSSL098-52.20-। 2 / src / क्रिप्टो / rsa / rsa_ssl.c: 73 "त्रुटि।
Devy

1

Ssh-vault को एक कोशिश दें कि वह ssh-rsa सार्वजनिक कुंजी का उपयोग "एन्क्रिप्ट करने के लिए एक तिजोरी" और ssh-rsa निजी कुंजी को "वॉल्ट की सामग्री को देखने" को डिक्रिप्ट करने के लिए करे।


-3

क्यों नहीं यह सुपर स्पष्ट तरीका है कि अपने स्वयं के क्रिप्टो रोलिंग की आवश्यकता नहीं है।

ऐलिस sftps को alice@bobserver.com जो केवल अलाइक के लिए सार्वजनिक कुंजी प्रमाणीकरण की अनुमति देने के लिए सेटअप है। Ssh के गुण अच्छी तरह से यह सुनिश्चित करते हैं कि केवल ऐलिस ही शमन कर सकता है। मध्य हमले में भी एक आदमी विफल रहता है (आप ssh1 को अक्षम करने और सही सेटिंग्स पर जोर देते हैं) डीएच का उपयोग करने वाला प्रारंभिक संचार एलिस और बॉब दोनों के लिए ज्ञात मूल्य बनाता है, लेकिन बीच में किसी भी आदमी के लिए नहीं और यह प्रमाणित करने के लिए इस्तेमाल किया जा सकता है कोई भी उत्तर या MITM हमले को संप्रेषण की सामग्री नहीं देख सकता है।

तो अपने बॉक्स में alice sftp रखें और फ़ाइल डाउनलोड करें।


9
कैसे अपने स्वयं के क्रिप्टो रोलिंग को ओपनसेल का उपयोग कर रहा है?
cmc

एक उदाहरण के रूप में, 1024 वर्ण स्ट्रिंग को एन्क्रिप्ट करने के लिए RSA का उपयोग संदेश आकार के कारण विफल हो जाएगा। इस समस्या को दूर करने के लिए कार्यान्वयनकर्ता अनिश्चित स्थिति में है, खासकर यदि संदेश दोहराए जाते हैं। यह RSA का उपयोग करने के लिए एक नई सममितीय सिफर कुंजी और आरंभीकरण वेक्टर को एन्क्रिप्ट करने के लिए सुरक्षित है जो दोहराने की संभावना नहीं होगी, इसलिए कभी भी भेजे गए संदेश के लिए अद्वितीय सिफर पाठ उत्पन्न करें, और सममित सिफर गति प्राप्त करें, और सिफर और सादे पाठ की मात्रा कम करें। RSA कुंजी के साथ हमला करने के लिए। आशा है कि समझ में आता है। :)
सैम

इस विधि के लिए बॉब को ऐलिस पर भरोसा करने या bobserver.com को बंद करने की आवश्यकता है ताकि ऐलिस कुछ भी दुर्भावनापूर्ण न कर सके।
mwfearnley

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

मुझे लगता है कि उपरोक्त में वास्तव में किसी व्यक्ति को ईमेल को इंटरसेप्ट करने के लिए कमजोर है, जिसमें आप एक जैसे समझाते हैं कि वह इस असामान्य संदेश को कैसे डिक्रिप्ट कर सकता है और उसे आज्ञाओं का एक क्रम दे रहा है, जिसके बजाय चार्ली के MITM संदेश को सुरक्षित रूप से डिक्रिप्ट करें (canl कमांड खोलना जादू की तरह है) ज्यादातर के लिए incantations) जबकि सर्वर विचार मानक आदेशों के पक्ष में यह सब से बचा जाता है, कई परिचित हैं और अगर बॉब इसे कंप्यूटर से चलाता है तो वह उस पर एन्क्रिप्ट कर रहा है, वैसे भी इस पर भरोसा कर रहा है। स्पष्ट रूप से सबसे अच्छा जवाब खतरे के मॉडल पर निर्भर करता है लेकिन q संदर्भ से यह संभावना उन्हें बेहतर सेवा देगी।
पीटर गेर्ड्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.