Eu realmente não entendo este:
de acordo com: http://www.madboa.com/geek/openssl/#key-rsa , você pode gerar uma chave pública a partir de uma chave privada.
openssl genrsa -out mykey.pem 1024
openssl rsa -in mykey.pem -pubout > mykey.pub
Meu pensamento inicial era que eles são gerados em um par juntos. A chave privada RSA contém a soma? ou a chave pública?
Respostas:
realmente produzirá um par de chaves público-privado. O par é armazenado no
mykey.pem
arquivo gerado .extrairá a chave pública e a imprimirá. Aqui está um link para uma página que descreve isso melhor.
EDIT: Verifique a seção de exemplos aqui . Para gerar apenas a parte pública de uma chave privada:
Para obter uma chave pública utilizável para fins de SSH, use ssh-keygen :
fonte
e
ed
na literatura comum). Nenhum deles é matematicamente privado ou público; esses são rótulos que são arbitrariamente atribuídos na criação. Eles poderiam facilmente ser atribuídos ao contrário. Gerar um a partir do outro é um problema equivalente. O.pem
formato contém um monte de informações, incluindo os dois expoentes e as duas teclas, certo?openssl genrsa
comando Um arquivo de chave pública separado não é criado na mesma etapa. Para extrair a chave pública do arquivo de chave privada em um arquivo de chave pública separado, use seuopenssl rsa -in private.pem -pubout -out public.pem
comando. Quando você produz uma chave pública dessa maneira, ela é extraída do arquivo de chave privada, não calculada. Veja minha resposta abaixo para mais detalhes.Pessoas que procuram chave pública SSH ...
Se você deseja extrair a chave pública para uso com o OpenSSH, precisará obter a chave pública de maneira um pouco diferente
Esse formato de chave pública é compatível com o OpenSSH. Acrescente a chave pública
remote:~/.ssh/authorized_keys
e você estará prontodocumentos de
SSH-KEYGEN(1)
fonte
openssl rsa -in key.pem -pubout -out pubkey.pem
não foi aceita, pois evidentemente a saída dessa é uma chave pública no formato pem. Então, recebi o seguinte erro: "A chave é inválida. Ela deve começar com 'ssh-rsa' ou 'ssh-dss'. Verifique se você está copiando a metade pública da chave". No entanto,ssh-keygen -y [-f input_keyfile]
gera o formato correto utilizado pelo Github.Na maioria dos softwares que gera chaves privadas RSA, incluindo openssl, a chave privada é representada como um objeto RSAPrivatekey PKCS # 1 ou alguma variante do mesmo:
Como você pode ver, esse formato possui vários campos, incluindo o módulo e o expoente público e, portanto, é um superconjunto estrito das informações em uma chave pública RSA .
fonte
Minha resposta abaixo é um pouco longa, mas espero que ele forneça alguns detalhes que estão faltando nas respostas anteriores. Vou começar com algumas afirmações relacionadas e, finalmente, responder à pergunta inicial.
Para criptografar algo usando o algoritmo RSA, você precisa de um módulo e um par de expoentes de criptografia (público) (n, e). Essa é a sua chave pública. Para descriptografar algo usando o algoritmo RSA, você precisa de um módulo e um par de expoentes de descriptografia (privado) (n, d). Essa é a sua chave privada.
Para criptografar algo usando a chave pública RSA, você trata seu texto sem formatação como um número e o eleva ao poder do módulo n:
Para descriptografar algo usando a chave privada RSA, você trata o texto cifrado como um número e o eleva ao poder do módulo d:
Para gerar chave privada (d, n) usando o openssl, você pode usar o seguinte comando:
Para gerar chave pública (e, n) a partir da chave privada usando o openssl, você pode usar o seguinte comando:
Para dissecar o conteúdo da chave RSA privada private.pem gerada pelo comando openssl acima, execute o seguinte (saída truncada para os rótulos aqui):
A chave privada não deve consistir apenas em (n, d) par? Por que existem 6 componentes extras? Ele contém e (expoente público) para que a chave RSA pública possa ser gerada / extraída / derivada da chave RSA privada private.pem. Os demais 5 componentes estão lá para acelerar o processo de descriptografia. Acontece que, ao pré-computar e armazenar esses 5 valores, é possível acelerar a descriptografia do RSA pelo fator 4. A descriptografia funcionará sem esses 5 componentes, mas poderá ser feita mais rapidamente, se você os tiver à mão. O algoritmo de aceleração é baseado no teorema chinês do restante .
Sim, a chave privada RSA private.pem realmente contém todos esses 8 valores; nenhum deles é gerado rapidamente quando você executa o comando anterior. Tente executar os seguintes comandos e compare a saída:
Essa estrutura da chave privada RSA é recomendada pelo PKCS # 1 v1.5 como uma representação alternativa ( segunda ). O padrão PKCS # 1 v2.0 exclui os expoentes e ed da representação alternativa por completo. O PKCS # 1 v2.1 e v2.2 propõem mudanças adicionais na representação alternativa, incluindo opcionalmente mais componentes relacionados ao CRT.
Para ver o conteúdo da chave public.pem public RSA, execute o seguinte (saída truncada para rótulos aqui):
Não há surpresas aqui. É apenas (n, e) par, como prometido.
Agora, finalmente, respondendo à pergunta inicial: Como foi mostrado acima, a chave RSA privada gerada usando o openssl contém componentes das chaves pública e privada e um pouco mais. Quando você gera / extrai / deriva uma chave pública da chave privada, o openssl copia dois desses componentes (e, n) em um arquivo separado que se torna sua chave pública.
fonte
e
é sempre 655370x010001
. Provavelmente é um defeito para a escolha do expoente público e é provavelmente por isso que na página de manual e em quase todos os lugaresgenrsa
é explicado comoto generate the private key
. O público é meio óbvio.A chave pública não é armazenada no arquivo PEM, como algumas pessoas pensam. A seguinte estrutura DER está presente no arquivo de chave privada:
Portanto, existem dados suficientes para calcular a chave pública (módulo e expoente público), que é o que
openssl rsa -in mykey.pem -pubout
fazfonte
aqui neste código, primeiro estamos criando a chave RSA que é privada, mas ela também possui um par de sua chave pública. Para obter sua chave pública real, basta fazer isso
espero que você o obtenha para obter mais informações, verifique isso
fonte
Em primeiro lugar, uma rápida recapitulação da geração de chaves RSA.
A chave pública consiste no módulo e no expoente público.
Uma chave privada mínima consistiria no módulo e no expoente privado. Não existe um caminho certo computacionalmente viável para passar de um módulo conhecido e expoente privado para o expoente público correspondente.
Contudo:
Portanto, na maioria das implementações práticas de RSA, você pode obter a chave pública da chave privada. Seria possível construir um sistema de criptografia baseado em RSA onde isso não fosse possível, mas não é o que está feito.
fonte
fonte