Pergunta

O que é a diferença entre a criptografia de alguns dados vs assinar alguns dados (usando RSA)?

Será que simplesmente inverter o papel das chaves público-privadas?

Por exemplo, eu quero usar a minha chave privada para gerar mensagens para que apenas eu possa ser o remetente. Eu quero minha chave pública para ser usado para ler as mensagens e eu não me importo quem lê-los. Eu quero ser capaz de criptografar certas informações e usá-lo como uma chave de produto para o meu software. Eu só me importo que eu sou o único que pode gerar estes. Eu gostaria de incluir minha chave pública no meu software para decodificar / ler a assinatura da chave. Eu não me importo quem pode ler os dados na chave, eu só me importo que eu sou o só verificáveis ??que podem gerá-los.

está assinando útil neste cenário?

Foi útil?

Solução

Ao criptografar, você usa sua chave pública para escrever uma mensagem e eles usam sua chave privada para lê-lo.

Ao assinar, você usa sua chave privada para a assinatura de mensagem escrita, e eles usam sua chave pública para verificar se ele é realmente seu.

Eu quero usar minha chave privada para gerar mensagens para que apenas eu possa ser o remetente.

Eu quero minha chave pública para ser usado para ler as mensagens e eu não me importo quem lê-los

Esta é Como inscrever , que é feito com a sua chave privada.

Eu quero ser capaz de criptografar certas informações e usá-lo como uma chave de produto para o meu software.

Eu só me importo que eu sou o único que pode gerar estes.

Se você só precisa de saber isso a si mesmo, você não precisa mexer com chaves para fazer isso. Você pode apenas gerar dados aleatórios e mantê-lo em um banco de dados.

Mas se você quer que as pessoas saibam que as chaves são realmente seu, você precisa para gerar dados aleatórios, manter nele um banco de dados e assiná-lo com sua chave.

Eu gostaria de incluir minha chave pública no meu software para descriptografar / ler a assinatura da chave.

Você provavelmente vai precisar comprar um certificado para a chave pública de um provedor comercial como Verisign ou Thawte, para que as pessoas podem verificar que ninguém tinha forjado o seu software e substituído sua chave pública com a deles.

Outras dicas

Em RSA criptografia, quando você gerar um par de chaves, é completamente arbitrária que você escolher para ser a chave pública, e que é a chave privada. Se você criptografar com um, você pode decifrar com o outro -. Ele funciona em ambas as direções

Assim, é bastante simples para ver como você pode criptografar uma mensagem com o pública do receptor chave, de modo que o receptor pode decifrá-lo com a sua chave privada .

A assinatura é a prova de que o assinante tem a chave privada que corresponde alguns chave pública. Para fazer isso, seria suficiente para criptografar a mensagem com que o remetente chave privada , e incluem a versão criptografada ao lado da versão de texto simples. Para verificar o remetente, descriptografar a versão criptografada e verificar se é o mesmo que o texto simples.

Claro, isso significa que a sua mensagem não é segredo. Qualquer um pode decifrá-lo, porque a chave pública é bem conhecida. Mas quando o fazem, eles provaram que o criador do texto cifrado tem a chave privada correspondente.

No entanto, isso significa dobrar o tamanho de sua transmissão - texto simples e encriptado juntos (supondo que você quer que as pessoas que não estão interessados ??em verificar a assinatura, para ler a mensagem). Então, ao invés, tipicamente uma assinatura é criado através da criação de um de hash do texto original. É importante que os hashes de falsos não pode ser criado, algoritmos de hash tão criptográficos, como SHA-2 são utilizados.

Assim:

  • Para gerar uma assinatura, fazer um hash do texto simples, criptografá-lo com sua chave privada, incluem-lo juntamente com o texto original.
  • Para verificar uma assinatura, fazer um hash do texto simples, descriptografar a assinatura com a chave pública do remetente, verifique se ambos os hashes são os mesmos.

Sim pensar em assinar dados como dando-lhe seu próprio selo de cera que ninguém mais tem. Ele é feito para alcançar integridade e não repúdio . A criptografia é para que ninguém mais pode ver os dados. Isto é feito para alcançar confidencialidade . Veja wikipedia http://en.wikipedia.org/wiki/Information_security#Key_concepts

A assinatura é um hash de sua mensagem assinada com sua chave privada.

Assinatura está produzindo um "haxixe" com a sua chave privada que pode ser verificada com a chave pública. O texto é enviado em claro.

Encrypting usa a chave pública do destinatário para criptografar os dados; A decodificação é feito com a sua chave privada.

