2008-11-19 8 views
2

J'utilise RSACryptoServiceProvider dans .NET 2 et il semble que la partie privée d'une paire de clés publique/privée contienne toujours la partie publique.La clé privée RSA contient-elle toujours la clé publique ou est-ce simplement .NET?

Je dois crypter certaines informations en utilisant ma clé publique, et permettre à l'autre partie de DÉCRYPTER SEULEMENT ce que j'ai crypté. Je ne veux pas qu'ils puissent savoir comment j'ai crypté mon message. Est-ce possible en utilisant RSACryptoServiceProvider dans .NET?

Répondre

7

La clé privée inclut toujours la clé publique.

Ce que vous voulez vraiment, c'est signer. En utilisant les mêmes classes .NET, vous pouvez signer des données avec votre clé privée et vérifier la signature du côté de l'autre partie avec la clé publique (qui évidemment ne contient pas la clé privée).

public static string Sign(string data, string privateAndPublicKey) 
    { 
     byte[] dataBytes = Encoding.UTF8.GetBytes(data); 
     RSACryptoServiceProvider provider = CreateProviderFromKey(privateAndPublicKey); 
     byte[] signatureBytes = provider.SignData(dataBytes, "SHA1"); 
     return Convert.ToBase64String(signatureBytes); 
    } 

    public static bool Verify(string data, string signature, string publicKey) 
    { 
     byte[] dataBytes = Encoding.UTF8.GetBytes(data); 
     byte[] signatureBytes = Convert.FromBase64String(signature); 
     RSACryptoServiceProvider provider = CreateProviderFromKey(publicKey); 
     return provider.VerifyData(dataBytes, "SHA1", signatureBytes); 
    } 

    private static RSACryptoServiceProvider CreateProviderFromKey(string key) 
    { 
     RSACryptoServiceProvider provider = new RSACryptoServiceProvider(); 
     provider.FromXmlString(key); 
     return provider; 
    } 
2

Le chiffrement de données à l'aide d'une clé privée/publique ne fonctionne pas comme cela. Vous devez utiliser une autre clé publique de la personne, afin qu'il puisse la déchiffrer à l'aide de sa clé privée. Néanmoins, cela est vraiment lent, donc en pratique, ce qui est réellement utilisé pour chiffrer le message est une clé symétrique qui est générée au moment de la session. La clé symétrique est ce qui est crypté au moyen de la clé publique de l'autre extrémité (beaucoup moins de données que le message entier), puis attachée au message crypté. SSL par exemple fonctionne comme ça.

8

Comment utiliser:

L'autre de partie clé publique:

Si vous voulez chiffrer quelque chose que seul l'autre partie (et personne d'autre) peut déchiffrer, vous devez chiffrer avec leur clé publique (pas avec votre clé).

Si vous obtenez une signature de l'autre partie, vous pouvez vérifier que la signature est correcte (par opposition à créée par quelqu'un d'autre) en utilisant la clé publique de l'autre partie.

propre clé privée:

Si vous voulez signer quelque chose afin que chacun puisse vérifier que vous avez créé le contenu, vous signez avec votre propre clé privée. Votre clé publique sera utilisée pour le vérifier. Le contenu n'est pas chiffré du tout (sauf si vous le faites séparément).

Si quelqu'un vous envoie un message crypté avec votre clé publique (de sorte que vous seul pouvez le lire), vous pouvez le décrypter avec votre clé privée.

Votre propre clé publique:

Vous ne pas utiliser votre propre clé publique. L'autre partie l'utilise pour vérifier vos signatures et pour crypter des messages uniquement pour vos yeux.

L'autre clé privée partie:

Vous n'avez pas.

Questions connexes