Criptografar senha temporária usando a chave pública ssh

9

Eu gerencio um escritório virtual e nossa equipe usa chaves e senhas SSH para autenticação. Se um de nossos funcionários esquecer sua senha, existe uma maneira de criptografar uma senha temporária usando sua chave pública RSA ssh para que eu possa enviá-la por e-mail?

Eu já vi outras perguntas relacionadas a essa, no entanto, as "respostas" geralmente não recomendam o uso de chaves SSH públicas / privadas para executar criptografia / descriptografia geral e, na verdade, não indicam se isso é possível. Gostaria de saber se é realmente possível e quais são as etapas para criptografar e descriptografar a senha.

David M. Syzdek
fonte

Respostas:

8

Finalmente, descobri como converter uma chave pública OpenSSH para o formato PEM em um blog e consegui criptografar e descriptografar com êxito uma string usando minha chave pública / privada.

Descrevi as etapas que usei para executar a criptografia e descriptografia.

Para criptografar uma sequência:

# 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 descriptografar uma string (do arquivo):

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

Como meu objetivo é enviar a senha por e-mail, escrevi um script extremamente básico para automatizar um pouco as coisas:

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

Posso enviar a saída do script em um email para o usuário descriptografar.

O script completo está disponível no Github: https://gist.github.com/3078682

David M. Syzdek
fonte
4

É possível, pois é apenas uma chave RSA. Use o openssl:

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

Marquei essa questão no Unix / Linux SE.

Devo dizer que o PGP é mais adequado para isso.

Lucas Kauffman
fonte
1
O problema é que a chave pública SSH não está em um formato que o OpenSSL reconheça. Eu precisava saber como converter a chave em algo que poderia ser usado por um kit de ferramentas como o OpenSSL.
David M. Syzdek
1

Em geral, sim, isso é possível. Tudo que o SHH faz é gerar um Módulo N e duas chaves e (a chave pública) e d (a privada). O mecanismo empregado é geralmente RSA ou DSA e as chaves geradas podem ser usadas para criptografia. Tudo o que você precisa fazer é extraí-los do blob base64 que é a chave pública e, em seguida, usar um programa adequado para criptografar dados com essas chaves. Você pode estar interessado no Monkeysphere, que pode transferir entre o formato de chave ssh e as teclas gnupg. Isso deve permitir que você também use as chaves para criptografia.

alguém
fonte
0

Normalmente, não se faz 'criptografia em massa' com chaves assimétricas. Mas isso não importa, pois você não deve lidar com esse nível de detalhes. Use um kit de ferramentas (openssl é ótimo http://www.openssl.org/docs/apps/openssl.html ) para fazer o trabalho por você. O que você deseja fazer é criar uma mensagem criptografada contendo a nova senha temporária e especificar o par de chaves do usuário como destinatário. Muitos exemplos nesta página: http://www.openssl.org/docs/apps/smime.html

RAM
fonte