公開SSHキーを使用して一時パスワードを暗号化する


9

私は仮想オフィスを管理しており、スタッフは認証にSSHキーとパスワードの両方を使用しています。スタッフの1人がパスワードを忘れた場合、RSAの公開sshキーを使用して一時的なパスワードを暗号化し、電子メールで送信できるようにする方法はありますか?

これに関連する他の質問を見たことがありますが、「回答」では一般に公開/秘密SSHキーを使用して一般的な暗号化/復号化を実行することは推奨されておらず、可能かどうかは実際には述べていません。それが本当に可能かどうか、およびパスワードを暗号化してから復号化する手順は何ですか?

回答:


8

私はついにブログで OpenSSH公開鍵をPEM形式に変換する方法を見つけ、秘密/公開鍵を使用して文字列を正常に暗号化および復号化することができました。

暗号化と復号化の実行に使用した手順の概要を説明しました。

文字列を暗号化するには:

# 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

その後、ユーザーが復号化できるように、スクリプトの出力を電子メールで送信できます。

完全なスクリプトはGithubで入手できます:https : //gist.github.com/3078682


4

これは単なるRSAキーなので可能です。opensslを使用します。

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

Unix / Linux SE でこの質問にニックを入れました。

これにはPGPの方が適していると言わざるを得ません。


1
問題は、SSH公開鍵がOpenSSLが認識できる形式ではないことです。キーをOpenSSLなどのツールキットで使用できるものに変換する方法を知る必要がありました。
デビッドM.シズデク2012

1

一般的には、これは可能です。SHHが行うことはすべて、モジュラスNと2つの鍵e(公開鍵)とd(秘密鍵)を生成することです。使用されるメカニズムは通常RSAまたはDSAであり、生成されたキーは暗号化に使用できます。必要なことは、公開鍵であるbase64 blobからそれらを抽出し、適切なプログラムを使用してこれらの鍵でデータを暗号化することだけです。sshキー形式とgnupgキーの間で転送できるMonkeysphereに興味があるかもしれません。これにより、暗号化にも鍵を使用できるようになります。


0

通常、非対称鍵を使用した「バルク暗号化」は行いません。しかし、そのレベルの詳細を扱うべきではないので、それは問題ではありません。ツールキット(opensslはhttp://www.openssl.org/docs/apps/openssl.html)を使用して作業を行います。新しい一時的なパスワードを含む暗号化されたメッセージを作成し、ユーザーのキーペアを受信者として指定します。このページの豊富な例:http ://www.openssl.org/docs/apps/smime.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.