Criptografia assimétrica Python: Usando teclas de PRV/pub pré-geradas
-
27-09-2019 - |
Pergunta
Ok, primeiro, sim, pesquisei o Google e o Stackoverflow e fiz algumas leituras (mais de 4 horas apenas nesta sessão) não encontrei o que preciso por esses motivos:
Muitos deles sugerem apenas lançar um exe como gpg.exe (http://stackoverflow.com/questions/1020320)
Alguns sugeriram usar pycrypto ou outras bibliotecas e olhá-las, seja a) Não consigo encontrar como usar nenhuma das suas API, b) Não consigo descobrir como importar uma chave de prv/pub pré-existente ou c) Eles Use o inseguro Randompool (e eu tentando atualizar, está apenas pedindo problemas)
Alguns mencionam isso de passagem, mas eu não consegui encontrar o que eles vinculavam (ou não havia nenhum link.
Então, eu sei, pergunto a vocês, colegas usuários do StackOverflow, como posso fazer isso, pegue uma sequência de uma chave pública (ou caminho (eu poderia apenas escrevê -la em um arquivo temp (eu pretendo apenas tê -lo como uma string pub_key = ".. . "))) e use -o para assinar e proteger uma string (que será publicada em um fórum (JSON para atualizar meu aplicativo)?
Além disso, essas são as chaves RSA (Putty Gen 4096 BITS SSH-2-RSA) que são geradas usando Puttygen (pode estar em qualquer formato (OpenSsh, SSH.com, PPK)
É assim que a chave pública se parece
---- Comece a chave pública ssh2 ----
Comentário: "RSA-key-20101003"
AAAAB3NzaC1yc2EAAAABJQAAAgEAi+91fFsxZ7k1UuudSe5gZoavwARUyZScCtdf WQ0ROoJC+XIqW5vVJfgmr+A1jLS5m4wNsrCqeyoX2B22T6iEwqVXrXt3QcbccKMu WkLKFK1h67q6Coc+3eOTmKrOuZbWc19YQgybdkR/GxF7XAbq4NCGNaCDtMOqX8Q2 L/a9fAYqVdTwg9trpcz3whNmdLk/B0edOABKuVX51UdLV+ZggK503+uAb1JiIIj0 mARwR/HNo4oRLMLf2PjuZsGVYYjJDdVJBU6AN4PUQSRRRPL4+YmsrLJb/TpfJeXA vj4KZMNJv15YXz7/iMZMKznDtr2RJX5wbSpuTUBNZveA7YiIHxvvvis38b/lX9SJ SYPfZ9CeQY6MvQgG2zwDTOOvKgOIB4sTGMXfcoxB8AF/QXOcxWFJkZoj36rvMd9n Po6szLjHXwcEUOUvvQfG4VvdQA0H5gGLHqYL1EehRsgi5qcCoFPaZW2K09ErKcS0 MbrLFjBkQ9KmqAM38bvM8UhCWAMA9VXOGHMxUHBV4Bir9alGS4VX0B8Y0b3dZ+7I MKkHMCwdEUJf7QVdGxGuSQtVsq8RZbIpk3g7wtv8f6I/iEC58ekdrH35tq5+1ilW dkk9+rrhUy4qrZ+ Hfi7aeemybpiMbsnebvnkmaipaoo23v8c9bq0iuxx4gizf10 o+tpsk8 =
---- END SSH2 Public Key ----
Não é isso -> o formato -chave parece ser PKCS1 para que o M2Crypto não funcione (sua função de chave de carga espera PEM)
Última leitura, acho que é formato de arquivo de chave pública ssh (RFC: http://www.ietf.org/rfc/rfc4716.txt )
Eu também acho que abaixo está errado, acho que não lida com o formato de arquivo de chave pública do SSH :(
Também parece que Twisted pode estar onde eu deveria olhar
Além disso, por que não me permite publicar uma recompensa imediatamente?
Solução
Ok, eu descobri como carregá -lo
from twisted.conch.ssh import keys as Keys
import base64
public_key = """\
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20101003"
AAAAB3NzaC1yc2EAAAABJQAAAgEAi+91fFsxZ7k1UuudSe5gZoavwARUyZScCtdf
WQ0ROoJC+XIqW5vVJfgmr+A1jLS5m4wNsrCqeyoX2B22T6iEwqVXrXt3QcbccKMu
WkLKFK1h67q6Coc+3eOTmKrOuZbWc19YQgybdkR/GxF7XAbq4NCGNaCDtMOqX8Q2
L/a9fAYqVdTwg9trpcz3whNmdLk/B0edOABKuVX51UdLV+ZggK503+uAb1JiIIj0
mARwR/HNo4oRLMLf2PjuZsGVYYjJDdVJBU6AN4PUQSRRRPL4+YmsrLJb/TpfJeXA
vj4KZMNJv15YXz7/iMZMKznDtr2RJX5wbSpuTUBNZveA7YiIHxvvvis38b/lX9SJ
SYPfZ9CeQY6MvQgG2zwDTOOvKgOIB4sTGMXfcoxB8AF/QXOcxWFJkZoj36rvMd9n
Po6szLjHXwcEUOUvvQfG4VvdQA0H5gGLHqYL1EehRsgi5qcCoFPaZW2K09ErKcS0
MbrLFjBkQ9KmqAM38bvM8UhCWAMA9VXOGHMxUHBV4Bir9alGS4VX0B8Y0b3dZ+7I
MKkHMCwdEUJf7QVdGxGuSQtVsq8RZbIpk3g7wtv8f6I/iEC58ekdrH35tq5+1ilW
dkk9+rrhUy4qrZ+HFi7AeemybpiumbSnebvnkMaIPAOo23V8C9BQ0iuxx4gIZf10
o+TPSK8=
---- END SSH2 PUBLIC KEY ----"""
key_data = ''.join(public_key.splitlines()[2:-1])# remove begin, end tags and comment
blob = base64.decodestring(key_data)
key = Keys.Key._fromString_BLOB(blob)
Outras dicas
Eu posso pensar em pelo menos duas opções relativamente simples
- Use OpenSSL (ou PyoPenssl) para converter o BER em PEM
- Use Paramiko, Twisted ou qualquer outra implementação do Python SSH para trabalhar diretamente com as chaves