Tout d'abord, ce n'est pas une faute de frappe, je veux Décrypter en utilisant une clé publique . Le but de cette opération est de mettre en cause une tierce partie pour s'assurer qu'elle possède effectivement la clé privée correspondant à la clé publique. Fondamentalement, je voudrais envoyer des données aléatoires, ils le chiffreraient avec leur clé privée, je le décrypterait en utilisant la clé publique et comparerais la valeur déchiffrée aux données aléatoires que j'ai envoyées. Je crois que c'est une procédure assez standard dans la cryptographie à clé publique, mais pour une raison quelconque, décrypter avec une clé publique semble être un tabou.données Décrypter en utilisant une clé publique RSA
J'utilise simplement le RSACryptoServiceProvider
dans .NET 2.0. Cependant, quand j'appelle Decrypt
il lance un CryptographicException
avec le message Bad Key
. La clé n'est pas mauvaise (je peux Encrypt
sans problème), mais il me semble qu'elle ne me laissera pas déchiffrer avec juste la clé publique. Ce qui donne? Cela doit être possible de faire.
* "mais ma compréhension est en train de signer est vraiment juste de chiffrer avec la clé privée" * - Eh bien, oui et non. Oui en théorie. En pratique cependant, vous devez d'abord hacher l'entrée, crypter le * hash * avec la clé privée et l'ajouter au message, car RSA est très coûteux en termes de calcul. En fait, lorsque vous cryptez en pratique, vous ne cryptez même pas l'entrée avec la clé publique: vous cryptez un grand nombre aléatoire et utilisez ce nombre comme clé d'un algorithme de cryptage symétrique beaucoup plus rapide, comme AES. –
@BlueRaja, j'étais en fait conscient de cela (le hachage et que RSA est seulement utilisé pour l'échange d'une clé de session aléatoire). Cela fait partie des raisons pour lesquelles j'ai fait référence à 'SignHash'. Mon point est que "signature x" == "chiffrer x avec une clé privée." Cela s'applique indépendamment du fait que x est un hachage ou un message réel. –
La principale différence entre la signature et le cryptage est que lorsque vous * cryptez *, vous remplissez des données aléatoires (pour éviter les attaques de devinettes en clair); lorsque vous signez *, vous remplissez les données qui ont une structure prédéfinie (pour éviter les attaques restées). Lorsque vous vérifiez une signature, il est important de vérifier que les données de remplissage sont également correctes. – caf