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

9

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

Já vi outras perguntas relacionadas a este, mas as "respostas" geralmente recomendam não usar as chaves SSH pública / privada para executar criptografia / descriptografia geral e, na verdade, não indicam se isso é possível. Eu gostaria de saber se é realmente possível e quais são as etapas para criptografar e, em seguida, descriptografar a senha.

    
por David M. Syzdek 09.07.2012 / 19:02

4 respostas

8

Eu finalmente encontrei como converter uma chave pública do OpenSSH para o formato PEM em um blog e foi capaz de criptografar e descriptografar com sucesso uma string usando minha chave privada / pública.

Eu descrevi as etapas que usei para realizar a criptografia e a descriptografia.

Para criptografar uma 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

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

Eu posso enviar a saída do script em um e-mail para o usuário descriptografar.

O script completo está disponível no Github: link

    
por 09.07.2012 / 20:09
4

É possível, já que é apenas uma chave RSA. Use openssl:

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

Eu copiei essa pergunta no Unix / Linux SE.

Devo dizer que o PGP é mais adequado para isso.

    
por 09.07.2012 / 19:13
1

Em geral, sim, isso é possível. Tudo o que o SHH faz é gerar um Módulo N e duas chaves e (a chave pública) ed (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 usar um programa adequado para criptografar dados com essas chaves. Você pode estar interessado em Monkeysphere que pode transferir entre o formato da chave ssh e as chaves gnupg. Isso deve permitir que você também use as chaves para criptografia.

    
por 09.07.2012 / 19:12
0

Normalmente, não se faz 'encriptação em massa' com chaves assimétricas. Mas isso não importa, já que você não deveria estar lidando com esse nível de detalhes. Use um kit de ferramentas (o openssl é um ótimo link ) para fazer o trabalho para 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. Exemplos em abundância nesta página: link

    
por 09.07.2012 / 19:11