Lire en anglais

Partager via


Procédure : accéder aux appareils de chiffrement matériel

Notes

Cet article s’applique à Windows.

Vous pouvez utiliser la classe CspParameters pour accéder aux périphériques de chiffrement matériel. Par exemple, vous pouvez utiliser cette classe pour intégrer votre application à une carte à puce, à un générateur matériel de nombres aléatoires ou à une implémentation matérielle d'un algorithme de chiffrement.

La classe CspParameters crée un fournisseur de services de chiffrement (CSP) qui accède à un périphérique de chiffrement matériel correctement installé. Vous pouvez vérifier la disponibilité d’un fournisseur de services de chiffrement en inspectant la clé de Registre suivante à l’aide de l’Éditeur du Registre (Regedit.exe) : HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider.

Pour signer des données à l'aide d'une carte de clé

  1. Créez une instance de la classe CspParameters, en passant le type de fournisseur entier et le nom du fournisseur au constructeur.

  2. Passez les indicateurs appropriés à la propriété Flags du nouvel objet CspParameters. Par exemple, passez l'indicateur UseDefaultKeyContainer.

  3. Créez une instance d'une classe AsymmetricAlgorithm (par exemple, la classe RSACryptoServiceProvider), en passant l'objet CspParameters au constructeur.

  4. Signez vos données à l'aide de l'une des méthodes Sign, puis vérifiez vos données à l'aide de l'une des méthodes Verify.

Pour générer un nombre aléatoire à l'aide d'un générateur matériel de nombres aléatoires

  1. Créez une instance de la classe CspParameters, en passant le type de fournisseur entier et le nom du fournisseur au constructeur.

  2. Créez une instance de RNGCryptoServiceProvider, en passant l'objet CspParameters au constructeur.

  3. Créez une valeur aléatoire à l'aide de la méthode GetBytes ou GetNonZeroBytes.

Exemple

L'exemple de code suivant montre comment signer des données à l'aide d'une carte à puce. L'exemple de code crée un objet CspParameters qui expose une carte à puce, puis initialise un objet RSACryptoServiceProvider à l'aide du fournisseur de services de chiffrement. L'exemple de code signe et vérifie certaines données.

En raison de problèmes de collision avec SHA1, nous recommandons au minimum SHA256.

C#
using System;
using System.Runtime.Versioning;
using System.Security.Cryptography;

namespace SmartCardSign
{
    [SupportedOSPlatform("windows")]
    class SCSign
    {
        static void Main(string[] args)
        {
            // To identify the Smart Card CryptoGraphic Providers on your
            // computer, use the Microsoft Registry Editor (Regedit.exe).
            // The available Smart Card CryptoGraphic Providers are listed
            // in HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider.

            // Create a new CspParameters object that identifies a
            // Smart Card CryptoGraphic Provider.
            // The 1st parameter comes from HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider Types.
            // The 2nd parameter comes from HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider.
            CspParameters csp = new CspParameters(1, "Schlumberger Cryptographic Service Provider");
            csp.Flags = CspProviderFlags.UseDefaultKeyContainer;

            // Initialize an RSACryptoServiceProvider object using
            // the CspParameters object.
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp);

            // Create some data to sign.
            byte[] data = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };

            Console.WriteLine("Data			: " + BitConverter.ToString(data));

            // Sign the data using the Smart Card CryptoGraphic Provider.
            byte[] sig = rsa.SignData(data, "SHA1");

            Console.WriteLine("Signature	: " + BitConverter.ToString(sig));

            // Verify the data using the Smart Card CryptoGraphic Provider.
            bool verified = rsa.VerifyData(data, "SHA1", sig);

            Console.WriteLine("Verified		: " + verified);
        }
    }
}

Compilation du code

  • Incluez les espaces de noms System et System.Security.Cryptography.

  • Vous devez disposer d'un lecteur de carte à puce et de pilotes installés sur votre ordinateur.

  • Vous devez initialiser l'objet CspParameters à l'aide des informations spécifiques à votre lecteur de cartes. Pour plus d'informations, consultez la documentation de votre lecteur de cartes.

Voir aussi