services de chiffrementCryptographic Services

Les réseaux publics, tels qu'Internet, n'offrent aucun moyen de sécuriser les communications entre les entités.Public networks such as the Internet do not provide a means of secure communication between entities. Les communications qui transitent par ces réseaux sont susceptibles d'être lues voire modifiées par des tiers non autorisés.Communication over such networks is susceptible to being read or even modified by unauthorized third parties. Le chiffrement permet de prévenir la consultation des données, offre des moyens de détecter si les données ont été modifiées et fournit un mode de communication sécurisé via des canaux qui autrement ne sont pas sécurisés.Cryptography helps protect data from being viewed, provides ways to detect whether data has been modified, and helps provide a secure means of communication over otherwise nonsecure channels. Par exemple, les données peuvent être chiffrées à l'aide d'un algorithme de chiffrement, transmises dans un état chiffré et par la suite déchiffrées par le destinataire prévu.For example, data can be encrypted by using a cryptographic algorithm, transmitted in an encrypted state, and later decrypted by the intended party. Si un tiers intercepte les données chiffrées, il lui sera difficile de les déchiffrer.If a third party intercepts the encrypted data, it will be difficult to decipher.

Dans le .NET Framework, les classes de l'espace de noms System.Security.Cryptography gèrent automatiquement divers détails liés au chiffrement.In the .NET Framework, the classes in the System.Security.Cryptography namespace manage many details of cryptography for you. Certaines d'entre elles sont des wrappers pour l'API de chiffrement Microsoft non managée (CryptoAPI), tandis que d'autres sont de pures implémentations managées.Some are wrappers for the unmanaged Microsoft Cryptography API (CryptoAPI), while others are purely managed implementations. Vous n'avez pas besoin d'être un expert en chiffrement pour utiliser ces classes.You do not need to be an expert in cryptography to use these classes. Quand vous créez une instance de l'une des classes d'algorithme de chiffrement, les clés sont générées automatiquement pour une plus grande facilité d'utilisation, et les propriétés par défaut sont aussi sûres et sécurisées que possible.When you create a new instance of one of the encryption algorithm classes, keys are autogenerated for ease of use, and default properties are as safe and secure as possible.

Cette présentation fournit un résumé des méthodes de chiffrement et des pratiques de prises en charge par le .NET Framework, y compris les manifestes ClickOnce, de la Suite B et prise en charge de l’infrastructure de Diagnostics Windows (CNG, Cryptography Next Generation) introduite dans .NET Framework 3.5.This overview provides a synopsis of the encryption methods and practices supported by the .NET Framework, including the ClickOnce manifests, Suite B, and Cryptography Next Generation (CNG) support introduced in the .NET Framework 3.5.

Cette vue d'ensemble contient les sections suivantes :This overview contains the following sections:

Pour plus d'informations sur le chiffrement et les services, composants et outils Microsoft qui permettent d'ajouter à vos applications une sécurité par chiffrement, consultez la section relative au développement et à la sécurité Win32 et COM de cette documentation.For additional information about cryptography and about Microsoft services, components, and tools that enable you to add cryptographic security to your applications, see the Win32 and COM Development, Security section of this documentation.

Primitives de chiffrementCryptographic Primitives

Dans un cas classique où le chiffrement est utilisé, la communication entre deux parties (Alice et Jean) se fait via un canal non sécurisé.In a typical situation where cryptography is used, two parties (Alice and Bob) communicate over a nonsecure channel. Alice et Jean veulent s'assurer que leurs communications restent incompréhensibles pour quiconque les écouterait.Alice and Bob want to ensure that their communication remains incomprehensible by anyone who might be listening. De plus, comme Alice et Jean sont distants l'un de l'autre, Alice doit s'assurer que les informations qu'elle reçoit de Jean n'ont pas été modifiées par quiconque durant la transmission.Furthermore, because Alice and Bob are in remote locations, Alice must make sure that the information she receives from Bob has not been modified by anyone during transmission. Par ailleurs, elle doit s'assurer que les informations viennent bien de Jean et non d'une personne qui aurait emprunté son identité.In addition, she must make sure that the information really does originate from Bob and not from someone who is impersonating Bob.

Le chiffrement vise à atteindre les objectifs suivants :Cryptography is used to achieve the following goals:

  • Confidentialité : Pour protéger les identités d’un utilisateur ou de données soit lu.Confidentiality: To help protect a user's identity or data from being read.

  • Intégrité des données : Pour aider à protéger les données contre toute modification.Data integrity: To help protect data from being changed.

  • Authentification : Pour vous assurer que les données proviennent d’un tiers donné.Authentication: To ensure that data originates from a particular party.

  • Non-répudiation : Pour empêcher un tiers donné de nier qu’il a envoyé un message.Non-repudiation: To prevent a particular party from denying that they sent a message.

Pour atteindre ces objectifs, vous pouvez utiliser une combinaison d'algorithmes et de pratiques appelés primitives de chiffrement pour créer un modèle de chiffrement.To achieve these goals, you can use a combination of algorithms and practices known as cryptographic primitives to create a cryptographic scheme. Le tableau suivant répertorie les primitives de chiffrement et leurs fonctions.The following table lists the cryptographic primitives and their uses.

