Genel şifreyi kullanarak geçici şifreyi şifreleme


9

Sanal bir ofis yönetiyorum ve personelimiz kimlik doğrulama için hem SSH anahtarlarını hem de şifreleri kullanıyor. Personelimizden biri şifresini unutursa, genel RSA ssh anahtarını kullanarak geçici bir şifreyi şifrelemenin bir yolu var mı?

Bununla ilgili başka sorular gördüm, ancak "cevaplar" genellikle genel şifreleme / şifre çözme gerçekleştirmek için genel / özel SSH anahtarlarını kullanmaya karşı öneriyor ve aslında bunun mümkün olup olmadığını belirtmiyor. Gerçekten mümkün olup olmadığını ve şifreyi şifrelemek ve daha sonra şifresini çözmek için neler olduğunu bilmek istiyorum.

Yanıtlar:


8

Sonunda bir OpenSSH ortak anahtarını bir blogda PEM biçimine nasıl dönüştürdüğümü buldum ve özel / ortak anahtarımı kullanarak bir dizeyi başarıyla şifreleyip şifresini çözmeyi başardım .

Şifreleme ve şifre çözme için kullandığım adımları özetledim.

Bir dizeyi şifrelemek için:

# 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

Bir dizenin şifresini çözmek için (dosyadan):

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

Amacım şifreyi e-postayla göndermek olduğundan, işleri biraz otomatikleştirmek için son derece basit bir komut dosyası yazdım:

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

Daha sonra komut dosyasının çıktısını kullanıcının şifresini çözmek için bir e-posta ile gönderebilirim.

Komut dosyasının tamamını Github'da bulabilirsiniz: https://gist.github.com/3078682


4

Sadece bir RSA anahtarı olduğu için mümkündür. Openssl kullanın:

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

Bu soruyu Unix / Linux SE'de inceledim.

PGP'nin bunun için daha uygun olduğunu söylemeliyim.


1
Sorun, SSH ortak anahtarının OpenSSL tarafından tanınan bir biçimde olmamasıdır. Anahtarı daha sonra OpenSSL gibi bir araç seti tarafından kullanılabilecek bir şeye nasıl dönüştürüleceğini bilmem gerekiyordu.
David M. Syzdek

1

Genel olarak, evet bu mümkün. Tüm SHH, bir Modül N ve iki anahtar e (genel anahtar) ve d (özel anahtar) oluşturmaktır. Kullanılan mekanizma genellikle RSA veya DSA'dır ve oluşturulan Anahtarlar şifreleme için kullanılabilir. Tek yapmanız gereken onları ortak anahtar olan base64 blobundan ayıklamak ve daha sonra bu anahtarlarla veri şifrelemek için uygun bir program kullanmaktır. Sen ssh anahtar biçimi ve gnupg anahtarları arasında aktarabilirsiniz Monkeysphere ilginizi çekebilir . Bu, anahtarları şifreleme için de kullanmanıza izin vermelidir.


0

Normalde asimetrik anahtarlarla 'toplu şifreleme' yapılmaz. Ancak bu önemli değil çünkü bu düzeyde ayrıntılarla uğraşmamalısınız. İşi sizin için yapmak için bir araç kiti kullanın (openssl iyi bir http://www.openssl.org/docs/apps/openssl.html ). Yapmak istediğiniz yeni geçici şifreyi içeren şifreli bir mesaj oluşturmak ve kullanıcının anahtar çiftini alıcı olarak belirtmektir. Bu sayfada bolca örnek: http://www.openssl.org/docs/apps/smime.html

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.