सार्वजनिक ssh कुंजी का उपयोग करके अस्थायी पासवर्ड एन्क्रिप्ट करें


9

मैं एक आभासी कार्यालय का प्रबंधन करता हूं और हमारे कर्मचारी प्रमाणीकरण के लिए SSH कुंजी और पासवर्ड दोनों का उपयोग करते हैं। यदि हमारा कोई कर्मचारी अपना पासवर्ड भूल जाता है, तो क्या उसकी सार्वजनिक RSA ssh कुंजी का उपयोग करके एक अस्थायी पासवर्ड एन्क्रिप्ट करने का कोई तरीका है ताकि मैं उसे ई-मेल के माध्यम से भेज सकूं?

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

जवाबों:


8

मैंने आखिरकार पाया कि एक ब्लॉग पर एक ओपनएसएसएच सार्वजनिक कुंजी को पीईएम प्रारूप में कैसे परिवर्तित किया जाए और मेरी निजी / सार्वजनिक कुंजी का उपयोग करके एक स्ट्रिंग को सफलतापूर्वक एन्क्रिप्ट और डिक्रिप्ट करने में सक्षम था।

मैंने एन्क्रिप्शन और डिक्रिप्शन करने के लिए उपयोग किए गए चरणों को रेखांकित किया है।

स्ट्रिंग को एन्क्रिप्ट करने के लिए:

# convert public key to PEM format
ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PKCS8  > ~/.ssh/id_rsa.pub.pem

# encrypt string using public key
echo "String to Encrypt" \
   | openssl rsautl -pubin -inkey ~/.ssh/id_rsa.pub.pem -encrypt -pkcs \
   | openssl enc -base64 \
   > string.txt

एक स्ट्रिंग को डिक्रिप्ट करने के लिए (फाइल से):

openssl enc -base64 -d -in string.txt \
    | openssl rsautl -inkey ~/.ssh/id_rsa -decrypt

चूंकि मेरा लक्ष्य पासवर्ड को ई-मेल करना है, इसलिए मैंने चीजों को थोड़ा स्वचालित करने के लिए एक अत्यंत बुनियादी स्क्रिप्ट लिखी है:

#!/bin/sh
if test "x${1}" == "x";then
   echo "Usage: ${0} <username>"
   exit 1
fi
SSHUSER=${1}
printf "Enter Password: "
read PASS1
echo ""
echo ""
ssh-keygen -f /home/${SSHUSER}/.ssh/id_rsa.pub -e -m PKCS8 \
    > /tmp/ssh-pubkey-${SSHUSER}.pem
echo 'cat << EOF |openssl enc -base64 -d |openssl rsautl -inkey ~/.ssh/id_rsa -decrypt'
echo "New Password: ${PASS1}" \
   | openssl rsautl -pubin -inkey /tmp/ssh-pubkey-${SSHUSER}.pem -encrypt -pkcs \
   | openssl enc -base64
echo "EOF"
echo ""
rm -f /tmp/ssh-pubkey-${SSHUSER}.pem

फिर मैं उपयोगकर्ता को डिक्रिप्ट करने के लिए ई-मेल में स्क्रिप्ट का आउटपुट भेज सकता हूं।

पूरी स्क्रिप्ट जीथब: https://gist.github.com/3078682 पर उपलब्ध है


4

यह संभव है क्योंकि यह सिर्फ एक आरएसए कुंजी है। खुलता है का उपयोग करें:

openssl rsautl -encrypt -inkey alice.pub >message.encrypted

मैंने इस सवाल का यूनिक्स / लिनक्स एसई पर ध्यान दिया।

मुझे कहना होगा कि PGP इसके लिए अधिक उपयुक्त है।


1
समस्या यह है कि SSH सार्वजनिक कुंजी एक प्रारूप में नहीं है जिसे OpenSSL पहचानता है। मुझे यह जानने की ज़रूरत थी कि किसी ऐसी चीज़ की कुंजी कैसे परिवर्तित की जाए जो तब OpenSSL जैसे टूलकिट द्वारा उपयोग की जा सकती है।
डेविड एम। सिज़देक

1

सामान्य तौर पर, हाँ यह संभव है। सभी SHH एक मापांक N और दो कुंजी e (सार्वजनिक कुंजी) और d (निजी एक) उत्पन्न करते हैं। नियोजित तंत्र आमतौर पर आरएसए या डीएसए है और उत्पन्न कीज़ को एन्क्रिप्शन के लिए उपयोग किया जा सकता है। आपको बस इतना करना है कि उन्हें आधार 64 ब्लॉब से हटा दें जो कि सार्वजनिक कुंजी है और फिर इन कुंजियों के साथ डेटा एन्क्रिप्ट करने के लिए एक उपयुक्त प्रोग्राम का उपयोग करें। आपको मंकीसेफ में रुचि हो सकती है जो ssh कुंजी प्रारूप और gnupg कुंजियों के बीच स्थानांतरित कर सकता है। यह आपको एन्क्रिप्शन के लिए कुंजियों का उपयोग करने की अनुमति भी देना चाहिए।


0

आम तौर पर कोई एसिमेट्रिक कीज़ के साथ 'बल्क एनक्रिप्शन' नहीं करता है। लेकिन इससे कोई फर्क नहीं पड़ता क्योंकि आपको उस स्तर के विवरण के साथ व्यवहार नहीं करना चाहिए। आपके लिए काम करने के लिए टूलकिट का उपयोग करें (खुलता है http://www.openssl.org/docs/apps/openssl.html )। आप जो करना चाहते हैं वह नया अस्थायी पासवर्ड युक्त एक एन्क्रिप्टेड संदेश बना सकता है और प्राप्तकर्ता के रूप में उपयोगकर्ता की कुंजी-जोड़ी निर्दिष्ट कर सकता है। इस पृष्ठ पर उदाहरण के लिए बहुतायत: http://www.openssl.org/docs/apps/smime.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.