Quelle est la différence entre le chiffrement de certaines données et la signature de certaines données (à l'aide de RSA)?
Cela inverse-t-il simplement le rôle des clés publiques-privées?
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. Je veux que ma clé publique soit utilisée pour lire les messages et je me fiche de qui les lit. 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. 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.
La signature est-elle utile dans ce scénario?
la source
f(key, message)
, telles quef(private, f(public, message)) === f(public, f(private, message)) === message
Dans la cryptographie RSA, lorsque vous générez une paire de clés, il est tout à fait arbitraire lequel vous choisissez d'être la clé publique et quelle est la clé privée. Si vous chiffrez avec l'un, vous pouvez déchiffrer avec l'autre - cela fonctionne dans les deux sens.
Il est donc assez simple de voir comment vous pouvez crypter un message avec la clé publique du destinataire , afin que le destinataire puisse le décrypter avec sa clé privée .
Une signature est la preuve que le signataire possède la clé privée qui correspond à une clé publique. Pour ce faire, il suffirait de chiffrer le message avec la clé privée de cet expéditeur et d'inclure la version chiffrée à côté de la version en texte brut. Pour vérifier l'expéditeur, déchiffrez la version chiffrée et vérifiez qu'elle est identique au texte en clair.
Bien sûr, cela signifie que votre message n'est pas secret. Tout le monde peut le déchiffrer, car la clé publique est bien connue. Mais lorsqu'ils le font, ils ont prouvé que le créateur du texte chiffré possède la clé privée correspondante.
Cependant, cela signifie doubler la taille de votre transmission - texte en clair et texte chiffré ensemble (en supposant que vous voulez que les personnes qui ne souhaitent pas vérifier la signature lisent le message). Par conséquent, une signature est généralement créée en créant un hachage du texte en clair. Il est important que de faux hachages ne puissent pas être créés, donc des algorithmes de hachage cryptographiques tels que SHA-2 sont utilisés.
Alors:
la source
L’établissement d’une communication sécurisée pose deux problèmes distincts mais étroitement liés
Ces deux problèmes peuvent être résolus avec élégance en utilisant la cryptographie à clé publique.
I. Cryptage et décryptage des données
Alice veut envoyer un message à Bob que personne ne devrait pouvoir lire.
Donc, si vous voulez m'envoyer un message, vous devez connaître et utiliser ma clé publique que je vous fournis et seulement je pourrai déchiffrer le message car je suis le seul à avoir accès à la clé privée correspondante.
II. Vérifier l'identité de l'expéditeur (authentification)
Alice veut envoyer à nouveau un message à Bob. Le problème de cryptage des données est résolu en utilisant la méthode ci-dessus.
Mais que se passe-t-il si je suis assis entre Alice et Bob, me présentant comme «Alice» à Bob et envoyant mon propre message à Bob au lieu de transmettre celui envoyé par Alice. Même si je ne peux pas décrypter et lire le message d'origine envoyé par Alice (qui nécessite l'accès à la clé privée de Bob), je détourne l'intégralité de la conversation entre eux.
Existe-t-il un moyen pour Bob de confirmer que les messages qu'il reçoit sont bien envoyés par Alice?
la source
Oui, pensez à signer des données comme à lui donner votre propre tampon de cire que personne d'autre n'a. Cela est fait pour atteindre l' intégrité et la non-répudiation . Le cryptage permet à personne d'autre de voir les données. Ceci est fait pour assurer la confidentialité . Voir wikipedia http://en.wikipedia.org/wiki/Information_security#Key_concepts
Une signature est un hachage de votre message signé à l'aide de votre clé privée.
la source
La signature génère un "hachage" avec votre clé privée qui peut être vérifié avec votre clé publique. Le texte est envoyé en clair.
Le cryptage utilise la clé publique du récepteur pour crypter les données; le décodage se fait avec leur clé privée.
Ainsi, l'utilisation des clés n'est pas inversée (sinon votre clé privée ne serait plus privée!).
la source
Vous décrivez exactement comment et pourquoi la signature est utilisée dans la cryptographie à clé publique. Notez qu'il est très dangereux de signer (ou chiffrer) des messages arbitraires fournis par d'autres - cela permet des attaques sur les algorithmes qui pourraient compromettre vos clés.
la source
La signature indique que vous êtes vraiment la source ou le garant de l'objet signé. Tout le monde peut cependant lire l'objet.
Le chiffrement signifie que seuls ceux qui ont la clé privée correspondante peuvent le lire, mais sans signer, il n'y a aucune garantie que vous êtes derrière l'objet chiffré.
la source
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.
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.
C'est une propriété de non-répudiation, qui peut être obtenue en signant.
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.
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.
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.
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.
la source
Dans votre scénario, vous ne chiffrez pas au sens du chiffrement asymétrique; Je préfère l'appeler "encoder".
Vous codez donc vos données en une représentation binaire, puis vous signez avec votre clé privée. Si vous ne pouvez pas vérifier la signature via votre clé publique, vous savez que les données signées ne sont pas générées avec votre clé privée. ("vérification" signifie que les données non signées n'ont pas de sens)
la source
Fonctionnellement, vous utilisez le cryptage à clé publique / privée pour vous assurer que seul le destinataire peut lire votre message. Le message est chiffré à l'aide de la clé publique du récepteur et déchiffré à l'aide de la clé privée du récepteur.
La signature que vous pouvez utiliser pour informer le destinataire que vous avez créé le message et qu'il n'a pas changé pendant le transfert. La signature des messages se fait à l'aide de votre propre clé privée. Le récepteur peut utiliser votre clé publique pour vérifier que le message n'a pas été falsifié.
Quant à l'algorithme utilisé: qui implique une fonction unidirectionnelle voir par exemple wikipedia . L'un des premiers de ces algorithmes utilise de grands nombres premiers mais plus de fonctions unidirectionnelles ont été inventées depuis.
Recherchez «Bob», «Alice» et «Mallory» pour trouver des articles d'introduction sur Internet.
la source
Répondant à cette question dans le contenu que l'intention des intervenants était d'utiliser la solution pour l'octroi de licences logicielles, les exigences sont les suivantes:
Une signature numérique résoudra ce problème car les données brutes qui font la clé peuvent être signées avec une clé privée qui la rend non lisible par l'homme mais pourrait être décodée si elle est rétroconçue. Mais la clé privée est sûre, ce qui signifie que personne ne pourra faire de licences pour votre logiciel (ce qui est important).
N'oubliez pas que vous ne pouvez pas empêcher une personne qualifiée de supprimer les verrous logiciels de votre produit. Donc, s'ils doivent pirater chaque version publiée. Mais vous ne voulez vraiment pas qu'ils puissent générer de nouvelles clés pour votre produit qui peuvent être partagées pour toutes les versions.
Python La documentation PyNaCl contient un exemple de «signature numérique» qui répondra à cet objectif. http://pynacl.readthedocs.org/en/latest/signing/
et de la cause du projet NaCl aux exemples C
la source