Quelle est la différence entre le chiffrement de certaines données et la signature de certaines données (à l'aide de RSA)?
Le chiffrement préserve la confidentialité du message ("certaines données"), tandis que la signature assure la non-répudiation: c'est-à-dire que seule l'entité qui l'a signé aurait pu le signer. Il existe également des différences fonctionnelles; continuer à lire.
Cela inverse-t-il simplement le rôle des clés publiques-privées?
Absolument pas. L'utilisation des mêmes clés privées pour la signature et le décryptage (ou, de même, les mêmes clés publiques pour la vérification et le cryptage ) est mal vue, car vous ne devez pas mélanger les fins. Ce n'est pas tant un problème mathématique (RSA devrait toujours être sécurisé), mais un problème avec la gestion des clés , où par exemple la clé de signature devrait avoir une durée de vie plus courte et contenir plus de protection avant d'être utilisée.
Pour le même message, vous devez utiliser la clé privée de l'expéditeur pour la signature et la clé publique de confiance du récepteur pour le chiffrement. Généralement, signer-puis-crypter est utilisé, sinon un adversaire pourrait remplacer la signature par la sienne. De même, vous devez utiliser la clé privée du récepteur pour le déchiffrement et la clé publique de confiance de l'expéditeur pour la vérification.
De plus, vous devez comprendre que la génération de signature n'utilise pas le "chiffrement avec la clé privée". Bien que toutes les opérations RSA soient basées sur l'exponentiation modulaire, le schéma de remplissage est entièrement différent pour la génération de signature. En outre, la clé publique a des propriétés entièrement différentes de la clé privée RSA dans toutes les utilisations pratiques de RSA.
Par exemple, je veux utiliser ma clé privée pour générer des messages afin que je ne puisse être que l'expéditeur.
C'est une propriété de non-répudiation, qui peut être obtenue en signant.
Je veux que ma clé publique soit utilisée pour lire les messages et je me fiche de qui les lit.
La clé publique doit être considérée comme connue de tous. Si vous voulez que tout le monde lise les messages, vous ne les chiffrez tout simplement pas.
La signature n'influencera généralement pas le contenu du message. Le message est considéré comme distinct des signatures. Officiellement, ces signatures sont appelées «signatures avec appendice» où l'appendice est le message. C'est un nom un peu bizarre car le message est considéré comme plus important que la signature dessus, mais oui. Seules quelques signatures offrent une récupération (partielle) des messages; ils ne sont plus beaucoup utilisés et sont généralement considérés comme obsolètes.
Notez que les protocoles de signature tels que CMS peuvent déployer un format de conteneur qui inclut à la fois le message et la signature. Dans ce cas, vous devez d'abord extraire le message - toujours non chiffré - du conteneur, un peu comme décompresser un fichier d'une archive .zip ordinaire. Le message peut donc être masqué et ne peut pas être utilisé directement dans ce cas.
Je souhaite pouvoir crypter certaines informations et les utiliser comme clé de produit pour mon logiciel. Je me soucie seulement d'être la seule à pouvoir les générer.
Le cryptage est utilisé pour assurer la confidentialité. Dans le passé, la génération de signatures RSA était souvent considérée comme un "chiffrement avec la clé privée". Cependant, les opérations sont assez différentes, comme expliqué ci-dessus, et les normes ultérieures tentent désespérément de séparer le cryptage et la génération de signature.
Je voudrais inclure ma clé publique dans mon logiciel pour décrypter / lire la signature de la clé. Peu m'importe qui peut lire les données dans la clé, je me soucie seulement d'être la seule personne vérifiable qui puisse les générer.
Oui, cela s'appelle établir la confiance dans la clé publique. Cependant, la protection de votre code de programme est très différente de la protection des messages. Vous pouvez effectuer la signature de code, mais vous aurez alors besoin de quelque chose pour vérifier la signature en dehors de votre code . Il existe des systèmes d'exploitation qui offrent cela.
Il y a par exemple Microsoft Authenticode. Les magasins d'applications comme iStore et Android app store peuvent ou non utiliser la signature de code, mais ils offrent une certaine assurance que votre application n'est pas clonée ou du moins pas clonée dans la boutique. La cryptographie n'est pas toujours la solution après tout.
Garder votre code d'être cloné / modifié du tout est beaucoup plus difficile, et vous seriez solidement en territoire DRM si vous allez de cette façon.
La signature est-elle utile dans ce scénario?
Oui absolument. Cela peut certainement aider à vous assurer que les messages n'ont été signés que par vous, s'il y a confiance dans la clé publique. S'il peut être utile pour authentifier votre code d'application / clé publique intégrée dépend entièrement de l'environnement dans lequel vous prévoyez d'exécuter le code.