Onde posso encontrar alguma documentação sobre o formato de uma chave pública RSA?
Uma chave pública RSA formatada por OpenSSH
:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQB / nAmOjTmezNUDKYvEeIRf2YnwM9 / uUG1d0BYsc8 / tRtx + RGi7N2lUbp728MXGwdnL9od4cItzky / zVdLZE2cycOa18xBK9cOWmcKS0A8FYBxEQWJ / q9YVUgZbFKfYGaGQxsER + A0w / fX8ALuk78ktP31K69LcQgxIsl7rNzxsoOQKJ / CIxOGMMxczYTiEoLvQhapFQMs3FL96didKr / QbrfB1WT6s3838SEaXfgZvLef1YB2xmfhbT9OXFE3FXvh2UPBfN + ffE7iiayQf / 2XR + 8j4N4bW30DiPtOQLGUrH1y5X / rpNZNlWW2 + jGIxqZtgWg7lTy3mXy5x836Sj / 6L
A mesma chave pública formatada para uso no Secure Shell (RFC 4716 - O formato de arquivo de chave pública do Secure Shell (SSH)) :
---- BEGIN SSH2 PUBLIC KEY ----
AAAAB3NzaC1yc2EAAAABJQAAAQB/nAmOjTmezNUDKYvEeIRf2YnwM9/uUG1d0BYs
c8/tRtx+RGi7N2lUbp728MXGwdnL9od4cItzky/zVdLZE2cycOa18xBK9cOWmcKS
0A8FYBxEQWJ/q9YVUgZbFKfYGaGQxsER+A0w/fX8ALuk78ktP31K69LcQgxIsl7r
NzxsoOQKJ/CIxOGMMxczYTiEoLvQhapFQMs3FL96didKr/QbrfB1WT6s3838SEaX
fgZvLef1YB2xmfhbT9OXFE3FXvh2UPBfN+ffE7iiayQf/2XR+8j4N4bW30DiPtOQ
LGUrH1y5X/rpNZNlWW2+jGIxqZtgWg7lTy3mXy5x836Sj/6L
---- END SSH2 PUBLIC KEY ----
A mesma chave pública formatada como uma chave pública RSA (observe os cinco -
e nenhum espaço):
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA+xGZ/wcz9ugFpP07Nspo6U17l0YhFiFpxxU4pTk3Lifz9R3zsIsu
ERwta7+fWIfxOo208ett/jhskiVodSEt3QBGh4XBipyWopKwZ93HHaDVZAALi/2A
+xTBtWdEo7XGUujKDvC2/aZKukfjpOiUI8AhLAfjmlcD/UZ1QPh0mHsglRNCmpCw
mwSXA9VNmhz+PiB+Dml4WWnKW/VHo2ujTXxq7+efMU4H2fny3Se3KYOsFPFGZ1TN
QSYlFuShWrHPtiLmUdPoP6CV2mML1tk+l7DIIqXrQhLUKDACeM5roMx0kLhUWB8P
+0uj1CNlNN4JRZlC7xFfqiMbFRU9Z4N6YwIDAQAB
-----END RSA PUBLIC KEY-----
O dump hexadecimal dos dados codificados na base 64:
00 00 00 07 73 73 68 2d 72 73 61 00 00 00 01 25 00 00 01 00 7f 9c 09
8e 8d 39 9e cc d5 03 29 8b c4 78 84 5f d9 89 f0 33 df ee 50 6d 5d d0
16 2c 73 cf ed 46 dc 7e 44 68 bb 37 69 54 6e 9e f6 f0 c5 c6 c1 d9 cb
f6 87 78 70 8b 73 93 2f f3 55 d2 d9 13 67 32 70 e6 b5 f3 10 4a f5 c3
96 99 c2 92 d0 0f 05 60 1c 44 41 62 7f ab d6 15 52 06 5b 14 a7 d8 19
a1 90 c6 c1 11 f8 0d 30 fd f5 fc 00 bb a4 ef c9 2d 3f 7d 4a eb d2 dc
42 0c 48 b2 5e eb 37 3c 6c a0 e4 0a 27 f0 88 c4 e1 8c 33 17 33 61 38
84 a0 bb d0 85 aa 45 40 cb 37 14 bf 7a 76 27 4a af f4 1b ad f0 75 59
3e ac df cd fc 48 46 97 7e 06 6f 2d e7 f5 60 1d b1 99 f8 5b 4f d3 97
14 4d c5 5e f8 76 50 f0 5f 37 e7 df 13 b8 a2 6b 24 1f ff 65 d1 fb c8
f8 37 86 d6 df 40 e2 3e d3 90 2c 65 2b 1f 5c b9 5f fa e9 35 93 65 59
6d be 8c 62 31 a9 9b 60 5a 0e e5 4f 2d e6 5f 2e 71 f3 7e 92 8f fe 8b
Eu li que existem alguns formatos 🕗 :
Os dados principais podem ser codificados de três maneiras gerais:
- Formato codificado em DER binário. Às vezes, isso é chamado de codificação ASN.1 BER
- Formato PEM ou base64. São os mesmos dados que o arquivo codificado em DER, mas são codificados em base64 com linhas adicionais de cabeçalho e rodapé
- Formato XML.
Se for ASN.1 , o hex certamente não se parece com isso.
Qual é o formato de uma chave pública RSA?
Veja também
fonte
openssl asn1parse -inform PEM
com-----BEGIN RSA PUBLIC KEY----
dados ou qualquer outra estrutura PEM. Muito mais fácil do que tentar manipular manualmente os cabeçalhos com os comandos grep / tr / base64.A partir dos dados decodificados base64 de uma chave OpenSSL rsa-ssh , consegui adivinhar um formato:
00 00 00 07
: prefixo de comprimento de quatro bytes (7 bytes)73 73 68 2d 72 73 61
: "ssh-rsa"00 00 00 01
: prefixo de comprimento de quatro bytes (1 byte)25
: Expoente RSA (e
): 2500 00 01 00
: prefixo de comprimento de quatro bytes (256 bytes)Módulo RSA (
n
):A validação mais próxima da minha teoria pode ser encontrada na RFC 4253:
Mas isso não explica os prefixos de comprimento.
Tomando o aleatório
RSA PUBLIC KEY
que encontrei (na pergunta) e decodificando a base64 em hexadecimal:Do RFC3447 - PKCS (Public-Key Cryptography Standards) # 1: Versão 2.1 das especificações de criptografia RSA :
Usando a excelente documentação ASN.1 da Microsoft (e a única real) :
dando o módulo e o expoente da chave pública:
0xfb1199ff0733f6e805a4fd3b36ca68...837a63
Atualização : minha forma expandida desta resposta em outra pergunta
fonte
RSA PUBLIC KEY
segue o formulário ASN.1 (consulte a especificação PKCS), não tem nada a ver com o formato do OpenSSH.string
empint
- é descrito no RFC 4251, seção 5, não há necessidade de quess :)Decodificador de referência de CRL, CRT, CSR, NEW CSR, PRIVATE KEY, PUBLIC KEY, RSA, RSA Public Key Parser
Chave pública do RSA
Chave privada criptografada
CRL
CRT
CSR
NOVO RSE
PEM
PKCS7
CHAVE PRIVADA
CHAVE DSA
Curva elíptica
Chave privada PGP
Chave pública PGP
fonte