Crittografa la password temporanea usando la chiave pubblica ssh


9

Gestisco un ufficio virtuale e il nostro personale utilizza sia le chiavi SSH che le password per l'autenticazione. Se uno dei nostri dipendenti dimentica la sua password, c'è un modo per crittografare una password temporanea usando la sua chiave SSH RSA pubblica in modo che io possa inviargliela via e-mail?

Ho visto altre domande relative a questa, tuttavia le "risposte" generalmente sconsigliano di utilizzare le chiavi SSH pubbliche / private per eseguire la crittografia / decrittografia generale e non dichiarare se ciò è possibile. Vorrei sapere se è davvero possibile e quali sono i passaggi per crittografare e quindi decrittografare la password.

Risposte:


8

Alla fine ho scoperto come convertire una chiave pubblica OpenSSH in formato PEM su un blog e sono stato in grado di crittografare e decrittografare con successo una stringa usando la mia chiave privata / pubblica.

Ho delineato i passaggi che ho usato per eseguire la crittografia e la decrittografia.

Per crittografare una stringa:

# 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

Per decrittografare una stringa (dal file):

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

Dato che il mio obiettivo è inviare la password via e-mail, ho scritto uno script estremamente semplice per automatizzare un po 'le cose:

#!/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 quindi inviare l'output dello script in un'e-mail per la decrittografia dell'utente.

Lo script completo è disponibile su Github: https://gist.github.com/3078682


4

È possibile poiché è solo una chiave RSA. Usa openssl:

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

Ho scritto questo di questa domanda su Unix / Linux SE.

Devo dire che PGP è più adatto a questo.


1
Il problema è che la chiave pubblica SSH non è in un formato riconosciuto da OpenSSL. Avevo bisogno di sapere come convertire la chiave in qualcosa che potesse essere utilizzato da un toolkit come OpenSSL.
David M. Syzdek,

1

In generale, sì, questo è possibile. Tutto ciò che SHH fa è generare un Modulo N e due chiavi e (la chiave pubblica) e d (quella privata). Il meccanismo impiegato è generalmente RSA o DSA e le chiavi generate possono essere utilizzate per la crittografia. Tutto quello che dovresti fare è estrarli dal BLOB di base64 che è la chiave pubblica e quindi utilizzare un programma adatto per crittografare i dati con queste chiavi. Potresti essere interessato a Monkeysphere che può trasferire tra il formato chiave ssh e le chiavi gnupg. Ciò dovrebbe consentire anche di utilizzare le chiavi per la crittografia.


0

Normalmente non si esegue la "crittografia di massa" con chiavi asimmetriche. Ma questo non importa dal momento che non dovresti avere a che fare con quel livello di dettagli. Usa un toolkit (openssl è perfetto http://www.openssl.org/docs/apps/openssl.html ) per fare il lavoro per te. Quello che vuoi fare è creare un messaggio crittografato contenente la nuova password temporanea e specificare la coppia di chiavi dell'utente come destinatario. Esempi a bizzeffe in questa pagina: http://www.openssl.org/docs/apps/smime.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.