Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte.
Traduction
Source
Ce sujet n'a pas encore été évalué - Évaluez ce sujet

ECDiffieHellmanCng, classe

Fournit une implémentation CNG (Cryptography Next Generation) de l'algorithme ECDH (Elliptic Curve Diffie-Hellman). Cette classe est utilisée pour exécuter des opérations de chiffrement.

System.Object
  System.Security.Cryptography.AsymmetricAlgorithm
    System.Security.Cryptography.ECDiffieHellman
      System.Security.Cryptography.ECDiffieHellmanCng

Espace de noms :  System.Security.Cryptography
Assembly :  System.Core (dans System.Core.dll)
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public sealed class ECDiffieHellmanCng : ECDiffieHellman

Le type ECDiffieHellmanCng expose les membres suivants.

  Nom Description
Méthode publique ECDiffieHellmanCng() Initialise une nouvelle instance de la classe ECDiffieHellmanCng avec une paire de clés générée de manière aléatoire.
Méthode publique ECDiffieHellmanCng(CngKey) Initialise une nouvelle instance de la classe ECDiffieHellmanCng à l'aide de l'objet CngKey spécifié.
Méthode publique ECDiffieHellmanCng(Int32) Initialise une nouvelle instance de la classe ECDiffieHellmanCng avec une paire de clés aléatoire, en utilisant la taille de clé spécifiée.
Début
  Nom Description
Propriété publique HashAlgorithm Obtient ou définit l'algorithme de hachage à utiliser lors de la génération du matériel de clé.
Propriété publique HmacKey Obtient ou définit la clé HMAC (Hash-based Message Authentication Code) à utiliser lorsque le matériel de clé est dérivé.
Propriété publique Key Spécifie le CngKey utilisé par l'objet actuel pour les opérations de chiffrement.
Propriété publique KeyDerivationFunction Obtient ou définit la fonction de dérivation de clés pour la classe ECDiffieHellmanCng.
Propriété publique KeyExchangeAlgorithm Obtient le nom de l'algorithme d'échange de clés. (Hérité de ECDiffieHellman.)
Propriété publique KeySize Obtient ou définit la taille, en bits, du modulo de la clé utilisé par l'algorithme asymétrique. (Hérité de AsymmetricAlgorithm.)
Propriété publique Label Obtient ou définit la valeur d'étiquette utilisée pour la dérivation de clés.
Propriété publique LegalKeySizes Obtient les tailles de clé prises en charge par l'algorithme asymétrique. (Hérité de AsymmetricAlgorithm.)
Propriété publique PublicKey Obtient la clé publique qui peut être utilisée par un autre objet ECDiffieHellmanCng pour générer un accord secret partagé. (Substitue ECDiffieHellman.PublicKey.)
Propriété publique SecretAppend Obtient ou définit une valeur qui sera ajoutée à l'accord secret lors de la génération du matériel de clé.
Propriété publique SecretPrepend Obtient ou définit une valeur qui sera ajoutée au début de l'accord secret lors de la dérivation du matériel de clé.
Propriété publique Seed Obtient ou définit la valeur initiale qui sera utilisée lors de la dérivation du matériel de clé.
Propriété publique SignatureAlgorithm Obtient le nom de l'algorithme de signature. (Hérité de ECDiffieHellman.)
Propriété publique UseSecretAgreementAsHmacKey Obtient une valeur qui indique si l'accord secret est utilisé comme une clé HMAC (Hash-based Message Authentication Code) pour dériver le matériel de clé.
Début
  Nom Description
