Использование ключа ssh на карте GPG для расшифровки данных

Когда экземпляр Windows создается в AWS, его пароль шифруется с помощью открытой части ключа SSH.

Затем можно использовать следующую команду для получения зашифрованного пароля:

 aws ec2 get-password-data --instance-id=i-0a5102eb55ed6e0b9

(См. https://docs.aws.amazon.com/cli/latest/reference/ec2/get-password-data.html#examples)

Команда возвращает следующие данные:

{
    "InstanceId": "i-0a5102eb55ed6e0b9",
    "Timestamp": "2019-11-04T12:21:30.000Z",
    "PasswordData": "\r\nbase64_data==\r\n"
}

Зашифрованные данные пароля имеют кодировку base64, но поле "PasswordData" можно расшифровать, если у вас есть закрытая часть SSH-ключа:

echo "base64_data" | base64 --decode | openssl rsautl -decrypt -inkey "./path_to_private_ssh_key"

(См. пример репозитория Github по адресу https://github. com/tomrittervg/decrypt-windows-ec2-passwd/blob/master/decrypt-windows-ec2-passwd.sh)

Это отлично работает, однако я использую Nitrokey Professional для хранения закрытого ключа и не вижу способа указать команде openssl использовать карту GPG для расшифровки данных. Я хотел бы хранить закрытые ключи вне диска, если это возможно.

Для справки, чтобы получить открытый ключ в AWS, я экспортировал открытый ключ в правильном формате SSH для AWS с помощью команды gpg --export-ssh-key nameofuser@example.com.

Есть ли способ расшифровать данные с помощью карты?

0
задан 4 November 2019 в 15:36
1 ответ

В Linux я не нашел эквивалента на основе GPG, но для этого можно использовать интерфейс PKCS#11. У меня есть аналогичная установка с использованием Yubikey, и задокументировал процесс, но tl;dr таков:

  1. Загрузите ключ в область PKCS#11 вашего ключа.В Yubikey это PIV, для Nitrokey вы должны убедиться, что у вас есть оборудование, поддерживающее PKCS#11. На Yubikey вы не можете использовать генерацию ключа на устройстве, поэтому вам нужно использовать машину с воздушным зазором для генерации ключа, а затем загружать ключ по мере необходимости.
  2. Используйте pkcs11-tool для расшифровки. В Linux мне обычно приходится удалять/переустанавливать свое устройство, иначе pkcs11-tool теряет блокировку, которую gpg-agent накладывает на мою карту после того, как я использовал ее один раз.

Соответствующие команды для расшифровки выглядят следующим образом:

aws ec2 get-password-data --instance-id <blah> --query PasswordData --output text| base64 -d > encrypted-adminpass.bin
pkcs11-tool --decrypt -v -l --input-file encrypted-adminpass.bin -m RSA-PKCS
2
ответ дан 30 September 2020 в 22:41

Теги

Похожие вопросы