Quelle est la différence entre le cryptage et la signature dans le cryptage asymétrique?

Quelle est la différence entre chiffrer certaines données et signer certaines données (en utilisant RSA)?

Inverse-t-il simplement le rôle des clés public-privé?

Par exemple, je veux utiliser ma clé privée pour générer des messages afin que seul je puisse être l'expéditeur. Je veux que ma clé publique soit utilisée pour lire les messages et je me fiche de savoir qui les lit. Je veux pouvoir chiffrer certaines informations et les utiliser comme clé de produit pour mon logiciel. Je me soucie seulement que je suis le seul celui qui peut générer ces. Je voudrais inclure ma clé publique dans mon logiciel pour déchiffrer/lire la signature de la clé. Je n'aime pas qui peut lire les données de la clé, je ne me préoccupe que je suis le seul vérifiable qui peut générer.

La signature est-elle utile dans ce scénario?

182
demandé sur mmcdole 2009-01-18 00:07:43

11 réponses

Lors du chiffrement, vous utilisez leur clé publique pour écrire un message et qu'ils utilisent leur clé privée lire.

Lors de la signature, vous utilisez votre clé privée pour écrire un message signature, et ils utilisent clé publique pour vérifier si il est vraiment le vôtre.

Je veux utiliser ma clé privée pour générer des messages afin que je puisse être l'expéditeur.

Je veux que ma clé publique soit utilisée pour lire les messages et je me fiche de savoir qui lit les

C'est signature, il est fait avec votre clé privée.

Je veux pouvoir chiffrer certaines informations et les utiliser comme clé de produit pour mon logiciel.

Je me soucie seulement que je suis le seul à pouvoir les générer.

Si vous avez seulement besoin de savoir pour vous-même, vous n'avez pas besoin de jouer avec les touches pour ce faire. Vous pouvez simplement générer des données aléatoires et les conserver dans une base de données.

Mais si vous voulez que les gens sachent que les clés sont vraiment le vôtre, vous devez générer des données aléatoires, y conserver une base de données et la signer avec votre clé.

Je voudrais inclure ma clé publique dans mon logiciel pour déchiffrer / lire la signature de la clé

Vous aurez probablement besoin d'acheter un certificat pour votre clé publique auprès d'un fournisseur commercial comme Verisign ou Thawte, afin que les gens puissent vérifier que personne ne vous avait forgé le logiciel et remplacé votre clé publique par leur.

290
répondu Quassnoi 2015-11-17 14:28:12

Dans RSA crypto, lorsque vous générez une paire de clés, il est complètement arbitraire lequel vous choisissez d'être la clé publique, et qui est la clé privée. Si vous chiffrez avec un, vous pouvez déchiffrer avec l'autre - cela fonctionne dans les deux sens.

Donc, il est assez simple de voir comment vous pouvez chiffrer un message avec la clé publique du récepteur, de sorte que le récepteur puisse le déchiffrer avec sa clé privée.

Une signature est la preuve que le signataire a la clé privée qui correspond à certains de 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 clair. Pour vérifier l'expéditeur, déchiffrez la version chiffrée et vérifiez qu'elle est identique au texte brut.

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 quand ils le font, ils ont prouvé que le créateur du texte chiffré a l' 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 sont pas intéressées à vérifier la signature, lisent le message). Donc, à la place, généralement une signature est créée en créant un hash du texte en clair. Il est important que les faux hachages ne puissent pas être créés, donc des algorithmes de hachage cryptographiques tels que SHA-2 sont utilisés.

Donc:

  • pour générer une signature, hachage du texte en clair, chiffrez-le avec votre clé privée, incluez-le à côté du texte en clair.
  • pour vérifier une signature, faites un hachage à partir du texte brut, déchiffrez la signature avec la clé publique de l'expéditeur, vérifiez que les deux hachages sont identiques.
73
répondu slim 2017-07-12 09:05:46

Oui, pensez à signer des données comme à lui donner votre propre cachet de cire que personne d'autre n'a. Il est fait pour atteindre l'intégrité et la non-répudiation . Le cryptage est si personne d'autre ne peut voir les données. Ceci est fait pour atteindre 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.

14
répondu Johnno Nolan 2017-08-11 17:34:15

La signature produit un "hachage" avec votre clé privée qui peut être vérifiée avec votre clé publique. Le texte est envoyé en clair.

Le chiffrement utilise la clé publique du récepteur pour chiffrer les données; le décodage se fait avec leur clé privée.

Donc, l'utilisation des clés n'est pas inversée (sinon votre clé privée ne serait plus privée!).

11
répondu Doug Currie 2009-01-17 22:06:43

La signature indique que vous êtes vraiment la source ou le garant de l'objet signé. Tout le monde peut lire l'objet, cependant.

Le chiffrement signifie que seuls ceux avec 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é.

7
répondu rjamestaylor 2009-01-17 23:08:38

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 aritrary fournis par d'autres-cela permet des attaques sur les algorithmes qui pourraient compromettre vos clés.

5
répondu Michael Borgwardt 2009-01-17 21:20:26