Primitive de chiffrementCryptographic primitive UtilisezUse
Chiffrement à clé secrète (chiffrement symétrique)Secret-key encryption (symmetric cryptography) Transforme les données pour empêcher des tiers de les lire.Performs a transformation on data to keep it from being read by third parties. Ce type de chiffrement fait appel à une clé partagée, secrète et unique pour chiffrer et déchiffrer des données.This type of encryption uses a single shared, secret key to encrypt and decrypt data.
Chiffrement à clé publique (chiffrement asymétrique)Public-key encryption (asymmetric cryptography) Transforme les données pour empêcher des tiers de les lire.Performs a transformation on data to keep it from being read by third parties. Ce type de chiffrement fait appel à une paire de clés publique/privée pour chiffrer et déchiffrer les données.This type of encryption uses a public/private key pair to encrypt and decrypt data.
Signature chiffréeCryptographic signing Permet de vérifier que les données viennent bien d'un tiers déterminé en créant une signature numérique qui lui est propre.Helps verify that data originates from a specific party by creating a digital signature that is unique to that party. Ce processus utilise aussi des fonctions de hachage.This process also uses hash functions.
Hachages de chiffrementCryptographic hashes Mappe les données de n'importe quelle longueur à une séquence d'octets de longueur fixe.Maps data from any length to a fixed-length byte sequence. Les hachages sont statistiquement uniques ; deux séquences de deux octets n'auront jamais la même valeur de hachage.Hashes are statistically unique; a different two-byte sequence will not hash to the same value.

Retour au débutBack to top

Chiffrement à clé secrèteSecret-Key Encryption

Les algorithmes de chiffrement à clé secrète font appel à une clé secrète unique pour chiffrer et déchiffrer les données.Secret-key encryption algorithms use a single secret key to encrypt and decrypt data. Vous devez sécuriser la clé pour empêcher des agents non autorisés d'y accéder, car n'importe quel tiers qui aurait la clé en sa possession pourrait s'en servir pour déchiffrer vos données ou chiffrer les siennes en prétendant qu'elles viennent de vous.You must secure the key from access by unauthorized agents, because any party that has the key can use it to decrypt your data or encrypt their own data, claiming it originated from you.

Le chiffrement à clé secrète est aussi appelé chiffrement symétrique, car la même clé est utilisée pour le chiffrement et déchiffrement.Secret-key encryption is also referred to as symmetric encryption because the same key is used for encryption and decryption. Les algorithmes de chiffrement à clé secrète sont très rapides (par rapport aux algorithmes à clé publique) et se prêtent bien aux transformations de chiffrement sur les flux de données importants.Secret-key encryption algorithms are very fast (compared with public-key algorithms) and are well suited for performing cryptographic transformations on large streams of data. Les algorithmes de chiffrement asymétrique tels que RSA sont limités mathématiquement quant à la quantité de données qu'ils peuvent chiffrer.Asymmetric encryption algorithms such as RSA are limited mathematically in how much data they can encrypt. En général, les algorithmes de chiffrement symétrique n'ont pas ces problèmes.Symmetric encryption algorithms do not generally have those problems.

Un type d'algorithme à clé secrète appelé chiffrement par blocs est utilisé pour chiffrer un bloc de données à la fois.A type of secret-key algorithm called a block cipher is used to encrypt one block of data at a time. Les chiffrements par blocs tels que Data Encryption Standard (DES), TripleDES et Advanced Encryption Standard (AES) transforment par chiffrement un bloc d'entrée de n octets en un bloc d'octets chiffrés de sortie.Block ciphers such as Data Encryption Standard (DES), TripleDES, and Advanced Encryption Standard (AES) cryptographically transform an input block of n bytes into an output block of encrypted bytes. Si vous voulez chiffrer ou déchiffrer une séquence d'octets, vous devez le faire bloc par bloc.If you want to encrypt or decrypt a sequence of bytes, you have to do it block by block. Sachant que la valeur n est faible (8 octets pour DES et TripleDES ; 16 octets [par défaut], 24 octets ou 32 octets pour AES), les valeurs de données supérieures à n doivent être chiffrées un bloc à la fois.Because n is small (8 bytes for DES and TripleDES; 16 bytes [the default], 24 bytes, or 32 bytes for AES), data values that are larger than n have to be encrypted one block at a time. Les valeurs de données inférieures à n doivent être étendues à n afin d'être traitées.Data values that are smaller than n have to be expanded to n in order to be processed.