Assim, o uso de chaves não é invertida (de outra forma a sua chave privada não seria privado mais!).

Existem dois problemas distintos, mas estreitamente relacionados em estabelecer uma comunicação segura

  1. Criptografar dados de modo que apenas pessoas autorizadas podem descriptografar e lê-lo.
  2. Verifique a identidade / autenticação de remetente.

Ambos os problemas podem ser elegantemente resolvido usando criptografia de chave pública.

I. Criptografia e descriptografia de dados

Alice quer enviar uma mensagem para Bob que ninguém deve ser capaz de ler.

  • Alice criptografa a mensagem com a chave pública de Bob e envia-lo.
  • Bob recebe a mensagem e decifra-lo usando sua chave privada.

Note que, se A quer enviar uma mensagem para B, A precisa usar o Público chave de B (que está publicamente disponível a qualquer um) e nem do público nem chave privada de um entra em cena aqui.

Então, se você quiser enviar uma mensagem para mim que você deve conhecer e usar a minha chave pública, que eu fornecer a você e só serei capaz de decifrar a mensagem desde que eu sou o único que tem acesso à chave privada correspondente .

II. Verifique a identidade do remetente (autenticação)

Alice quer enviar uma mensagem para Bob novamente. O problema de criptografar os dados são resolvidos utilizando o método acima.

Mas o que se eu estou sentado entre Alice e Bob, apresentando-me como 'Alice' de Bob e enviar minha própria mensagem para Bob em vez de encaminhá o enviado de Alice. Mesmo que eu não posso descriptografar e ler a mensagem original enviada por Alice (que requer acesso à chave privada de Bob) Eu estou sequestrando toda a conversa entre eles.

Existe uma maneira Bob pode confirmar que as mensagens que está recebendo são realmente enviados por Alice?

  • Alice assina a mensagem com sua chave privada e envia-lo. (Na prática, o que é assinado é um hash da mensagem, por exemplo, SHA-256 ou SHA-512).
  • Bob recebe e verifica-lo usando a chave pública de Alice. Desde a chave pública de Alice verificou com êxito a mensagem, Bob pode-se concluir que a mensagem foi assinada por Alice.

Assinatura indica que você realmente é a fonte ou atestar do objeto assinado. Todos podem ler o objeto, no entanto.

A criptografia meios apenas aqueles com a chave privada correspondente pode lê-lo, mas sem assinar não há garantia de que você está atrás do objeto criptografado.

Você está descrevendo exatamente como e por assinatura é utilizado em criptografia de chave pública. Note-se que é muito perigoso para assinar (ou criptografar) mensagens aritrary fornecidos por outros -. Isto permite ataques sobre os algoritmos que possam comprometer suas chaves

No seu cenário, você não criptografar no significado de criptografia assimétrica; Eu prefiro chamá-lo de "codificação".

Assim você codificar seus dados em alguma representação binária, então você assina com sua chave privada. Se você não pode verificar a assinatura através de sua chave pública, você sabe que os dados assinados não é gerado com sua chave privada. ( "Verificação" o que significa que os dados não assinado não é significativo)

Funcionalmente, você usa criptografia de chave pública / privada para ter certeza somente o receptor pode ler sua mensagem. A mensagem é criptografada, então, criptografada usando a chave pública do receptor.

A assinatura que você usa para deixar o receptor saber que você criou a mensagem e ele não mudou durante a transferência. A assinatura de mensagens é feito usando sua própria chave privada.

Como para o algoritmo usado: este involes primeiros-números. Eu faria uma busca no Google para uma explicação melhor.

O que é a diferença entre a criptografia de alguns dados vs assinar alguns dados (usando RSA)?

conservas de criptografia confidencialidade da mensagem ( "alguns dados"), enquanto a assinatura fornece não-repúdio: ou seja, apenas a entidade que assinou poderia ter assinado. Existem diferenças funcionais bem; continue a ler.

Será que simplesmente inverter o papel das chaves público-privadas?

Claro que não. O uso das mesmas chaves privadas de assinatura e descriptografia (ou, do mesmo modo, as mesmas chaves públicas para verificação e criptografia ) é desaprovada, como você não deve misturar fins. Esta não é tanto uma questão de matemática (RSA devem ainda ser seguro), mas um problema com gerenciamento de chave , onde por exemplo a chave de assinatura deve ter um viver mais curto e conter mais proteção antes de ser usado.

Para a mesma mensagem, você deve usar os remetentes chave privada para a assinatura e os receptores de confiança chave pública para criptografia. Comumente sinal-então-criptografar é usado de outra forma um adversário poderia substituir a assinatura com a sua própria. Da mesma forma você deve usar a chave privada do receptor para a descodificação e a confiável chave pública do remetente para verificação.

