Pergunta

Desde o pouco eu entendo, lendo vários materiais, par de chaves pública e privada são a base da criptografia assimétrica e também algo sobre a escolha de 2 números primos (que é aproximadamente a sua chave privada) e multiplicando-los (que é aproximadamente a sua chave pública ), eu parece que é possível gerar uma chave pública se você sabe a chave privada. É correto ou estou confundindo algo?

[EDIT]

O que me deixou mais confuso foi que não é possível serializar a chave RSA para XML com o única chave privada (usando .NET RSACryptoServiceProvider classe). Não tenho certeza se esta limitação é intencional ou não!

Foi útil?

Solução

Isso depende do sistema de criptografia.

Em RSA , temos (citando Wikipedia):

A chave pública consiste no módulo n e o público (ou criptografia) expoente. o chave privada consiste no módulo n e o particular (ou descodificação) expoente d quais deve ser mantido em segredo.

Agora, se tivermos n e d (a chave privada), estamos só faltam e para a chave pública. Mas e muitas vezes é bastante pequena (menos de três dígitos), ou mesmo fixo (um valor comum é 65537). Nestes casos, ficando a chave pública é trivial.

Para Elliptic Curve Diffie-Hellman , a chave privada é d, e a chave pública dG (com G também público), por isso é trivial assim.

Outras dicas

Na maioria implementação do sistema de criptografia assimétrica, o único fato que é garantida é que você não consegue encontrar a chave privada a partir da chave pública. Ao contrário, encontrar a chave pública da chave privada é trivial na maioria dos casos.

Por exemplo, na RSA, você pode criar a chave pública de chave privada com:

openssl rsa -in private.pem -pubout -out public.pem

O que é enganador é a terminologia: "chave privada" refere-se a 2 conceitos diferentes se você está falando da teoria, ou o tempo que você está falando de implementação prática:

  • O teórica chave privada é o casal (d, n) que ações simétrica perfeita (matemática) relação com o (e, n) . Se você está comparando estes, um não pode ser calculado a partir do outro.
  • O prático chave privada (como na aplicação openssl por exemplo), refere-se a um arquivo que contém (d, n) , mas também vários valores intermédios importantes para descodificar finalidade velocidade . Além disso, a parte teoricamente "desconhecido" da chave pública e é muitas vezes fixado em valores comuns por convenção (que é 0x10001 por padrão no openssl e embora ele pode ser alterado, é altamente recomendável a usar apenas muito valores específicos ). Então deduzir a chave pública (e, n) a partir da chave privada é trivial para mais de uma razão.

Depende do algoritmo, eo que você quer dizer com "chave privada".

chaves privadas RSA são frequentemente armazenados em sua forma "Restante chinês Teorema". Por exemplo, a estrutura RSAPrivateKey definido em PKCS # 1 e re-utilizado por muitos outros padrões de criptografia tomar esta forma. Este formulário inclui os dois números secretos muitas vezes denotado p e q, a partir do qual o totient é computado. Com totient eo expoente privado, o expoente público é rapidamente calculado.

Em qualquer caso, a maioria dos pares de chaves RSA usar 65537 como o expoente público, e o módulo é sempre realizada como parte da chave privada.

Em qualquer sistema de criptografia de chave pública a chave pública é matematicamente relacionado com a chave privada. É muito simples.

A chave pública é derivada da chave privada em tempo de geração, e com a chave privada a qualquer momento no futuro é possível re-extrair a chave pública com facilidade.

Não é viável para ir para o outro lado. Dada uma chave pública não é fácil de obter a chave privada. É por isso que nós podemos seguramente compartilhar chaves públicas com outras pessoas. Se você tem ciclos de tempo / CPU suficientes você pode força bruta, mas é provavelmente mais fácil de esperar por um ataque de matemática na chave.

Para o caso específico de OpenSSH e ssh-keygen , sim você pode :

ssh-keygen -y

Esta opção irá ler um arquivo de formato OpenSSH privado e imprimir uma chave pública para stdout.


Geralmente, isso depende do algoritmo eo que você rotular a chave privada. No entanto, qualquer aplicação sensata irá incluir as informações completas (públicas e chaves privadas) no arquivo secreto.

Há um equívoco sobre o que a chave privada é. A chave privada é apenas a (d, n) par e, dado só isso, é inviável para gerar a chave pública a partir dele, a menos que você pode assumir que o expoente público é 65537, que é o caso em quase todas as chaves RSA.

Se, por qualquer motivo, o expoente público é um número maior que você não pode criar a chave pública do privado.

Dito isso, o valor armazenado como "chave privada" para arquivos PEM não é apenas a chave privada, mas também contém os fatores primos (entre outras coisas) e, portanto, é fácil para gerar a chave pública a partir dele.

Sim com acesso à chave privada a chave pública pode ser gerado

chave pública é o módulo N (e expoente público e, geralmente 65537), chave privada é dada pelos dois primos p, q (e expoente d privado, por vezes, também partes CRT D_P, d_q para aceleração) Essencialmente, você tem N = pq e e d = 1 mod ((p-1) (q-1)), você pode também D_P computação e d_q usando CRT dada chave privada, cálculo do módulo de chave pública é "chato" multiplicação e expoente público é na especificação ou calculado usando o algoritmo de Euclides estendido se padrão e não era bom o suficiente. dada a chave pública, cálculo de chave privada exige quer constatação d (problema RSA) ou p, q (factoring, ver campo de número peneira para melhor algo para fazer isso). Estes problemas são mostradas para ser equivalente em condições razoáveis ??[Partir RSA Genericamente é equivalente a Factoring, D. Aggarwal e U. Maurer, 2008]

É teoricamente possível, mas para chaves grandes computacionalmente inviável.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top