Il existe une forme simple de chiffrement par blocs, qui est appelée « mode ECB » (Electronic Codebook, livre de codes électronique).One simple form of block cipher is called the electronic codebook (ECB) mode. Le mode ECB n'est pas considéré comme sécurisé, car il n'utilise pas de vecteur d'initialisation pour initialiser le premier bloc de texte en clair.ECB mode is not considered secure, because it does not use an initialization vector to initialize the first plaintext block. Pour une clé secrète donnée k, un simple chiffrement par blocs qui n'utilise pas de vecteur d'initialisation chiffrera-t-il un même bloc d'entrée de texte en clair en bloc de sortie de texte chiffré équivalent.For a given secret key k, a simple block cipher that does not use an initialization vector will encrypt the same input block of plaintext into the same output block of ciphertext. Par conséquent, si vous avez des blocs en double dans votre flux de texte en clair d'entrée, vous aurez des blocs en double dans votre flux de texte chiffré de sortie.Therefore, if you have duplicate blocks in your input plaintext stream, you will have duplicate blocks in your output ciphertext stream. La présence de ces blocs de sortie en double alerteront les utilisateurs non autorisés sur la faiblesse du chiffrement utilisé, sur les algorithmes qui ont pu être utilisés et sur les modes d'attaque possibles.These duplicate output blocks alert unauthorized users to the weak encryption used the algorithms that might have been employed, and the possible modes of attack. Le mode de chiffrement ECB est donc assez vulnérable à l'analyse et, en fin de compte, à la découverte de clés.The ECB cipher mode is therefore quite vulnerable to analysis, and ultimately, key discovery.

Les classes de chiffrement par blocs fournies dans la bibliothèque de classes de base utilisent un mode de chaînage par défaut appelé CBC (Cipher-Block Chaining, chaînage de blocs de chiffrement), mais vous pouvez éventuellement modifier ce mode par défaut.The block cipher classes that are provided in the base class library use a default chaining mode called cipher-block chaining (CBC), although you can change this default if you want.

Le chiffrement CBC surpasse les problèmes liés au chiffrement ECB en utilisant un vecteur d'initialisation pour chiffrer le premier bloc de texte en clair.CBC ciphers overcome the problems associated with ECB ciphers by using an initialization vector (IV) to encrypt the first block of plaintext. Avant d'être chiffré, chaque bloc de texte en clair suivant fait l'objet d'une opération OR exclusive au niveau du bit (XOR) avec le bloc de texte chiffré précédent.Each subsequent block of plaintext undergoes a bitwise exclusive OR (XOR) operation with the previous ciphertext block before it is encrypted. Chaque bloc de texte chiffré dépend donc de tous les blocs précédents.Each ciphertext block is therefore dependent on all previous blocks. Avec ce système, les en-têtes de message courants qu'un utilisateur non autorisé pourrait connaître ne peuvent pas être utilisés pour reconstituer une clé.When this system is used, common message headers that might be known to an unauthorized user cannot be used to reverse-engineer a key.

Une façon de compromettre des données chiffrées avec un chiffrement CBC est d'effectuer une recherche exhaustive de chaque clé possible.One way to compromise data that is encrypted with a CBC cipher is to perform an exhaustive search of every possible key. Selon la taille de la clé utilisée pour effectuer le chiffrement, ce type de recherche peut être extrêmement fastidieux, sinon impossible, même en utilisant les ordinateurs les plus rapides.Depending on the size of the key that is used to perform encryption, this kind of search is very time-consuming using even the fastest computers and is therefore infeasible. Les clés de grande taille sont plus difficiles à déchiffrer.Larger key sizes are more difficult to decipher. Même si, en théorie, le chiffrement n'empêche pas un adversaire de récupérer les données chiffrées, il rend la tâche bien plus difficile.Although encryption does not make it theoretically impossible for an adversary to retrieve the encrypted data, it does raise the cost of doing this. S'il faut trois mois pour effectuer une recherche exhaustive en vue de récupérer des données qui ne seront valables que quelques jours, cette méthode de recherche ne revêt aucun intérêt.If it takes three months to perform an exhaustive search to retrieve data that is meaningful only for a few days, the exhaustive search method is impractical.

L'inconvénient du chiffrement à clé secrète est qu'il suppose que les deux parties se sont mises d'accord sur une clé et un vecteur d'initialisation et qu'elles se sont communiqué leurs valeurs.The disadvantage of secret-key encryption is that it presumes two parties have agreed on a key and IV, and communicated their values. Le vecteur d'initialisation n'est pas considéré comme un secret et peut être transmis en texte en clair avec le message.The IV is not considered a secret and can be transmitted in plaintext with the message. Cependant, la clé doit être tenue secrète des utilisateurs non autorisés.However, the key must be kept secret from unauthorized users. Du fait de ces problèmes, le chiffrement à clé secrète est souvent employé conjointement avec le chiffrement à clé publique pour communiquer de manière confidentielle les valeurs de la clé et du vecteur d'initialisation.Because of these problems, secret-key encryption is often used together with public-key encryption to privately communicate the values of the key and IV.

