Enkripsi kata sandi sementara menggunakan kunci ssh publik

9

Saya mengelola kantor virtual dan staf kami menggunakan kunci SSH dan kata sandi untuk otentikasi. Jika salah satu staf kami lupa kata sandi, apakah ada cara untuk mengenkripsi kata sandi sementara menggunakan kunci ssh RSA publiknya sehingga saya dapat mengirimkannya kepadanya melalui email?

Saya telah melihat pertanyaan lain yang terkait dengan yang satu ini, namun "jawaban" umumnya merekomendasikan untuk tidak menggunakan kunci SSH publik / pribadi untuk melakukan enkripsi / dekripsi umum dan tidak benar-benar menyatakan jika ini mungkin. Saya ingin tahu apakah memang mungkin dan apa langkah-langkah untuk mengenkripsi dan kemudian mendekripsi kata sandi.

David M. Syzdek
sumber

Jawaban:

8

Saya akhirnya menemukan cara mengubah kunci publik OpenSSH ke format PEM di blog dan berhasil mengenkripsi dan mendekripsi string menggunakan kunci privat / publik saya.

Saya telah menguraikan langkah-langkah yang saya gunakan untuk melakukan enkripsi dan dekripsi.

Untuk mengenkripsi string:

# 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

Untuk mendekripsi string (dari file):

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

Karena tujuan saya adalah mengirim kata sandi melalui email, saya telah menulis sebuah skrip yang sangat mendasar untuk mengotomatisasi beberapa hal:

#!/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

Saya kemudian dapat mengirim output dari skrip dalam email untuk pengguna untuk mendekripsi.

Skrip lengkap tersedia di Github: https://gist.github.com/3078682

David M. Syzdek
sumber
4

Itu mungkin karena itu hanya kunci RSA. Gunakan openssl:

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

Saya menandai pertanyaan ini di Unix / Linux SE.

Saya harus mengatakan bahwa PGP lebih cocok untuk ini.

Lucas Kauffman
sumber
1
Masalahnya adalah kunci publik SSH tidak dalam format yang diakui OpenSSL. Saya perlu tahu cara mengonversi kunci ke sesuatu yang kemudian dapat digunakan oleh toolkit seperti OpenSSL.
David M. Syzdek
1

Secara umum, ya ini mungkin. Yang SHH lakukan hanyalah menghasilkan Modulus N dan dua kunci e (kunci publik) dan d (kunci pribadi). Mekanisme yang digunakan biasanya RSA atau DSA dan Kunci yang dihasilkan dapat digunakan untuk enkripsi. Yang harus Anda lakukan adalah mengekstraknya dari blok base64 yang merupakan kunci publik dan kemudian menggunakan program yang sesuai untuk mengenkripsi data dengan kunci-kunci ini. Anda mungkin tertarik pada Monkeysphere yang dapat mentransfer antara format kunci ssh dan kunci gnupg. Ini seharusnya memungkinkan Anda juga menggunakan kunci untuk enkripsi.

some one
sumber
0

Biasanya seseorang tidak melakukan 'enkripsi massal' dengan kunci asimetris. Tapi itu tidak masalah karena Anda tidak boleh berurusan dengan tingkat detail seperti itu. Gunakan toolkit (openssl adalah http://www.openssl.org/docs/apps/openssl.html ) yang bagus untuk melakukan pekerjaan untuk Anda. Yang ingin Anda lakukan adalah membuat pesan terenkripsi yang berisi kata sandi sementara yang baru dan menentukan pasangan kunci pengguna sebagai penerima. Contoh berlimpah di halaman ini: http://www.openssl.org/docs/apps/smime.html

Ram
sumber