Pelo que me lembro, você criptografou a mensagem usando a chave pública e a descriptografou usando a chave privada. Minha pergunta é se é possível obter uma chave pública de uma chave privada RSA. Por exemplo, se eu tiver uma chave como esta:

-----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQCtrKVnwse4anfX+JzM7imShXZUC+QBXQ11A5bOWwHFkXc4nTfE Or3fJjnRSU5A3IROFU/pVVNiXJNkl7qQZK5mYb8j3NgqX8zZJG7IwLJ/Pm2sRW5Q j32C/uJum64Q/iEIsCg/mJjDLh1lylEMEuzKgTdWtoeLfxDBL2AJ20qXzQIDAQAB AoGBAKNXi0GpmjnCOPDxLFg5bvQVfhLSFCGMKQny1DVEtsfgZmbixv5R2R41T4+d CHJMdEsUFFJ6I7CRLTcg1SDU8IhcAWCBRSNeVuomCHlQG16ti8HxwhiwIcjvDz/z NC2sL5ZJ2eJnhbtXLdf6pxxO1pA5vLp1AX06IaETO977XvupAkEA+ZgtGZybyUkf tEA3ekXc5eLoW+zgU0C1fATWcIZ8Iq5YV1BW+3oAzf8HgIbkQh4LM2qa6An3l+vW NXR4wICHkwJBALIhrcdJqKw36qiyenq+m78klp5SnurQifVt0Sy1GMWyOUqYz5jK t9sGo9Qn6GDuYe/XGXKWQW25PkEYXxxPPx8CQQCpICyvRidp5VrOURVGjUB5pZ+9 am02/In9V2nXJcnH1kuWHqJSFQGmlEEJHl5dTu5YEMyWnupezzd/UUThbDZxAkAz TNO5QxNalbf04YG4e9Bq2eSur+iog2pXzkqhb3404UDypNOUkz0jzOO9o8ieschu xCnGAFPTf7fYE2bAxmnNAkEA0/3bdsvJclquypqP9CQeQnxGwQtWz6+yn07gj3U1 V19mdeKCUZWklRarrcr67u9DdEx+JowyEY/ppzgeQtW01g== -----END RSA PRIVATE KEY----- 

posso obter uma chave pública?

Comentários

  • Esta chave agora vazou para a Internet e não é mais segura para uso fora dos exemplos, apenas para você perceber isso.
  • ” Aqui está a chave da minha casa. Quem quer fazer uma cópia? ”
  • Espero que o OP gere uma chave de exemplo apenas para uso nesta questão e a descarte imediatamente.
  • @ basic6 ” Aqui está a chave da minha casa. Como faço para criar um cadeado para ele? ”
  • Você precisa esclarecer se ‘ está perguntando sobre apenas a chave privada (caso em que a resposta é não) ou o arquivo da chave privada , que por convenção (como aqui) inclui ambas as chaves.

Resposta

posso obter uma chave pública?

É fácil usar openssl rsa:

$ openssl rsa -in the-private-key-from-your-question.pem -pubout writing RSA key -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtrKVnwse4anfX+JzM7imShXZU C+QBXQ11A5bOWwHFkXc4nTfEOr3fJjnRSU5A3IROFU/pVVNiXJNkl7qQZK5mYb8j 3NgqX8zZJG7IwLJ/Pm2sRW5Qj32C/uJum64Q/iEIsCg/mJjDLh1lylEMEuzKgTdW toeLfxDBL2AJ20qXzQIDAQAB -----END PUBLIC KEY--- 

Se quiser ter uma ideia do que está contido em um arquivo de chave, você pode passar a opção -text para ver um despejo de depuração legível por humanos (tipo de). Desta forma, você pode veja se um arquivo de chave contém informações privadas, mas também informações públicas. Especialmente, ele contém o módulo e publicExponent que descreve completamente a chave pública:

$ openssl rsa -text -in the-private-key-from-your-question.pem Private-Key: (1024 bit) modulus: 00:ad:ac:a5:67:c2:c7:b8:6a:77:d7:f8:9c:cc:ee: 29:92:85:76:54:0b:e4:01:5d:0d:75:03:96:ce:5b: 01:c5:91:77:38:9d:37:c4:3a:bd:df:26:39:d1:49: 4e:40:dc:84:4e:15:4f:e9:55:53:62:5c:93:64:97: ba:90:64:ae:66:61:bf:23:dc:d8:2a:5f:cc:d9:24: 6e:c8:c0:b2:7f:3e:6d:ac:45:6e:50:8f:7d:82:fe: e2:6e:9b:ae:10:fe:21:08:b0:28:3f:98:98:c3:2e: 1d:65:ca:51:0c:12:ec:ca:81:37:56:b6:87:8b:7f: 10:c1:2f:60:09:db:4a:97:cd publicExponent: 65537 (0x10001) privateExponent: (…) 

Comentários

  • @Pysis: esta resposta não é sobre ” encontrar ” o público a partir da chave pública. É simples que todas as informações necessárias para a parte privada e pública sejam armazenadas no arquivo de chave privada. No arquivo de chave pública, ao invés, todas as informações relacionadas à parte privada estão faltando.
  • @Pysis Esta é criptografia assimétrica .
  • @Pysis Sim, a criptografia assimétrica é ” ligeiramente assimétrico “.
  • @SteffenUllrich Essa frase deve fazer parte da sua resposta
  • @Mehrdad: no contexto da segurança da informação do mundo real, qualquer coisa que seja praticamente inviável é considerada inviável. A segurança da teoria da informação é irrelevante aqui, uma vez que assume um poder de computação ilimitado que simplesmente não existe. Assim, todas as informações relacionadas à parte privada estão faltando devem ser lidas como todas as informações que tornam possível na prática derivar a chave privada estão faltando .

Resposta

Na prática, sim, você pode obtenha a chave pública da chave privada. Em princípio, seria possível criar uma chave privada RSA a partir da qual a chave pública correspondente não pode ser facilmente obtido, mas isso exigiria o uso de um método de geração de chave não padrão e um formato de armazenamento de chave privada não padrão.


Vamos revisar rapidamente o básico. Uma chave pública RSA consiste em dois valores:

  • o módulo n (um produto de dois grandes primos secretamente escolhidos p e q ), e
  • o expoente público e (que pode ser o mesmo para muitas chaves e é normalmente escolhido para ser um primo ímpar pequeno, mais comumente 3 ou 2 16 +1 = 6 5537).

Uma chave privada RSA, entretanto, requer no mínimo os seguintes dois valores:

  • o módulo n (o mesmo que na chave pública), e
  • o expoente privado d (calculado a partir do expoente público e e os fatores p e q do módulo).

No entanto, a maioria dos formatos para armazenar chaves privadas RSA, incluindo o PKCS1 formato RSAPrivateKey mostrado em sua pergunta, na verdade armazena vários valores adicionais também, incluindo:

  • o expoente público e ,
  • os fatores p e q do módulo,
  • os expoentes privados reduzidos d p = d mod ( p − 1) e dq = d mod ( q − 1), e
  • o ” coeficiente CRT “ q inv = q − 1 mod p .

Em particular, a inclusão do expoente público e no formato de chave privada significa que a chave pública pode ser extraída trivialmente de um arquivo de chave privada compatível com PKCS1.Além disso, mesmo se o expoente público e não foi incluído no arquivo de chave privada, conhecer os fatores p e q do módulo permite qualquer expoente para ser facilmente calculado a partir do outro. E, finalmente, mesmo que não soubéssemos os fatores do módulo, para chaves RSA geradas da maneira usual, poderíamos simplesmente testar os valores mais comumente usados de e e ver qual deles gera textos criptografados que podem ser descriptografados corretamente usando a chave privada fornecida.


Dito isso, se fôssemos usar um algoritmo de geração de chave RSA não padrão que escolhesse e ( ou d ) aleatoriamente a partir do intervalo admissível de valores (ou seja, os inteiros maiores que 1 e menores que e coprime com λ ( n ) = lcm ( p − 1, q − 1)), e se usamos um formato de chave privada RSA não padrão que armazenava apenas as informações mínimas para descriptografia (ou seja, n e d ), então não seria possível calcular a chave pública a partir da chave privada sem efetivamente quebrar a chave (ou seja, fatorar o módulo).