En supposant que Alice et Bob est deux parties qui désirent communiquer sur un canal non sécurisé, ils peuvent utiliser le chiffrement de clé secrète comme suit : Alice et Jean conviennent utiliser un algorithme particulier (par exemple, AES) avec une clé et un vecteur d’initialisation.Assuming that Alice and Bob are two parties who want to communicate over a nonsecure channel, they might use secret-key encryption as follows: Alice and Bob agree to use one particular algorithm (AES, for example) with a particular key and IV. Alice compose un message et crée un flux de réseau (par exemple un e-mail nommé canal ou de réseau) sur lequel envoyer le message.Alice composes a message and creates a network stream (perhaps a named pipe or network email) on which to send the message. Ensuite, elle chiffre le texte à l'aide de la clé et du vecteur d'initialisation, puis envoie le message chiffré et le vecteur d'initialisation à Jean via l'intranet.Next, she encrypts the text using the key and IV, and sends the encrypted message and IV to Bob over the intranet. Jean reçoit le texte chiffré et le déchiffre à l'aide du vecteur d'initialisation et de la clé convenue précédemment.Bob receives the encrypted text and decrypts it by using the IV and previously agreed upon key. Si la transmission est interceptée, l'intercepteur ne peut pas récupérer le message d'origine, car il ne connaît pas la clé.If the transmission is intercepted, the interceptor cannot recover the original message, because he does not know the key. Dans ce scénario, seule la clé doit rester secrète.In this scenario, only the key must remain secret. Dans un scénario réel, Alice ou Jean génère une clé secrète et utilise un chiffrement (asymétrique) à clé publique pour transférer la clé (symétrique) secrète à l'autre partie.In a real world scenario, either Alice or Bob generates a secret key and uses public-key (asymmetric) encryption to transfer the secret (symmetric) key to the other party. Pour plus d'informations sur le chiffrement à clé publique, consultez la section suivante.For more information about public-key encryption, see the next section.

Le .NET Framework fournit les classes suivantes qui implémentent des algorithmes de chiffrement à clé secrète :The .NET Framework provides the following classes that implement secret-key encryption algorithms:

Retour au débutBack to top

Chiffrement à clé publiquePublic-Key Encryption

Le chiffrement à clé publique fait appel à une clé privée qui doit être tenue secrète des utilisateurs non autorisés et à une clé publique qui peut être divulguée à n'importe qui.Public-key encryption uses a private key that must be kept secret from unauthorized users and a public key that can be made public to anyone. La clé publique et la clé privée sont liées mathématiquement ; les données chiffrées avec la clé publique ne peuvent être déchiffrées qu'avec la clé privée, tandis que les données signées avec la clé privée ne peuvent être vérifiées qu'avec la clé publique.The public key and the private key are mathematically linked; data that is encrypted with the public key can be decrypted only with the private key, and data that is signed with the private key can be verified only with the public key. La clé publique peut être divulguée à n'importe qui ; elle sert à chiffrer les données à envoyer au détenteur de la clé privée.The public key can be made available to anyone; it is used for encrypting data to be sent to the keeper of the private key. Les algorithmes de chiffrement à clé publique sont aussi appelés algorithmes asymétriques, car ils font appel à une clé pour chiffrer les données et à une autre clé pour les déchiffrer.Public-key cryptographic algorithms are also known as asymmetric algorithms because one key is required to encrypt data, and another key is required to decrypt data. Il existe une règle de base en matière de chiffrement qui interdit la réutilisation d'une clé. Par ailleurs, les deux clés doivent être uniques pour chaque session de communication.A basic cryptographic rule prohibits key reuse, and both keys should be unique for each communication session. Or, dans la pratique, les clés asymétriques ont généralement une longue durée de vie.However, in practice, asymmetric keys are generally long-lived.

Deux parties (Alice et Jean) peuvent utiliser le chiffrement de clé publique comme suit : Tout d’abord, Alice génère une paire de clés publique/privée.Two parties (Alice and Bob) might use public-key encryption as follows: First, Alice generates a public/private key pair. Si Jean veut envoyer un message chiffré à Alice, il lui réclame sa clé publique.If Bob wants to send Alice an encrypted message, he asks her for her public key. Alice envoie sa clé publique à Jean via un réseau non sécurisé et Jean utilise cette clé pour chiffrer un message.Alice sends Bob her public key over a nonsecure network, and Bob uses this key to encrypt a message. Jean envoie le message chiffré à Alice, qui le déchiffre à l'aide de sa clé privée.Bob sends the encrypted message to Alice, and she decrypts it by using her private key. Si Jean a reçu la clé d'Alice via un canal non sécurisé, tel qu'un réseau public, il est exposé à une « attaque de l'intercepteur ».If Bob received Alice's key over a nonsecure channel, such as a public network, Bob is open to a man-in-the-middle attack. Par conséquent, Jean doit vérifier auprès d'Alice que la copie dont il dispose de sa clé publique est correcte.Therefore, Bob must verify with Alice that he has a correct copy of her public key.

Pendant la transmission de la clé publique d'Alice, le risque existe qu'un agent non autorisé intercepte la clé.During the transmission of Alice's public key, an unauthorized agent might intercept the key. De plus, ce même agent pourrait intercepter le message chiffré de Jean.Furthermore, the same agent might intercept the encrypted message from Bob. En revanche, l'agent ne peut pas déchiffrer le message avec la clé publique.However, the agent cannot decrypt the message with the public key. Le message ne peut être déchiffré qu'avec la clé privée d'Alice, qui n'a pas été transmise.The message can be decrypted only with Alice's private key, which has not been transmitted. Alice n'utilise pas sa clé privée pour chiffrer un message de réponse à Jean, car quiconque en possession de la clé publique pourrait déchiffrer le message.Alice does not use her private key to encrypt a reply message to Bob, because anyone with the public key could decrypt the message. Si Alice souhaite envoyer une réponse à Bob, elle réclame à Jean sa clé publique et chiffre son message à l'aide de cette clé publique.If Alice wants to send a message back to Bob, she asks Bob for his public key and encrypts her message using that public key. Jean déchiffre ensuite le message à l'aide de sa clé privée associée.Bob then decrypts the message using his associated private key.