Além disso, você deve compreender que a geração de assinatura não use "criptografia com a chave privada". Apesar de todas as operações da RSA são baseados em exponenciação modular, o sistema de preenchimento é totalmente diferente para a geração de assinatura. Além disso, a chave pública tem propriedades completamente diferentes do que a chave privada RSA em todos os usos práticos da RSA.

Por exemplo, eu quero usar a minha chave privada para gerar mensagens para que apenas eu possa ser o remetente.

Isso é propriedade de não-repúdio, o que pode ser alcançado por assinatura.

Eu quero minha chave pública para ser usado para ler as mensagens e eu não me importo quem lê-los.

A chave pública deve ser considerada conhecido por todos. Se você quiser que todos possam ler as mensagens, então você simplesmente não criptografá-los.

Assinatura geralmente não vai influenciar o conteúdo da mensagem. A mensagem é considerada separada de assinaturas. Oficialmente tais assinaturas são conhecidos como "assinaturas com o apêndice" onde o apêndice é a mensagem. É um nome estranho pouco como a mensagem é considerada mais importante do que a assinatura sobre ele, mas sim. Apenas alguns assinaturas oferecer recuperação (parcial) da mensagem; eles não são usados ??muito mais e, geralmente, são considerados obsoletos.

Note que os protocolos de assinatura como o CMS pode implantar um formato contêiner , que inclui tanto a mensagem ea assinatura. Nesse caso, você precisa pegar o primeiro - ainda sem criptografia - mensagem para fora do recipiente, bem como descompactar um arquivo de um arquivo .zip simples. Portanto, a mensagem pode ser escondido da vista e não pode ser usado diretamente nesse caso.

Eu quero ser capaz de criptografar certas informações e usá-lo como uma chave de produto para o meu software. Eu só me importo que eu sou o único que pode gerar estes.

A criptografia é usada para alcançar a confidencialidade. No passado geração de assinatura RSA foi muitas vezes considerado como "criptografia com a chave privada". No entanto, as operações são bastante diferentes, como explicado acima, e as normas posteriores tentam desesperadamente e geração de criptografia e assinatura separada.

Eu gostaria de incluir minha chave pública no meu software para descriptografar / ler a assinatura da chave. Eu não me importo quem pode ler os dados na chave, eu só me importo que eu sou o só verificáveis ??que podem gerá-los.

Sim, isso é chamado de estabelecer Confiança na chave pública. No entanto, protegendo seu código de programa é muito diferente de proteger as mensagens. Você pode executar assinatura de código , mas então você precisa de algo para verificar the assinatura fora do seu código . Há sistemas operacionais que oferecem este.

Há Microsoft Authenticode por exemplo. lojas de aplicativos como a App Store iStore e Android pode ou não utilizar a assinatura de código, mas eles oferecem alguma garantia de que a sua aplicação não é clonado ou pelo menos não clonado dentro da loja. Cryptography nem sempre é a solução depois de tudo.

Mantendo o seu código seja clonado / alterado em tudo é muito mais difícil, e você estaria solidamente em território DRM se você ir por esse caminho.

está assinando útil neste cenário?

Sim, absolutamente. Ele certamente pode ajudar a garantir que as mensagens só foram assinados por você, se houver confiança na chave pública. Se ele pode ser útil para autenticar a sua / chave pública integrada código do aplicativo depende inteiramente do ambiente que você pretende executar o código.

Responder a esta pergunta no conteúdo que os interrogadores intenção era usar a solução para licenciamento de software, os requisitos são:

  1. No 3o partido pode produzir uma chave de licença de Decompiling o aplicativo
  2. O conteúdo da chave de software não precisa ser seguro
  3. chave de software não é legível

Uma assinatura digital vai resolver esta questão como os dados brutos que faz com que a chave pode ser assinado com uma chave privada que faz com que não legível, mas poderia ser decodificado se engenharia reversa. Mas a chave privada é seguro que significa que ninguém será capaz de fazer de licenças do software (que é o ponto).

Lembre-se que você não pode impedir uma pessoa qualificada de remover os bloqueios de software no seu produto. Então, se eles tem que cortar cada versão que é liberado. Mas você realmente não quer que eles sejam capazes de gerar novas chaves de seu produto que podem ser compartilhados para todas as versões.

Python A documentação PyNaCl tem um exemplo de 'Assinatura digital', que irá suite o efeito. http://pynacl.readthedocs.org/en/latest/signing/

e da causa projecto de NaCl para os exemplos C

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