web-dev-qa-db-ja.com

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

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

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

9
David M. Syzdek

blog で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

8
David M. Syzdek

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

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

これにニックを入れた question Unix/Linux SE。

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

4
Lucas Kauffman

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

1
someone

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

0
Ram