Dans ce scénario, Alice et Jean utilisent le chiffrement à clé publique (asymétrique) pour transférer une clé secrète (symétrique) et utilisent le chiffrement à clé secrète pour le reste de leur session.In this scenario, Alice and Bob use public-key (asymmetric) encryption to transfer a secret (symmetric) key and use secret-key encryption for the remainder of their session.

La liste suivante propose une comparaison entre les algorithmes de chiffrement à clé publique et à clé secrète :The following list offers comparisons between public-key and secret-key cryptographic algorithms:

  • Les algorithmes de chiffrement à clé publique utilisent une taille de mémoire tampon fixe, tandis que les algorithmes de chiffrement à clé secrète utilisent une mémoire tampon de longueur variable.Public-key cryptographic algorithms use a fixed buffer size, whereas secret-key cryptographic algorithms use a variable-length buffer.

  • Les algorithmes à clé publique ne peuvent pas être utilisés pour chaîner ensemble des données sous forme de flux à la manière des algorithmes à clé secrète, car seules de petites quantités de données peuvent être chiffrées.Public-key algorithms cannot be used to chain data together into streams the way secret-key algorithms can, because only small amounts of data can be encrypted. Par conséquent, les opérations asymétriques n'utilisent pas le même modèle de diffusion en continu que les opérations symétriques.Therefore, asymmetric operations do not use the same streaming model as symmetric operations.

  • Le chiffrement à clé publique dispose d'un plus grand espace de clés (plage de valeurs possibles pour la clé) que le chiffrement à clé secrète.Public-key encryption has a much larger keyspace (range of possible values for the key) than secret-key encryption. Par conséquent, le chiffrement à clé publique est moins vulnérable aux attaques exhaustives qui essaient toutes les clés possibles.Therefore, public-key encryption is less susceptible to exhaustive attacks that try every possible key.

  • Les clés publiques sont faciles à distribuer dans la mesure où elles n'ont pas besoin d'être sécurisées, à condition qu'il existe un moyen de vérifier l'identité de l'expéditeur.Public keys are easy to distribute because they do not have to be secured, provided that some way exists to verify the identity of the sender.

  • Certains algorithmes à clé publique (tels que RSA et DSA, mais pas Diffie-Hellman) permettent de créer des signatures numériques pour vérifier l'identité de l'expéditeur des données.Some public-key algorithms (such as RSA and DSA, but not Diffie-Hellman) can be used to create digital signatures to verify the identity of the sender of data.

  • Les algorithmes à clé publique sont très plus lents par rapport aux algorithmes à clé secrète et ne sont pas conçus pour chiffrer de grandes quantités de données.Public-key algorithms are very slow compared with secret-key algorithms, and are not designed to encrypt large amounts of data. Les algorithmes à clé publique ne sont utiles que pour le transfert de très petites quantités de données.Public-key algorithms are useful only for transferring very small amounts of data. En règle générale, le chiffrement à clé publique est utilisé pour chiffrer la clé et le vecteur d'initialisation destiné à être utilisé par un algorithme à clé secrète.Typically, public-key encryption is used to encrypt a key and IV to be used by a secret-key algorithm. Une fois la clé et le vecteur d'initialisation transférés, le chiffrement à clé secrète est utilisé pour le reste de la session.After the key and IV are transferred, secret-key encryption is used for the remainder of the session.

Le .NET Framework fournit les classes suivantes qui implémentent des algorithmes de chiffrement à clé publique :The .NET Framework provides the following classes that implement public-key encryption algorithms:

Si RSA autorise à la fois le chiffrement et la signature, DSA ne peut être utilisé que pour la signature et Diffie-Hellman seulement pour la génération de clés.RSA allows both encryption and signing, but DSA can be used only for signing, and Diffie-Hellman can be used only for key generation. En général, les algorithmes à clé publique sont plus limités dans leurs utilisations que les algorithmes à clé privée.In general, public-key algorithms are more limited in their uses than private-key algorithms.

Retour au débutBack to top

signatures numériquesDigital Signatures

Les algorithmes à clé publique peuvent aussi être utilisés pour créer des signatures numériques.Public-key algorithms can also be used to form digital signatures. Les signatures numériques permettent d'authentifier l'identité d'un expéditeur (si vous jugez que sa clé publique est fiable) et d'assurer l'intégrité des données.Digital signatures authenticate the identity of a sender (if you trust the sender's public key) and help protect the integrity of data. En utilisant la clé publique générée par Alice, le destinataire des données d'Alice peut vérifier que c'est bien elle qui les a envoyées en comparant la signature numérique aux données et à la clé publique d'Alice.Using a public key generated by Alice, the recipient of Alice's data can verify that Alice sent it by comparing the digital signature to Alice's data and Alice's public key.

