Question

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

Inverse-t-il simplement le rôle des clés publiques / privées?

Par exemple, je souhaite utiliser ma clé privée pour générer des messages afin que je puisse uniquement ê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 souhaite pouvoir chiffrer certaines informations et les utiliser comme clé de produit pour mon logiciel. Je tiens seulement à ce que je sois le seul à pouvoir en générer. J'aimerais inclure ma clé publique dans mon logiciel pour déchiffrer / lire la signature de la clé. Je me fiche de savoir qui peut lire les données dans la clé, je me soucie seulement de savoir si je suis le seul à pouvoir le générer.

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

Était-ce utile?

La solution

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

Lors de la signature, vous utilisez votre clé privée pour écrire la signature du message. Ils utilisent également votre clé publique pour vérifier si elle vous appartient réellement.

  

Je souhaite utiliser ma clé privée pour générer des messages afin que je puisse uniquement ê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

Ceci est signer , il est fait avec votre clé privée.

  

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

     

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

Si vous avez seulement besoin de le savoir vous-même, vous n'avez pas besoin de manipuler les clés pour le 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 vous appartiennent vraiment, vous devez générer des données aléatoires, y conserver une base de données ET la signer avec votre clé.

  

J'aimerais 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 tel que Verisign ou Thawte, afin que les internautes puissent vérifier que personne n'a contrefait votre logiciel et remplacé votre clé publique par la leur.

Autres conseils

Dans RSA crypto, lorsque vous générez une paire de clés, le choix de la clé publique et de la clé privée est totalement arbitraire. 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 chiffrer un message avec la clé publique du destinataire , afin que le destinataire puisse le déchiffrer avec sa clé privée .

Une signature est la preuve que le signataire a 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écryptez 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, ce faisant, ils ont prouvé que le créateur du texte chiffré possède la clé privée correspondante.

Toutefois, cela signifie que vous devez doubler la taille de votre transmission - texte en clair et texte chiffré (en supposant que vous souhaitiez que les personnes qui ne souhaitent pas vérifier la signature lisent le message). Ainsi, à la place, une signature est créée en créant un hachage 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, créez un hachage à partir du texte en clair, chiffrez-le avec votre clé privée, incluez-le à côté du texte en clair.
  • Pour vérifier une signature, créez un hachage à partir du texte en clair, déchiffrez la signature avec la clé publique de l'expéditeur, vérifiez que les deux hachages sont identiques.

Ouais, pensez à signer des données en leur donnant votre propre cachet de cire que personne n’a. Cela est fait pour atteindre l'intégrité et la non-répudiation . Le cryptage est tel que personne ne peut voir les données. Ceci est fait pour atteindre 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 signature produit un " hash " 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 destinataire pour chiffrer les données. le décodage est effectué avec leur clé privée.

L’utilisation des clés n’est donc pas inversée (sinon votre clé privée ne serait plus privée!).

L'établissement d'une communication sécurisée pose deux problèmes distincts mais étroitement liés

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

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 à Bob un message que personne ne devrait pouvoir lire.

  • Alice chiffre le message avec la clé publique de Bob et l'envoie.
  • Bob reçoit le message et le déchiffre à l'aide de sa clé privée.
  

Notez que si A veut envoyer un message à B, A doit utiliser le public.   clé de B (accessible à tous) et non publique   ni la clé privée de A n'entre en image ici.

Donc, si vous voulez m'envoyer un message, vous devez connaître et utiliser la clé publique que je vous ai communiquée et je suis le seul à pouvoir décrypter 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 souhaite à nouveau envoyer un message à Bob. Le problème du 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 parviens pas à déchiffrer et à lire le message d'origine envoyé par Alice (qui nécessite un accès à la clé privée de Bob), je pirate la totalité 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?

  • Alice signe le message avec sa clé privée et l'envoie. (En pratique, ce qui est signé est un hachage du message, par exemple SHA-256 ou SHA-512.)
  • Bob le reçoit et le vérifie à l'aide de la clé publique d'Alice. Puisque la clé publique d’Alice a correctement vérifié le message, Bob peut en conclure que le message a été signé par Alice.

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

