Зашифруйте временный пароль с помощью открытого ключа ssh

9

Я управляю виртуальным офисом, и наши сотрудники используют как SSH-ключи, так и пароли для аутентификации. Если один из наших сотрудников забудет свой пароль, есть ли способ зашифровать временный пароль с помощью его открытого ключа SSA RSA, чтобы я мог отправить его ему по электронной почте?

Я видел другие вопросы, связанные с этим, однако «ответы» обычно рекомендуют не использовать открытые / закрытые ключи SSH для выполнения общего шифрования / дешифрования и фактически не указывают, возможно ли это. Я хотел бы знать, если это действительно возможно и какие шаги для шифрования, а затем расшифровать пароль.

Дэвид М. Сыздек
источник

Ответы:

8

Наконец, я нашел, как преобразовать открытый ключ OpenSSH в формат PEM в блоге и смог успешно зашифровать и расшифровать строку, используя мой закрытый / открытый ключ.

Я обрисовал в общих чертах шаги, которые я использовал, чтобы выполнить шифрование и дешифрование.

Чтобы зашифровать строку:

# 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

Чтобы расшифровать строку (из файла):

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

Так как моя цель - отправить пароль по электронной почте, я написал очень простой скрипт, чтобы немного автоматизировать процесс:

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

Затем я могу отправить выходные данные сценария по электронной почте для расшифровки пользователем.

Полный скрипт доступен на Github: https://gist.github.com/3078682

Дэвид М. Сыздек
источник
4

Это возможно, поскольку это просто ключ RSA. Используйте openssl:

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

Я назвал этот вопрос в Unix / Linux SE.

Сразу скажу, что PGP больше подходит для этого.

Лукас Кауфман
источник
1
Проблема в том, что открытый ключ SSH не в формате, который распознает OpenSSL. Мне нужно было знать, как преобразовать ключ в нечто, что затем могло бы использоваться инструментарием, таким как OpenSSL.
Дэвид М. Сыздек
1

В общем, да, это возможно. Все, что делает SHH - это генерирует модуль N и два ключа e (открытый ключ) и d (закрытый). Используемый механизм обычно является RSA или DSA, и сгенерированные ключи могут использоваться для шифрования. Все, что вам нужно сделать, это извлечь их из BLOB-объекта base64, который является открытым ключом, а затем использовать подходящую программу для шифрования данных этими ключами. Возможно, вас заинтересует Monkeysphere, которая может переключаться между форматом ключей ssh ​​и ключами gnupg. Это должно позволить вам также использовать ключи для шифрования.

кто то
источник
0

Обычно никто не выполняет «массовое шифрование» с ассиметричными ключами. Но это не имеет значения, поскольку вы не должны иметь дело с таким уровнем детализации. Используйте инструментарий (openssl отлично подходит http://www.openssl.org/docs/apps/openssl.html ), чтобы выполнить эту работу за вас. Что вы хотите сделать, это создать зашифрованное сообщение, содержащее новый временный пароль и указать пару ключей пользователя в качестве получателя. Примеры изобилуют на этой странице: http://www.openssl.org/docs/apps/smime.html

Баран
источник