Pour utiliser le chiffrement à clé publique pour signer numériquement un message, Alice applique d'abord un algorithme de hachage au message pour créer une synthèse du message.To use public-key cryptography to digitally sign a message, Alice first applies a hash algorithm to the message to create a message digest. La synthèse du message est une représentation compacte et unique des données.The message digest is a compact and unique representation of data. Alice chiffre ensuite la synthèse du message à l'aide de sa clé privée pour créer sa signature personnelle.Alice then encrypts the message digest with her private key to create her personal signature. À réception du message et de la signature, Jean déchiffre la signature à l'aide de la clé publique d'Alice pour récupérer la synthèse du message et hache ce dernier en utilisant le même algorithme de hachage que celui utilisé par Alice.Upon receiving the message and signature, Bob decrypts the signature using Alice's public key to recover the message digest and hashes the message using the same hash algorithm that Alice used. Si la synthèse du message calculé par Jean correspond exactement à la synthèse du message reçue d'Alice, Jean est assuré que le message provient de la détentrice de la clé privée et que les données n'ont pas été modifiées.If the message digest that Bob computes exactly matches the message digest received from Alice, Bob is assured that the message came from the possessor of the private key and that the data has not been modified. Si Jean est convaincu qu'Alice est la détentrice de la clé privée, il sait que le message vient d'Alice.If Bob trusts that Alice is the possessor of the private key, he knows that the message came from Alice.

Notes

Une signature peut être vérifiée par n'importe qui, car la clé publique de l'expéditeur est connue de tous et est généralement incluse dans le format de signature numérique.A signature can be verified by anyone because the sender's public key is common knowledge and is typically included in the digital signature format. Cette méthode ne préserve pas le caractère confidentiel du message ; pour être secret, le message doit aussi être chiffré.This method does not retain the secrecy of the message; for the message to be secret, it must also be encrypted.

Le .NET Framework fournit les classes suivantes qui implémentent des algorithmes de signature numérique :The .NET Framework provides the following classes that implement digital signature algorithms:

Retour au débutBack to top

Valeurs de hachageHash Values

Les algorithmes de hachage mappent les valeurs binaires de longueur arbitraire à des valeurs binaires de longueur fixe de plus petite taille appelées valeurs de hachage.Hash algorithms map binary values of an arbitrary length to smaller binary values of a fixed length, known as hash values. Une valeur de hachage est une représentation numérique d'un élément de données.A hash value is a numerical representation of a piece of data. Si vous hachez un paragraphe de texte en clair et que vous modifiez ne serait-ce qu'une lettre du paragraphe, un hachage ultérieur générera une valeur différente.If you hash a paragraph of plaintext and change even one letter of the paragraph, a subsequent hash will produce a different value. Si le hachage est renforcé sur le plan du chiffrement, sa valeur changera considérablement.If the hash is cryptographically strong, its value will change significantly. Par exemple, si un seul bit est modifié dans un message, une fonction de hachage renforcé peut générer une sortie différente de 50 %.For example, if a single bit of a message is changed, a strong hash function may produce an output that differs by 50 percent. Diverses valeurs d'entrée peuvent être hachées dans une même valeur de sortie.Many input values may hash to the same output value. En revanche, d'un point de vue informatique, il n'est pas possible que le hachage de deux entrées distinctes donne une même valeur.However, it is computationally infeasible to find two distinct inputs that hash to the same value.

Les deux parties que constituent Alice et Jean peuvent utiliser une fonction de hachage pour garantir l'intégrité des messages.Two parties (Alice and Bob) could use a hash function to ensure message integrity. Pour cela, ils doivent choisir un algorithme de hachage pour signer leurs messages.They would select a hash algorithm to sign their messages. Alice écrit un message et crée ensuite un hachage de ce message à l'aide de l'algorithme sélectionné.Alice would write a message, and then create a hash of that message by using the selected algorithm. Ils doivent ensuite appliquer l'une des méthodes suivantes :They would then follow one of the following methods:

  • Alice envoie le message de texte en clair et le message haché (signature numérique) à Jean.Alice sends the plaintext message and the hashed message (digital signature) to Bob. Jean reçoit et hache le message et compare sa valeur de hachage à celle qu'il a reçue d'Alice.Bob receives and hashes the message and compares his hash value to the hash value that he received from Alice. Si les valeurs de hachage sont identiques, cela signifie que le message n'a pas été modifié.If the hash values are identical, the message was not altered. Si les valeurs ne sont pas identiques, le message a été modifié après avoir été rédigé par Alice.If the values are not identical, the message was altered after Alice wrote it.

    Malheureusement, cette méthode ne permet pas d'établir l'authenticité de l'expéditeur.Unfortunately, this method does not establish the authenticity of the sender. N'importe qui peut emprunter l'identité d'Alice et envoyer un message à Jean.Anyone can impersonate Alice and send a message to Bob. L'usurpateur peut utiliser le même algorithme de hachage pour signer son message et tout ce que Jean pourra constater, c'est que le message présente la même signature.They can use the same hash algorithm to sign their message, and all Bob can determine is that the message matches its signature. Il s'agit d'une forme d'attaque de l'intercepteur.This is one form of a man-in-the-middle attack. Pour plus d’informations, consultez exemple de Communication sécurisée génération CNG (Cryptography Next).For more information, see Cryptography Next Generation (CNG) Secure Communication Example.

  • Alice envoie le message de texte en clair à Jean via un canal public non sécurisé.Alice sends the plaintext message to Bob over a nonsecure public channel. Elle envoie le message haché à Jean via un canal privé sécurisé.She sends the hashed message to Bob over a secure private channel. Jean reçoit le message de texte en clair, le hache et compare le hachage à celui échangé en privé.Bob receives the plaintext message, hashes it, and compares the hash to the privately exchanged hash. Si les hachages correspondent, Jean peut en déduire deux choses :If the hashes match, Bob knows two things:

    • le message n'a pas été modifié ;The message was not altered.

    • l'expéditeur du message (Alice) est authentique.The sender of the message (Alice) is authentic.

    Pour que ce système fonctionne, Alice doit cacher sa valeur de hachage d'origine à tous les tiers, à l'exception de Jean.For this system to work, Alice must hide her original hash value from all parties except Bob.

  • Alice envoie le message de texte en clair à Jean via un canal public non sécurisé et place le message haché sur son site web accessible publiquement.Alice sends the plaintext message to Bob over a nonsecure public channel and places the hashed message on her publicly viewable Web site.

    Cette méthode évite toute falsification du message en empêchant quiconque de modifier la valeur de hachage.This method prevents message tampering by preventing anyone from modifying the hash value. Même si le message et son hachage peuvent être lus par n'importe qui, la valeur de hachage ne peut être modifiée que par Alice.Although the message and its hash can be read by anyone, the hash value can be changed only by Alice. Une personne malveillante qui chercherait à emprunter l'identité d'Alice doit avoir accès au site web d'Alice.An attacker who wants to impersonate Alice would require access to Alice's Web site.

