Finalmente encontré cómo convertir una clave pública OpenSSH a formato PEM en un blog y pude cifrar y descifrar con éxito una cadena usando mi clave privada / pública.
He esbozado los pasos que usé para realizar el cifrado y descifrado.
Para cifrar una cadena:
# 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
Para descifrar una cadena (del archivo):
openssl enc -base64 -d -in string.txt \
| openssl rsautl -inkey ~/.ssh/id_rsa -decrypt
Como mi objetivo es enviar la contraseña por correo electrónico, he escrito un script extremadamente básico para automatizar un poco las cosas:
#!/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
Luego puedo enviar el resultado del script en un correo electrónico para que el usuario lo descifre.
El script completo está disponible en Github: https://gist.github.com/3078682
En general, sí, esto es posible. Todo lo que SHH hace es generar un Módulo N y dos claves e (la clave pública) yd (la clave privada). El mecanismo empleado suele ser RSA o DSA y las claves generadas se pueden utilizar para el cifrado. Todo lo que tendría que hacer es extraerlos del blob base64 que es la clave pública y luego usar un programa adecuado para cifrar los datos con estas claves. Puede interesarle Monkeysphere, que puede transferir entre el formato de clave ssh y las claves gnupg. Esto debería permitirle también utilizar las claves para el cifrado.
fuente
Normalmente uno no hace 'encriptación masiva' con claves asimétricas. Pero eso no importa, ya que no deberías lidiar con ese nivel de detalles. Utilice un kit de herramientas (openssl es un buen http://www.openssl.org/docs/apps/openssl.html ) para hacer el trabajo por usted. Lo que desea hacer es crear un mensaje cifrado que contenga la nueva contraseña temporal y especificar el par de claves del usuario como destinatario. Ejemplos en abundancia en esta página: http://www.openssl.org/docs/apps/smime.html
fuente