Méthode publique Clear Libère toutes les ressources utilisées par la classe AsymmetricAlgorithm. (Hérité de AsymmetricAlgorithm.)
Méthode publique DeriveKeyMaterial(CngKey) Dérive le matériel de clé généré par l'accord secret entre deux correspondants, étant donné un objet CngKey qui contient la clé publique du deuxième correspondant.
Méthode publique DeriveKeyMaterial(ECDiffieHellmanPublicKey) Dérive le matériel de clé généré par l'accord secret entre deux correspondants, étant donné un objet ECDiffieHellmanPublicKey qui contient la clé publique du deuxième correspondant. (Substitue ECDiffieHellman.DeriveKeyMaterial(ECDiffieHellmanPublicKey).)
Méthode publique DeriveSecretAgreementHandle(CngKey) Obtient un handle pour l'accord secret généré entre deux correspondants, étant donné un objet CngKey qui contient la clé publique du deuxième correspondant.
Méthode publique DeriveSecretAgreementHandle(ECDiffieHellmanPublicKey) Obtient un handle pour l'accord secret généré entre deux correspondants, étant donné un objet ECDiffieHellmanPublicKey qui contient la clé publique du deuxième correspondant.
Méthode publique Dispose() Libère toutes les ressources utilisées par l'instance actuelle de la classe AsymmetricAlgorithm. (Hérité de AsymmetricAlgorithm.)
Méthode protégée Dispose(Boolean) Libère les ressources non managées utilisées par la classe AsymmetricAlgorithm et libère éventuellement les ressources managées. (Hérité de AsymmetricAlgorithm.)
Méthode publique Equals(Object) Détermine si l'Object spécifié est égal à l'Object en cours. (Hérité de Object.)
Méthode protégée Finalize Autorise un objet à tenter de libérer des ressources et d'exécuter d'autres opérations de netto***ge avant qu'il ne soit récupéré par l'opération garbage collection. (Hérité de Object.)
Méthode publique FromXmlString(String) Cette méthode n'est pas implémentée. (Substitue AsymmetricAlgorithm.FromXmlString(String).)
Méthode publique FromXmlString(String, ECKeyXmlFormat) Désérialise les informations de clés d'une chaîne XML en utilisant le format spécifié.
Méthode publique GetHashCode Sert de fonction de hachage pour un type particulier. (Hérité de Object.)
Méthode publique GetType Obtient le Type de l'instance actuelle. (Hérité de Object.)
Méthode protégée MemberwiseClone Crée une copie superficielle de l'objet Object actif. (Hérité de Object.)
Méthode publique ToString Retourne une chaîne qui représente l'objet actuel. (Hérité de Object.)
Méthode publique ToXmlString(Boolean) Cette méthode n'est pas implémentée. (Substitue AsymmetricAlgorithm.ToXmlString(Boolean).)
Méthode publique ToXmlString(ECKeyXmlFormat) Sérialise les informations de clés en une chaîne XML en utilisant le format spécifié.
Début
  Nom Description
Champ protégé KeySizeValue Représente la taille, en bits, du modulo de la clé utilisé par l'algorithme asymétrique. (Hérité de AsymmetricAlgorithm.)
Champ protégé LegalKeySizesValue Spécifie les tailles de clé prises en charge par l'algorithme asymétrique. (Hérité de AsymmetricAlgorithm.)
Début

La classe ECDiffieHellmanCng permet à deux correspondants d'échanger le matériel de clé privée même s'ils communiquent via un canal public. Les deux parties peuvent calculer la même valeur de secret, appelée accord secret dans les classes Diffie-Hellman managées. L'accord secret peut être ensuite utilisé à diverses fins, notamment comme une clé symétrique. Toutefois, au lieu d'exposer l'accord secret directement, la classe ECDiffieHellmanCng effectue un post-traitement sur l'accord avant de fournir la valeur. Ce post-traitement est connu sous le nom de fonction de dérivation de clés (KDF) ; vous pouvez sélectionner la fonction KDF à utiliser et dont vous souhaitez définir ses paramètres via un ensemble de propriétés sur l'instance de l'objet Diffie-Hellman.

Fonction de dérivation de clés

Propriétés

Hash

HashAlgorithm- Algorithme de hachage utilisé pour traiter l'accord secret.

SecretPrepend- Tableau d'octets facultatif à ajouter à l'accord secret avant de le hacher.

SecretAppend- Tableau d'octets facultatif à ajouter à l'accord secret avant de le hacher.

Hmac

HashAlgorithm- Algorithme de hachage utilisé pour traiter l'accord secret.

SecretPrepend- Tableau d'octets facultatif à ajouter à l'accord secret avant de le hacher.

SecretAppend- Tableau d'octets facultatif à ajouter à l'accord secret avant de le hacher.

Tls

Label- Étiquette pour la dérivation de clés.

Seed- Amorce pour la dérivation de clés.

Le résultat du passage de l'accord secret via la fonction de dérivation de clés est un tableau d'octets qui peut être utilisé comme matériel de clé pour votre application. Le nombre d'octets du matériel de clé généré dépend de la fonction de dérivation de clés ; par exemple, SHA-256 génère 256 bits de matériel de clé, alors que SHA-512 génère 512 bits de matériel de clé. Le flux de base d'un échange de clé ECDH est comme suit :

  1. Alice et François créent une paire de clés à utiliser pour l'opération d'échange de clés Diffie-Hellman

  2. Alice et François configurent le KDF avec les paramètres sur lesquels ils se mettent d'accord.

  3. Alice envoie sa clé publique à Bob.

  4. Bob envoie sa clé publique à Alice.

  5. Alice et François utilisent réciproquement leurs clés publiques pour générer l'accord secret et appliquer le KDF à celui-ci pour générer le matériel de clé.