Aucune des méthodes précédentes n'empêchera quiconque de lire les messages d'Alice, car ils sont transmis sous forme de texte en clair.None of the previous methods will prevent someone from reading Alice's messages, because they are transmitted in plaintext. Pour bénéficier d'une sécurité complète, les signatures numériques (signature des messages) et le chiffrement s'avèrent nécessaires.Full security typically requires digital signatures (message signing) and encryption.

Le .NET Framework fournit les classes suivantes qui implémentent des algorithmes de hachage :The .NET Framework provides the following classes that implement hashing algorithms:

Notes

Suite à la découverte de défauts de conception de MD5 en 1996, il a été recommandé de le remplacer par SHA-1.MD5 design flaws were discovered in 1996, and SHA-1 was recommended instead. En 2004, des défauts supplémentaires ont été découverts. Depuis, l'algorithme MD5 n'est plus considéré comme sécurisé.In 2004, additional flaws were discovered, and the MD5 algorithm is no longer considered secure. L'algorithme SHA-1 a aussi été pointé du doigt pour son manque de fiabilité et SHA-2 est désormais l'algorithme recommandé.The SHA-1 algorithm has also been found to be insecure, and SHA-2 is now recommended instead.

Retour au débutBack to top

génération de nombres aléatoiresRandom Number Generation

La génération de nombres aléatoires est un élément indispensable de nombreuses opérations de chiffrement.Random number generation is integral to many cryptographic operations. Par exemple, les clés de chiffrement doivent être aussi aléatoires que possible de sorte qu'il soit impossible de les reproduire.For example, cryptographic keys need to be as random as possible so that it is infeasible to reproduce them. Les générateurs de nombres aléatoires de chiffrement doivent générer des sorties qu'il est impossible de prédire du point de vue informatique avec une probabilité de plus de 50 %.Cryptographic random number generators must generate output that is computationally infeasible to predict with a probability that is better than one half. Par conséquent, toute méthode de prédiction du bit de sortie suivant ne doit pas pas se montrer plus performante que le hasard.Therefore, any method of predicting the next output bit must not perform better than random guessing. Les classes dans le .NET Framework utilisent des générateurs de nombres aléatoires pour générer des clés de chiffrement.The classes in the .NET Framework use random number generators to generate cryptographic keys.

La classe RNGCryptoServiceProvider est une implémentation d'un algorithme de génération de nombres aléatoires.The RNGCryptoServiceProvider class is an implementation of a random number generator algorithm.

Retour au débutBack to top

Manifestes ClickOnceClickOnce Manifests

Dans le .NET Framework 3.5, les classes de chiffrement suivantes vous permettent d’obtenir et vérifier les informations sur les signatures de manifeste pour les applications qui sont déployées à l’aide de technologie ClickOnce:In the .NET Framework 3.5, the following cryptography classes let you obtain and verify information about manifest signatures for applications that are deployed using ClickOnce technology:

De plus, les classes suivantes fournissent des informations de signature spécifiques :In addition, the following classes provide specific signature information:

Retour au débutBack to top

Prise en charge de Suite BSuite B Support

Le .NET Framework 3.5 prend en charge l’ensemble B de la Suite d’algorithmes de chiffrement publié par la NSA National Security Agency ().The .NET Framework 3.5 supports the Suite B set of cryptographic algorithms published by the National Security Agency (NSA). Pour plus d’informations sur Suite B, consultez le descriptif de la NSA sur le chiffrement Suite B.For more information about Suite B, see the NSA Suite B Cryptography Fact Sheet.

