Como usar a chave pública ssh-rsa para criptografar um texto?


55

Portanto, o cenário é: Dado que sou Bob, quero criptografar alguma mensagem para Alice. A única chave pública que tenho é o ssh-rsaid_rsa.pub assim:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyb + qaZLwgC7KAQJzYikf3XtOWuhlMXVv2mbTKa5dp0sHPRd2RaYnH8ZRkt7V8bjqct1IHGCuxI8xyoEp4at3FHe6j9RfWiarc1ldLUCmTtryI0GGpRs6Zpvqdtpcq / 1NCIYtUQAvsImyEFCtqmB2suDo1ZSllZQ0x9TCKHdCANYIOeaniuFzR57POgE3vxk / r6PO24oy8BIWqxvi29r0n1LUigVBJ7CmMHuzb4 / + i1v6PxV1Lqnj6osPP9GpXpsh8kLUCby / KcmcryWNdSP0esyCdDxkA5hlIuk8qL1vzsyPluUQuc0BEHu6nuw8WQlCF1mFFxcpJL + MhWEr01WIIw == sikachu@Sikachus-Notebook.local

Portanto, existe uma maneira de criptografar uma string usando essa chave pública para que ela possa usar sua chave privada de id_rsa(gerada de ssh-keygen) para descriptografar a mensagem?

(Eu sei que é possível imediatamente se você estiver usando .pemum arquivo de par de chaves. Se você puder me mostrar como converter isso para o formato opensslcompatível, isso também seria ótimo!)

Obrigado!


5
Você e Alice realmente deve investigar gpg ... gnupg.org ; D
tink

4
Hahaha, de fato! No entanto, o cenário que tenho aqui é que já tenho acesso à ssh-rsachave pública deles e não quero adicionar outra camada de complexidade (como pedir ao destinatário para instalar o gpg etc.)
sikachu

Respostas:


71

É possível converter sua chave pública ssh para o formato PEM (que 'openssl rsautl' pode lê-lo):

Exemplo:

ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PKCS8 > id_rsa.pem.pub

Supondo que 'myMessage.txt' seja sua mensagem, que deve ser criptografada em chave pública.

Em seguida, basta criptografar sua mensagem com openssl rsautl e sua chave pública PEM convertida, como faria normalmente:

openssl rsautl -encrypt -pubin -inkey id_rsa.pem.pub -ssl -in myMessage.txt -out myEncryptedMessage.txt

O resultado é sua mensagem criptografada em 'myEncryptedMessage.txt'

Para testar seu trabalho para descriptografar a chave privada de Alice:

openssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in myEncryptedMessage.txt -out myDecryptedMessage.txt

5
Eu envolvi isso em um script que extrai a chave pública dos usuários do GitHub. github.com/twe4ked/catacomb
twe4ked

Isso não funciona para mim. Meu ssh-keygennão tem uma -mopção. (Não consigo descobrir como solicitar ao ssh-keygen sua versão.) Substituir -mpor -tobras, mas depois openssldiz "não é possível carregar a chave pública". Consulte stackoverflow.com/questions/18285294/… .
Jason Gross

11
Mesmo problema que Jason tem no MaxOS Mavericks. -M substituído por -t para geração de chave ativada por keygen.
Robert Christian

8
Observe que isso só funciona se o arquivo for pequeno o suficiente. por exemplo, 200 bytes. Veja stackoverflow.com/questions/7143514/…
h__

11
Fazendo eco ao que @hyh disse, isso funcionará apenas se o arquivo de entrada for pequeno (a linha está em algum lugar em torno de 254 bytes, caso contrário, fornecerá "rotinas rsa: RSA_padding_add_SSLv23: dados muito grandes para o tamanho da chave: /SourceCache/OpenSSL098/OpenSSL098-52.20. Erro 2 / src / crypto / rsa / rsa_ssl.c: 73 ".
Devy

1

Experimente o ssh-vault, ele usa chaves públicas ssh-rsa para criptografar "crie um cofre" e a chave privada ssh-rsa para descriptografar "exibir o conteúdo do cofre"


-3

Por que não fazer isso da maneira super óbvia que não requer rolagem de sua própria criptografia?

Alice envia um sftps para alice@bobserver.com, que é configurado para permitir apenas a autenticação de chave pública para a conta alice. As propriedades do ssh garantem que apenas o alice possa se authemticar. Até mesmo um homem no ataque do meio falha desde que (supondo que você desative o ssh1 e insista nas configurações corretas) a comunicação inicial usando DH cria um valor conhecido por alice e bob, mas não por qualquer homem no meio e isso pode ser usado para autenticar que nenhuma resposta ou ataque do MITM possa ver o conteúdo do communicatino.

Então, alice sftp em sua caixa e baixe o arquivo.


9
Como o uso do openssl está rolando sua própria criptografia?
Cm3 #

Como exemplo, o uso do RSA para criptografar uma sequência de 1024 caracteres falharia devido ao tamanho da mensagem. Para superar esse problema, o implementador está em uma situação precária, principalmente se as mensagens forem repetidas. É mais seguro usar o RSA para criptografar uma nova chave de cifra simétrica e vetor de inicialização que dificilmente se repetirá, portanto, gere texto de cifra exclusivo para todas as mensagens enviadas, ganhe a velocidade de cifra simétrica e reduza a quantidade de cifra e texto sem formatação atacar a chave RSA com. Espero que isso faça sentido. :)
Sam

Esse método exige que Bob confie em Alice ou bloqueie o site bobserver.com para que Alice não possa fazer nada malicioso.
Mkfearnley

É você mesmo, no sentido de que Alice precisa executar uma quantidade considerável de operações incomuns para descriptografar, não no sentido de a matemática subjacente ser sua própria. Como isso foi perguntado em termos de utilitários de linha de comando, em vez de uma API ou perspectiva teórica assumida, o indivíduo realmente desejava transferir algumas informações concretas, sem pegar carona em um novo protocolo sobre o ssh. Como tal, o sftp praticamente parecia muito mais fácil e, sim, é necessário olhar para o servidor, confiar em Alice ou limpar o servidor posteriormente.
Peter Gerdes

Parece-me que no exemplo acima é realmente vulnerável a alguém que intercepta o email no qual você explica a Alice exatamente como ela pode descriptografar essa mensagem incomum e fornecer a ela uma sequência de comandos que, em vez disso, descriptografam com segurança a mensagem MITM de Charlie (comandos openssl são como mágica encantamentos para a maioria), enquanto a idéia do servidor evita tudo isso em favor dos comandos padrão com os quais muitos estão familiarizados e, se bob o executa no computador em que ele está criptografado, está confiando nele de qualquer maneira. Obviamente, a melhor resposta depende do modelo de ameaça, mas a partir do contexto q isso provavelmente os servirá melhor.
Peter Gerdes
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.