Remarque Remarque

L'attribut HostProtectionAttribute appliqué à ce type ou membre a la valeur de propriété Resources suivante : MayLeakOnAbort. HostProtectionAttribute n'affecte pas les applications bureautiques (qui sont généralement démarrées en double-cliquant sur une icône, en tapant une commande ou en entrant une URL dans un navigateur). Pour plus d'informations, consultez la classe HostProtectionAttribute ou Attributs de programmation et de protection des hôtes SQL Server.

L'exemple suivant indique comment utiliser la classe ECDiffieHellmanCng pour établir un échange de clé et comment utiliser cette clé pour chiffrer un message qui peut être envoyé sur un canal public et peut être déchiffré par le récepteur.


using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;


class Alice
{
    public static byte[] alicePublicKey;

    public static void Main(string[] args)
    {
        using (ECDiffieHellmanCng alice = new ECDiffieHellmanCng())
        {

            alice.KeyDerivationFunction = ECDiffieHellmanKeyDerivationFunction.Hash;
            alice.HashAlgorithm = CngAlgorithm.Sha256;
            alicePublicKey = alice.PublicKey.ToByteArray();
            Bob bob = new Bob();
            CngKey k = CngKey.Import(bob.bobPublicKey, CngKeyBlobFormat.EccPublicBlob);
            byte[] aliceKey = alice.DeriveKeyMaterial(CngKey.Import(bob.bobPublicKey, CngKeyBlobFormat.EccPublicBlob));
            byte[] encryptedMessage = null;
            byte[] iv = null;
            Send(aliceKey, "Secret message", out encryptedMessage, out iv);
            bob.Receive(encryptedMessage, iv);
        }

    }

    private static void Send(byte[] key, string secretMessage, out byte[] encryptedMessage, out byte[] iv)
    {
        using (Aes aes = new AesCryptoServiceProvider())
        {
            aes.Key = key;
            iv = aes.IV;

            // Encrypt the message
            using (MemoryStream ciphertext = new MemoryStream())
            using (CryptoStream cs = new CryptoStream(ciphertext, aes.CreateEncryptor(), CryptoStreamMode.Write))
            {
                byte[] plaintextMessage = Encoding.UTF8.GetBytes(secretMessage);
                cs.Write(plaintextMessage, 0, plaintextMessage.Length);
                cs.Close();
                encryptedMessage = ciphertext.ToArray();
            }
        }
    }

}
public class Bob 
{
    public byte[] bobPublicKey;
    private byte[] bobKey;
    public Bob()
    {
        using (ECDiffieHellmanCng bob = new ECDiffieHellmanCng())
        {

            bob.KeyDerivationFunction = ECDiffieHellmanKeyDerivationFunction.Hash;
            bob.HashAlgorithm = CngAlgorithm.Sha256;
            bobPublicKey = bob.PublicKey.ToByteArray();
            bobKey = bob.DeriveKeyMaterial(CngKey.Import(Alice.alicePublicKey, CngKeyBlobFormat.EccPublicBlob));

        }
    }

    public void Receive(byte[] encryptedMessage, byte[] iv)
    {

        using (Aes aes = new AesCryptoServiceProvider())
        {
            aes.Key = bobKey;
            aes.IV = iv;
            // Decrypt the message
            using (MemoryStream plaintext = new MemoryStream())
            {
                using (CryptoStream cs = new CryptoStream(plaintext, aes.CreateDecryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(encryptedMessage, 0, encryptedMessage.Length);
                    cs.Close();
                    string message = Encoding.UTF8.GetString(plaintext.ToArray());
                    Console.WriteLine(message);
                }
            }
        }
    }

}


.NET Framework

Pris en charge dans : 4, 3.5

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Windows 7, Windows Vista SP1 ou ultérieur, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure)

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Date

Historique

Motif

Mars 2011

Exemple et remarques développées ajoutées.

Améliorations apportées aux informations.

Cela vous a-t-il été utile ?
(1500 caractères restants)
Contenu de la communauté Ajouter
Annotations FAQ