Les algorithmes inclus sont les suivants :The following algorithms are included:

  • Algorithme AES (Advanced Encryption Standard) avec des tailles de clé de 128, 192 et 256 bits pour le chiffrement.Advanced Encryption Standard (AES) algorithm with key sizes of 128, 192, , and 256 bits for encryption.

  • Algorithmes de hachage sécurisé SHA-1, SHA-256, SHA-384 et SHA-512 pour le hachage.Secure Hash Algorithms SHA-1, SHA-256, SHA-384, and SHA-512 for hashing. (Les trois derniers sont généralement regroupés et appelés SHA-2.)(The last three are generally grouped together and referred to as SHA-2.)

  • Algorithme ECDSA (Elliptic Curve Digital Signature Algorithm), utilisant des courbes de moduli premiers de 256, 384 et 521 bits pour la signature.Elliptic Curve Digital Signature Algorithm (ECDSA), using curves of 256-bit, 384-bit, and 521-bit prime moduli for signing. La documentation de la NSA définit précisément ces courbes et les appelle P-256, P-384 et P-521.The NSA documentation specifically defines these curves, and calls them P-256, P-384, and P-521. Cet algorithme est fourni par la classe ECDsaCng .This algorithm is provided by the ECDsaCng class. Il vous permet de signer à l'aide d'une clé privée et de vérifier la signature avec une clé publique.It enables you to sign with a private key and verify the signature with a public key.

  • Algorithme Diffie-Hellman à courbe elliptique (ECDH, Elliptic Curve Diffie-Hellman), utilisant des courbes de moduli premiers de 256, 384 et 521 bits pour l'échange de clés et l'accord secret.Elliptic Curve Diffie-Hellman (ECDH) algorithm, using curves of 256-bit, 384-bit, and 521-bit prime moduli for the key exchange and secret agreement. Cet algorithme est fourni par la classe ECDiffieHellmanCng .This algorithm is provided by the ECDiffieHellmanCng class.

Des wrappers de code managé pour les implémentations certifiées FIPS (Federal Information Processing Standard) des implémentations AES, SHA-256, SHA-384 et SHA-512 sont disponibles dans les nouvelles classes AesCryptoServiceProvider, SHA256CryptoServiceProvider, SHA384CryptoServiceProvideret SHA512CryptoServiceProvider .Managed code wrappers for the Federal Information Processing Standard (FIPS) certified implementations of the AES, SHA-256, SHA-384, and SHA-512 implementations are available in the new AesCryptoServiceProvider, SHA256CryptoServiceProvider, SHA384CryptoServiceProvider, and SHA512CryptoServiceProvider classes.

Retour au débutBack to top

Classes CNG (Cryptography Next Generation)Cryptography Next Generation (CNG) Classes

Les classes CNG fournissent un wrapper managé autour des fonctions CNG natives.The Cryptography Next Generation (CNG) classes provide a managed wrapper around the native CNG functions. (CNG remplac CryptoAPI.) Le nom de ces classes comporte « Cng ».(CNG is the replacement for CryptoAPI.) These classes have "Cng" as part of their names. Au cœur des classes du wrapper CNG se trouve la classe de conteneur de clés CngKey , qui s'approprie le stockage et l'utilisation des clés CNG.Central to the CNG wrapper classes is the CngKey key container class, which abstracts the storage and use of CNG keys. Cette classe vous permet de stocker une paire de clés ou une clé publique en toute sécurité et d'y faire référence en utilisant un nom de chaîne simple.This class lets you store a key pair or a public key securely and refer to it by using a simple string name. La classe de signature ECDsaCng à courbe elliptique et la classe de chiffrement ECDiffieHellmanCng peuvent utiliser des objets CngKey .The elliptic curve-based ECDsaCng signature class and the ECDiffieHellmanCng encryption class can use CngKey objects.

La classe CngKey sert à diverses autres opérations, notamment à ouvrir, créer, supprimer et exporter des clés.The CngKey class is used for a variety of additional operations, including opening, creating, deleting, and exporting keys. Elle permet aussi d'accéder au handle de clé sous-jacent à utiliser quand il s'agit d'appeler des fonctions natives directement.It also provides access to the underlying key handle to use when calling native functions directly.

Le .NET Framework 3.5 inclut également une variété de prendre en charge les classes CNG, tels que les éléments suivants :The .NET Framework 3.5 also includes a variety of supporting CNG classes, such as the following:

Retour au débutBack to top

TitreTitle DescriptionDescription
Modèle de chiffrementCryptography Model Explique comment le chiffrement est implémenté dans la bibliothèque de classes de base.Describes how cryptography is implemented in the base class library.
Procédure pas à pas : Création d’une Application de chiffrementWalkthrough: Creating a Cryptographic Application Présente des tâches de chiffrement et de déchiffrement de base.Demonstrates basic encryption and decryption tasks.
Configuration des classes de chiffrementConfiguring Cryptography Classes Explique comment mapper des noms d'algorithmes à des classes de chiffrement et comment mapper des identificateurs d'objets à un algorithme de chiffrement.Describes how to map algorithm names to cryptographic classes and map object identifiers to a cryptographic algorithm.