Qual é a diferença entre criptografar alguns dados e assinar alguns dados (usando o RSA)?
A criptografia preserva a confidencialidade da mensagem ("alguns dados"), enquanto a assinatura fornece não-repúdio: ou seja, apenas a entidade que a assinou poderia ter assinado. Também existem diferenças funcionais; Leia.
Simplesmente reverte o papel das chaves público-privadas?
Absolutamente não. O uso das mesmas chaves privadas para assinatura e descriptografia (ou, da mesma forma, as mesmas chaves públicas para verificação e criptografia ) é desaprovado, pois você não deve misturar finalidades. Isso não é um problema matemático (o RSA ainda deve estar seguro), mas um problema com o gerenciamento de chaves , onde, por exemplo, a chave de assinatura deve ter uma vida útil mais curta e conter mais proteção antes de ser usada.
Para a mesma mensagem, você deve usar a chave privada do remetente para assinar e a chave pública confiável do destinatário para criptografia. Geralmente, assinar e criptografar é usado, caso contrário, um adversário pode substituir a assinatura pela sua. Da mesma forma, você deve usar a chave privada do destinatário para descriptografia e a chave pública confiável do remetente para verificação.
Além disso, você deve entender que a geração de assinaturas não usa "criptografia com a chave privada". Embora todas as operações da RSA sejam baseadas na exponenciação modular, o esquema de preenchimento é totalmente diferente para a geração de assinaturas. Além disso, a chave pública possui propriedades totalmente diferentes da chave privada RSA em todos os usos práticos do RSA.
Por exemplo, quero usar minha chave privada para gerar mensagens, para que apenas eu possa ser o remetente.
Essa é uma propriedade de não repúdio, que pode ser alcançada com a assinatura.
Quero que minha chave pública seja usada para ler as mensagens e não me importo com quem as lê.
A chave pública deve ser considerada conhecida por todos. Se você deseja que todos leiam as mensagens, simplesmente não as criptografa.
A assinatura geralmente não influencia o conteúdo da mensagem. A mensagem é considerada separada das assinaturas. Oficialmente, essas assinaturas são conhecidas como "assinaturas com apêndice", onde o apêndice é a mensagem. É um nome um pouco estranho, pois a mensagem é considerada mais importante que a assinatura, mas sim. Apenas poucas assinaturas oferecem recuperação (parcial) de mensagens; eles não são mais usados e geralmente são considerados obsoletos.
Observe que protocolos de assinatura como o CMS podem implantar um formato de contêiner que inclua a mensagem e a assinatura. Nesse caso, você precisará primeiro obter a mensagem - ainda não criptografada - do contêiner, como descompactar um arquivo de um arquivo .zip simples. Portanto, a mensagem pode ficar oculta e não pode ser usada diretamente nesse caso.
Quero poder criptografar determinadas informações e usá-las como uma chave de produto para o meu software. Só me importo de ser o único que pode gerá-los.
A criptografia é usada para obter confidencialidade. No passado, a geração de assinaturas RSA era frequentemente considerada como "criptografia com a chave privada". No entanto, as operações são bem diferentes, conforme explicado acima, e os padrões posteriores tentam desesperadamente separar a criptografia e a geração de assinaturas.
Gostaria de incluir minha chave pública no meu software para descriptografar / ler a assinatura da chave. Eu não ligo para quem pode ler os dados na chave, apenas ligo para ser o único que pode ser verificado.
Sim, isso se chama estabelecer confiança na chave pública. No entanto, proteger o código do programa é muito diferente de proteger as mensagens. Você pode executar a assinatura do código, mas precisará de algo para verificar a assinatura fora do seu código . Existem sistemas operacionais que oferecem isso.
Há o Microsoft Authenticode, por exemplo. As lojas de aplicativos, como a iStore e a loja de aplicativos Android, podem ou não usar a assinatura de código, mas oferecem alguma garantia de que seu aplicativo não está clonado ou, pelo menos, não clonado dentro da loja. Afinal, a criptografia nem sempre é a solução.
Mantendo o seu código seja clonado / alterados em tudo é muito mais difícil, e você estaria solidamente em território DRM se você ir por esse caminho.
A assinatura é útil nesse cenário?
Sim absolutamente. Certamente pode ajudar a garantir que as mensagens foram assinadas apenas por você, se houver confiança na chave pública. Se puder ser útil para autenticar o código do aplicativo / chave pública integrada, depende inteiramente do ambiente em que você espera executar o código.