Dans votre scénario, vous ne chiffrez pas au sens de chiffrement asymétrique; je préfère l'appeler "encoder".

Donc, vous encodez vos données dans 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" signifiant que les données non signées ne sont pas significatives)

3
répondu devio 2009-01-17 22:13:34

Il y a deux problèmes distincts mais étroitement liés dans l'établissement d'une communication sécurisée

  1. chiffrer les données afin que seules les personnes autorisées puissent les déchiffrer et les lire
  2. vérifier l'identité / authentification de l'expéditeur

Ces deux problèmes peuvent être élégamment résolus en utilisant la cryptographie à clé publique.

I. chiffrement et déchiffrement des données

Alice veut envoyer un message à Bob que personne ne devrait pouvoir lire.

  • Alice crypte le message avec Bob's public key et l'envoie sur
  • Bob reçoit le message et le décrypte en utilisant son Private Key

Notez que si A veut envoyer un message à B, A doit utiliser le Public clé de B (qui est accessible au public) et ni public ni la clé privée d'un vient en Image ici.

Donc, si vous voulez m'envoyer un message, vous devez connaître et utiliser ma clé publique que je vous fournis et que je serai le seul capable de déchiffrer le message puisque 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 un message à Bob à nouveau. Le problème du cryptage des données est résolu en utilisant la méthode ci-dessus.

Mais 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 original envoyé par Alice (qui nécessite l'accès à la clé privée de Bob) je détourne toute la conversation entre eux.

Y a-t-il un moyen pour Bob de confirmer que les messages qu'il reçoit sont réellement envoyés par Alice?

  • Alice signe le message avec her private key (La Clé privée D'Alice) et l'envoie
  • Bob le reçoit et le déchiffre en utilisant Alice's public key. Puisque la clé publique D'Alice a déchiffré le message avec succès, Bob peut conclure que le message a été signé en utilisant Alice

En pratique, les deux méthodes ci-dessus sont utilisées conjointement avec une certaine forme de hachage (SHA, MD5) pour obtenir le cryptage et l'authenticité.

3
répondu Siva Prakash 2018-02-04 03:38:06

Fonctionnellement, vous utilisez le chiffrement à clé publique/privée pour vous assurer que seul le récepteur peut lire votre message. Le message est chiffré puis chiffré à l'aide de la clé publique du récepteur.

Signature que vous utilisez 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.

Quant à l'algorithme utilisé: cela implique des nombres premiers. Je ferais une recherche sur google pour une meilleure explication.

2
répondu Gerbrand 2009-01-17 21:16:06

Je pense qu'il y a des messages mitigés ci-dessus. J'essayais de réaliser la même chose que Simucal - c'est-à-dire que je voulais générer une clé de licence contenant des informations importantes sur qui peut utiliser le logiciel et entre quelles plages de dates, etc. Mais je ne veux pas que les gens puissent modifier ces informations pour prolonger leur période de licence, etc. Ma première approche consistait à utiliser le cryptage asymétrique, mais malgré certains des commentaires ci-dessus, il semble que vous pouvez crypter en utilisant le public ou le privé clé, mais seulement le déchiffrer en utilisant la clé privée. Donc, dans ce scénario, vous devez stocker la clé privée dans le système afin de décoder et vérifier la clé de licence... rendre le système assez peu sûr car n'importe qui pourrait générer ses propres informations de licence modifiées et les chiffrer en utilisant la clé publique ou privée (dont l'une serait stockée dans les fichiers binaires du système). Le même risque de sécurité est lié au cryptage symétrique bien sûr.

, Comme de nombreux de la les commentaires ci-dessus indiquent que la signature semble être la voie à suivre pour ce scénario, mais je n'ai pas encore trouvé un bon exemple. Est-ce que quelqu'un connaît un tutoriel ou une démo en ligne qui fournit une exécution d'une telle méthode? Merci, Chris

2
répondu Chris 2009-12-02 09:16:40

Répondant à cette question dans le contenu que les questionneurs avaient l'intention d'utiliser la solution pour la licence de logiciel, les exigences sont:

  1. aucun tiers ne peut produire une clé de licence en décompilant l'application
  2. le contenu de la clé logicielle n'a pas besoin d'être sécurisé
  3. la clé logicielle n'est pas lisible par l'homme

Une Signature numérique résoudra ce problème car les données brutes qui rendent la clé peuvent être signées avec une clé privée qui la rend non lisible par l'homme mais pourrait être décodé si l'ingénierie inverse. Mais la clé privée est sûre, ce qui signifie que personne ne sera en mesure de faire des licences pour votre logiciel (ce qui est le point).

Rappelez-vous que vous ne pouvez pas empêcher une personne du métier de supprimer les verrous logiciels sur votre produit. Donc, s'ils doivent pirater chaque version qui est 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 a un exemple de "Signature numérique" qui sera suite le but. http://pynacl.readthedocs.org/en/latest/signing/

Et de provoquer le projet NaCl à C Exemples

1
répondu oden 2016-03-10 11:38:59