Cryptage signifie que seuls les détenteurs de la clé privée correspondante peuvent le lire, mais sans la signer, rien ne garantit que vous êtes derrière l'objet crypté.

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 de chiffrer) des messages arbitraires fournis par d'autres personnes. Cela permet d'attaquer les algorithmes qui pourraient compromettre vos clés.

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

Vous codez donc vos données dans une représentation binaire, puis vous vous connectez 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 ne sont pas significatives)

Sur le plan fonctionnel, vous utilisez le cryptage à clé publique / privée pour vous assurer que seul le destinataire peut lire votre message. Le message est crypté, puis crypté à l'aide de la clé publique du destinataire.

En vous connectant, vous signalez au destinataire que vous avez créé le message et qu'il n'a pas changé pendant le transfert. La signature du message est effectuée à l'aide de votre propre clé privée.

Comme pour l’algorithme utilisé: il s’agit d’influence des nombres premiers. Je ferais une recherche sur Google pour une meilleure explication.

  

Quelle est la différence entre chiffrer certaines données et les signer (en utilisant 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é pourrait l'avoir signé. Il existe également des différences fonctionnelles; lisez la suite.

  

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 la même manière, des mêmes clés publiques pour la vérification et le cryptage ) est mal vue, vous ne devez pas mélanger les deux. Ce n’est pas tant un problème mathématique (le RSA doit toujours être sécurisé), mais un problème de gestion des clés , où par exemple la clé de signature doit avoir une durée de vie plus courte et contenir davantage 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 destinataire pour le chiffrement. Généralement, signature-alors-chiffrement est utilisé, sinon un adversaire pourrait remplacer la signature par la sienne. De même, vous devez utiliser la clé privée du destinataire 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 signatures n'utilise pas le "chiffrement avec la clé privée". Bien que toutes les opérations RSA soient basées sur une exponentiation modulaire, le schéma de remplissage est totalement différent pour la génération de signature. De plus, la clé publique a des propriétés totalement 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 puisse être 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 savoir 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 devez tout simplement pas les chiffrer.

La signature n'influencera généralement pas le contenu du message. Le message est considéré séparé 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) du message; ils ne sont plus très 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 tout d’abord extraire le message du message - toujours non chiffré -, un peu comme pour décompresser un fichier dans une archive .zip pure. Le message peut donc être masqué et ne peut pas être utilisé directement dans ce cas.

  

Je souhaite pouvoir chiffrer certaines informations et les utiliser comme clé de produit pour mon logiciel. Je me soucie seulement de savoir que je suis le seul à 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 "cryptage avec la clé privée". Toutefois, comme expliqué ci-dessus, les opérations sont assez différentes et les normes ultérieures tentent désespérément de séparer le chiffrement et la génération de signatures.

  

Je voudrais inclure ma clé publique dans mon logiciel pour déchiffrer / lire la signature de la clé. Je me fiche de savoir qui peut lire les données dans la clé, je me soucie seulement de savoir si je suis le seul à pouvoir le générer.

Oui, il s’agit d’établir une 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 b

Répondant à cette question dans le contenu du message indiquant que l'intention de l'interrogateur était d'utiliser la solution pour les licences logicielles, les conditions requises sont les suivantes:

  1. Aucune tierce partie ne peut générer de clé de licence à partir de la décompilation de 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 permettant de créer la clé peuvent être signées avec une clé privée, ce qui la rend non lisible par l'homme mais peut être décodée si elle est gérée de manière inverse. Mais la clé privée est sûre, ce qui signifie que personne ne sera en mesure de créer des licences pour votre logiciel (ce qui est le but).

N'oubliez pas que vous ne pouvez pas empêcher une personne qualifiée de supprimer les verrous logiciels sur votre produit. Donc, s’ils doivent pirater chaque version publiée. Mais vous ne voulez vraiment pas qu'ils soient capables de générer de nouvelles clés pour votre produit, pouvant être partagées pour toutes les versions.

Python La documentation PyNaCl contient un exemple de «signature numérique» qui répond à cet objectif. http://pynacl.readthedocs.org/fr/latest/signing/

et de cause projet NaCl à C exemples

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top