De fato, se usado em tal homem não padrão ner, o algoritmo RSA se torna “simétrico” no sentido de que nenhuma das chaves ( n , e ) e ( n , d ) pode ser efetivamente calculado a partir do outro e qualquer um deles pode ser arbitrariamente designado como a chave privada. Em princípio, se você não deixasse o detentor da chave privada saber a chave “pública” correspondente (o que, é claro, significa que ela não seria mais pública), então eles poderiam apenas descriptografar as mensagens, mas não criptografá-las. Infelizmente, a utilidade prática de qualquer esquema desse tipo é bastante limitada pelo simples fato de que quem quer que gere o par de chaves inevitavelmente acabará conhecendo as duas metades dele de qualquer maneira.

Comentários

  • Eu franzo a testa sobre a última frase. Como e é considerado público de qualquer maneira, não se esquecendo de e (ep e q) dificilmente pode ser considerado uma porta dos fundos disponível para o dono da chave privada. (E se um adversário obtiver a chave privada d, ele também terá a chave pública e e ganhou)
  • @HagenvonEitzen: O último parágrafo está falando sobre o caso de uso (não padrão) em que e não é nem público nem pequeno .
  • @HagenvonEitzen: Na verdade, eu mencionei esse problema na postagem do crypto.SE vinculada. Qualquer esquema que dependa da chave ” public ” não sendo derivável da ” privada ” chave deve necessariamente manter o segredo de chave ” público ” de pelo menos algumas partes ( e, portanto, violar uma das premissas padrão da criptografia de chave pública para que esse recurso seja útil. Mas posso ver como esse parágrafo pode ter sido enganoso; espero que a versão reescrita seja pelo menos um pouco mais clara.
  • RSA tem uma propriedade matemática interessante de que a descriptografia usa a mesma fórmula da criptografia, apenas com d em vez de e. Graças a isso, você pode trocar e e d (ou seja, usar a chave privada para criptografar e a pública para descriptografar). Então você obtém o esquema de assinatura eletrônica.

Resposta

Sim. É muito fácil também. Se você olhar a especificação RSA, uma chave pública precisa de n e e. Uma chave privada pode ter p q d. Use-os para calcular.

n=p*q e=mod_inverse(d,euler_totient(n)) 

Se você quiser empacotá-los em um formato PEM, consulte https://github.com/ius/rsatool

Comentários

  • Moldada como uma resposta matemática, isso está errado. Uma chave privada poderia ter apenas n e d e, a partir disso, é impossível em geral, calcular e. É ‘ geralmente possível na prática apenas porque e é quase sempre selecionado entre um punhado de valores. Apresentado como uma resposta prática, isso está errado: e é, na prática, sempre incluído com os outros parâmetros (pelo menos n e d, geralmente também os parâmetros necessários para cálculos baseados em CRT).
  • Concordo, mas praticamente RSA com chaves privadas CRT são normalmente armazenadas como uma tupla de (n, e, d, p, q, dP, dQ, qInv) que é o caso aqui. Eu estava apenas tentando definir os componentes matematicamente.
  • Sim: praticamente, as chaves privadas são normalmente armazenadas como uma tupla que contém e . Não há necessidade de calcular e.
  • @Gilles do post: ” uma chave pública precisa de n e e.” e de sudhackar ‘ s comentário: ” mas praticamente RSA com chaves privadas CRT são geralmente armazenado como uma tupla de (n, e, d, p, q, dP, dQ, qlnv) “, o que me leva à conclusão de que praticamente, as chaves privadas são geralmente armazenadas como uma tupla que contém a chave privada . Não há necessidade de calcular a chave privada, tornando irrelevante toda a questão e todas as suas respostas. Não ‘ não entendo seu comentário mais recente. sudhackar ‘ a resposta está mostrando como encontrar o conjunto de chaves públicas possíveis a partir da informação menos útil possível.
  • @ wizzwizz4 Se você tiver p, q e d , você tem mais do que as informações menos úteis possíveis para uma chave privada. Eu ‘ nunca vi chaves privadas com p, q e d, mas não com n e e. Você precisa de n para fazer qualquer coisa útil com a chave e armazenar peq em vez de n ‘ não ganha nenhum tipo de armazenamento.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *