Como importo uma chave RSA SSH para o GPG como a chave privada _primary_?

16

Atualmente, tenho uma chave SSH que utilizo há algum tempo e gostaria de começar a usar o GnuPG com um novo chaveiro. No entanto, como usei minha chave por muito tempo, eu ainda gostaria de usá-la no GPG como chave principal / principal. Tentei importar a chave através destas instruções .

Mas, acabo com o que é considerado uma "subchave". Além disso, se eu tentar importá-lo sem criar uma chave GPG padrão, o GPG nem verá essa subchave. (Suponho que a subchave precise ser assinada pela chave principal primeiro.)

Como uso essa chave como chave principal em secring.gpg?

Brendan Byrd
fonte
Em que sentido você quer dizer " chave privada primária "?
MadHatter apoia Monica

Respostas:

16

A resposta simples é: você não.

As chaves SSH e GnuPG (na verdade, OpenPGP) são completamente diferentes, mesmo que os dois protocolos possam usar pares de chaves RSA.

Além disso, por que você quer fazer isso? Mesmo se você usar o mesmo material de chave para compor sua chave PGP, ainda precisará distribuir sua chave como uma chave PGP. Você provavelmente não distribuiu sua chave pública SSH para as pessoas com as quais se corresponde, portanto, do ponto de vista da distribuição de chaves, não há diferença: elas precisarão receber uma chave pública de você. E mesmo que você tenha distribuído sua chave pública SSH para outras pessoas, elas precisariam executar algumas etapas adicionais para poder importá-la para a implementação do OpenPGP, o que pode ou não ser fácil.

Como kasperd bem apontou, deve haver apenas uma maneira de interpretar (particularmente) uma assinatura. Se você usasse a mesma chave para PGP e SSH, se alguém pudesse induzi-lo a assinar uma mensagem especialmente criada (que é um recurso assumido em certos ataques de sistema de assinatura) em uma, então mesmo que ambos os sistemas estejam seguros isoladamente, pode ser possível criar essa mensagem de uma maneira que tenha um significado em um dos sistemas, mas um significado diferente no outro. Isso, por si só, seria uma vulnerabilidade. (Explorável? Quem sabe. Mas por que arriscar?)

Os pares de chaves PGP e SSH são chaves de longo prazo, usadas para proteger chaves simétricas efêmeras (mensagem e sessão) e também para verificar a autenticidade de uma parte remota. Isso torna a chave privada PGP ou SSH um destino de valor muito mais alto para um invasor do que a chave simétrica correspondente. Se você usar o mesmo material de chave para ambos, e um invasor conseguir perceber isso, isso apenas aumentará o valor de um ataque bem-sucedido nesse par de chaves.

Sem examinar cada um dos protocolos em detalhes, imagino que reconhecer que o mesmo material chave está sendo usado em ambos provavelmente seria bastante trivial, já que a chave pública é basicamente transmitida de forma clara.

Apenas gere uma nova chave PGP. Se desejar, torne-o RSA e do mesmo comprimento que sua chave SSH. (Nenhuma pessoa sã vai olhar muito mais de perto do que verificar a impressão digital de qualquer maneira.) Em seguida, distribua a chave pública para as pessoas com quem você deseja se corresponder, como uma chave PGP. Será muito mais fácil para todos, e muito provavelmente mais seguro, ao custo de uma pequena quantidade de entropia do pool de entropia aleatória do sistema, que deve ser rapidamente reabastecida de qualquer maneira.


Se você possui várias chaves no seu chaveiro secreto e deseja especificar qual delas deve ser usada por padrão, use as diretivas default-keye possivelmente default-recipient{,-self}em seu ~ / .gnupg / gnupg.conf.

um CVn
fonte
11
Eu concordo com esta resposta. No entanto, há mais um motivo para não usar o mesmo material essencial. Por razões de segurança, deve haver apenas uma maneira de interpretar uma assinatura. Se a mesma assinatura pudesse ser interpretada de duas maneiras diferentes, isso seria uma vulnerabilidade. Mesmo que o ssh e o gpg sejam protegidos por si mesmos, um adversário pode induzi-lo a assinar uma mensagem com uma e levar a assinatura para o outro programa, onde pode ter um significado diferente.
precisa saber é o seguinte
@kasperd Bom ponto. Eu alterei a resposta; Como se sente sobre isso agora?
um CVn
Parece bom.
kasperd
11
Eu acho que essa resposta não é completamente precisa: com o monkeysphere, existe um caso de usuário em que você pode querer que as chaves OpenSSH existentes sejam subchaves apenas de autenticação na sua chave pessoal do OpenPGP. Pelo menos eu gostaria de usá-lo dessa maneira.
user134450
Essas chaves não são diferentes; seus metadados são.
foo
5

Você pode converter uma chave SSH em uma chave OpenPGP com a ferramenta pem2openpgpdo projeto monkeysphere . Essa chave pode ser importada pelo gnupg como um par de chaves públicas / privadas comuns. Como a outra resposta menciona, isso geralmente não é uma boa ideia, porque o ssh não tem conceito de certificados; portanto, você está efetivamente adicionando um recurso a uma chave existente que ela não poderia ter antes. Isso geralmente não é permitido na criptografia.

Fiz de qualquer maneira com uma das minhas chaves ssh, mas adicionei o par de chaves à minha outra chave do OpenPGP como uma subchave que possui apenas um sinalizador de capacidade: autenticação. Esse sinalizador é destinado a situações como esta, nas quais você não deseja assinar ou criptografar nada com um par de chaves (significado --encrypte --signopções para o gnupg), mas deseja que ele esteja na sua caixa de chaves para autenticação com o OpenSSH e o gnupg-agent.

Para mais detalhes, consulte a documentação da monkeysphere.

user134450
fonte
2

Pode haver bons motivos para converter uma chave no formato PKCS normal para importação em gpg.

Por exemplo, se você deseja colocá-lo em um cartão inteligente. As facilidades que o gpg fornece com seus comandos de informação e edição de cartão são muito úteis para esse fim, então por que não usá-lo como uma ferramenta? O único obstáculo que você precisa superar é ... exatamente: importar a chave do formato PKCS # 8 padrão (ou formato "bruto" RSA PKCS # 1)) para o armazenamento de chaves gpg para processamento adicional.

Portanto - observe minha objeção à resposta aprovada! :)

Uma resposta realmente útil para esse tipo de pergunta é encontrada aqui: /unix/276317/how-can-i-import-a-key-in-pem-format-not-openpgp-into -gpg

foo
fonte
1

Use isso no Ubuntu 16.04 ou Windows WSL.

sudo apt install -y monkeysphere
cat key.pem | PEM2OPENPGP_USAGE_FLAGS=authenticate pem2openpgp "Key <[email protected]>" > key.pgp

Cartão de importação. Pode ser feito no Windows ou Linux.

gpg --import key.gpg

Mover para cartão

Encontre o identificador de assinatura de chave.

gpg --list-key

Mover chave de autenticação para o cartão

gpg --edit-key FFFFFFFFFFF
keytocard

Selecione um número para o slot de autenticação.

Você terminou aqui.

Lembre-se de excluir a chave do chaveiro gpg se estiver usando um cartão. Use o identificador de chave acima.

gpg --delete-secret-key FFFFFFFFFFF

Diversos

Não é necessário, mas pode ser útil para obter uma chave no formato pgp baseado em texto.

gpg -a --export FFFFFF > key.asc
Fogo
fonte