Condividi tramite


Procedura: Accedere ai dispositivi di crittografia hardware

Annotazioni

Questo articolo si applica a Windows.

È possibile usare la CspParameters classe per accedere ai dispositivi di crittografia hardware. Ad esempio, è possibile usare questa classe per integrare l'applicazione con una smart card, un generatore di numeri casuali hardware o un'implementazione hardware di un particolare algoritmo di crittografia.

La CspParameters classe crea un provider di servizi di crittografia (CSP) che accede a un dispositivo di crittografia hardware installato correttamente. È possibile verificare la disponibilità di un CSP (fornitore di servizi di crittografia) esaminando la seguente chiave del Registro di sistema usando l'Editor del Registro di sistema (Regedit.exe): HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider.

Per firmare i dati usando una scheda chiave

  1. Creare una nuova istanza della CspParameters classe , passando il tipo di provider integer e il nome del provider al costruttore.

  2. Passare i flag appropriati nella proprietà Flags dell'oggetto CspParameters appena creato. Ad esempio, passa il flag UseDefaultKeyContainer.

  3. Creare una nuova istanza di una AsymmetricAlgorithm classe , ad esempio la RSACryptoServiceProvider classe , passando l'oggetto CspParameters al costruttore .

  4. Firmare i dati usando uno dei Sign metodi e verificare i dati usando uno dei Verify metodi .

Per generare un numero casuale usando un generatore di numeri casuali hardware

  1. Creare una nuova istanza della CspParameters classe , passando il tipo di provider integer e il nome del provider al costruttore.

  2. Creare una nuova istanza di RNGCryptoServiceProvider, passando l'oggetto CspParameters al costruttore .

  3. Creare un valore casuale usando il GetBytes metodo o GetNonZeroBytes .

Esempio

Nell'esempio di codice seguente viene illustrato come firmare i dati usando una smart card. L'esempio di codice crea un CspParameters oggetto che espone una smart card e quindi inizializza un RSACryptoServiceProvider oggetto usando il provider di servizi crittografici. L'esempio di codice firma e verifica alcuni dati.

A causa di problemi di collisione con SHA1, è consigliabile sha256 o superiore.

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);
        }
    }
}
Imports System.Security.Cryptography



Module SCSign

    Sub Main(ByVal args() As String)
        ' 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.
        Dim csp As New CspParameters(1, "Schlumberger Cryptographic Service Provider")
        csp.Flags = CspProviderFlags.UseDefaultKeyContainer

        ' Initialize an RSACryptoServiceProvider object using
        ' the CspParameters object.
        Dim rsa As New RSACryptoServiceProvider(csp)

        ' Create some data to sign.
        Dim data() As Byte = {0, 1, 2, 3, 4, 5, 6, 7}


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

        ' Sign the data using the Smart Card CryptoGraphic Provider.
        Dim sig As Byte() = rsa.SignData(data, "SHA1")

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

        ' Verify the data using the Smart Card CryptoGraphic Provider.
        Dim verified As Boolean = rsa.VerifyData(data, "SHA1", sig)

        Console.WriteLine("Verified")

    End Sub

End Module

Compilazione del codice

  • Includere gli System spazi dei nomi e System.Security.Cryptography .

  • È necessario che nel computer sia installato un lettore di smart card e driver.

  • È necessario inizializzare l'oggetto CspParameters utilizzando informazioni specifiche per il lettore di schede. Per altre informazioni, vedere la documentazione del lettore di schede.

Vedere anche