Chaves SSH: por que o id_rsa é maior que o id_rsa.pub?

8

Minha chave privada ( ~/.ssh/id_rsa) é um arquivo de 1766 bytes, mas minha chave pública ( ~/.ssh/id_rsa.pub) tem apenas 396 bytes de comprimento. Por que a enorme diferença? É porque a chave privada é criptografada usando o AES? O texto cifrado AES geralmente não tem o mesmo comprimento que o texto simples?

splicer
fonte

Respostas:

17

Sua chave privada possui mais informações do que sua chave pública. Enquanto a chave pública transmite apenas o expoente de criptografia (e) e o módulo (n), a chave privada inclui adicionalmente um expoente de descriptografia (d) e os dois fatores principais (p e q) do módulo. A chave privada possui essencialmente uma chave pública.

[Criptografia: texto cifrado = mensagem ^ e (mod n); Descriptografia: mensagem = texto cifrado ^ d (mod n)]

Para ver todos os dados em seu arquivo de chave privada:

$ openssl rsa -in id_rsa -text -noout

Editar: O arquivo de chave privada aparentemente não possui o expoente de criptografia, mas possui os expoentes d_1 e d_2, onde d_1 = d (mod p-1) e d_2 = d (mod q-1). Eles são usados ​​para acelerar a descriptografia - você pode dividir sua exponenciação de descriptografia em chamadas de exponenciação paralela menores, que acabam sendo mais rápidas que uma grande m = c ^ d (mod n) para grande d e grande n.

user75636
fonte
2

Infelizmente você não especificou em qual formato as chaves são armazenadas. Eu acho que você está se referindo à codificação de chave OpenSSH. Nesse formato, as chaves são armazenadas em blocos de dados codificados em base64. Dependendo da codificação ao criptografar, geralmente há algum tipo de preenchimento envolvido na criptografia de dados. Portanto, os dados resultantes são múltiplos do tamanho do bloco de criptografia.

As chaves do OpenSSH também podem incluir algum tipo de comentário e propriedades adicionais inseridas entre os marcadores ---- BEGIN SSH2 [PUBLIC|PRIVATE] KEY ----e -----END RSA [PUBLIC|PRIVATE] KEY-----. Veja RFC4716 .

Além disso, para a chave pública, o módulo e o expoente público são salvos, enquanto para a chave privada o expoente privado é salvo. Consulte a geração de chaves RSA na Wikipedia para obter detalhes sobre a base matemática. Existem muitos lugares na web que descrevem a conexão matemática entre essas chaves. Não tenho certeza se você precisa de uma cópia dessas explicações aqui.

Teoricamente, é possível calcular a chave privada a partir de informações da chave pública, mas isso é matematicamente muito mais difícil do que o contrário. Apenas considere a chave privada como a "fonte" que inclui todas as variáveis ​​e a chave pública como resultado do cálculo. É fácil executar o cálculo repetidamente se você conhece todas as variáveis, mas sabendo apenas o resultado, é difícil obter todas as variáveis ​​de origem. Esse também é o motivo pelo qual é suficiente salvar a chave privada em um local seguro. Você sempre pode usar a chave privada para recalcular a chave pública. Mas não o contrário - bem, teoricamente, você pode fazer isso, mas dependendo da duração da chave, isso pode levar muitos anos;).

SkyBeam
fonte
O cálculo da chave privada a partir da chave pública requer uma fatoração rápida e eficiente - cuja falta é a segurança da criptografia de chave pública (pelo menos RSA).
Andrew
Isto está correto. Encontre um algoritmo de fatoração rápido e basicamente você quebra a segurança da criptografia RSA. Como alternativa, pode-se optar pelo ECC (Elliptic Curve Cryptography), que se baseia no conceito de dificuldades para caminhar logaritmos discretos. No entanto, se alguém encontrar uma solução eficaz para este problema ...
SkyBeam