Gewusst wie: Zugreifen auf Hardwaregeräte zur Verschlüsselung

Mit der CspParameters-Klasse können Sie auf Hardwaregeräte zur Verschlüsselung zuzugreifen. Mit dieser Klasse können Sie z. B. eine Anwendung in eine Smartcard, einen Hardware-Generator von Zufallszahlen oder eine Hardwareimplementierung eines bestimmten kryptografischen Algorithmus integrieren.

Die CspParameters-Klasse erstellt einen Kryptografiedienstanbieter (CSP), der auf ein ordnungsgemäß installiertes Hardwaregerät zur Verschlüsselung zugreift. Sie können die Verfügbarkeit eines CSP sicherstellen, indem Sie im Registrierungs-Editor (Regedit.exe) den folgenden Registrierungsschlüssel überprüfen: HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider.

So signieren Sie Daten mit einer Schlüsselkarte

  1. Erstellen Sie eine neue Instanz der CspParameters-Klasse, indem Sie den Anbietertyp als ganze Zahl und den Anbieternamen an den Konstruktor übergeben.

  2. Übergeben Sie die entsprechenden Flags an die Flags-Eigenschaft des neu erstellten CspParameters-Objekts. Übergeben Sie z. B. das UseDefaultKeyContainer-Flag.

  3. Erstellen Sie eine neue Instanz der AsymmetricAlgorithm-Klasse (z. B. die RSACryptoServiceProvider-Klasse), indem Sie ein CspParameters-Objekt an den Konstruktor übergeben.

  4. Signieren Sie die Daten mit einer der Sign-Methoden, und überprüfen Sie die Daten mit einer der Verify-Methoden.

So generieren Sie mit einem Hardware-Generator von Zufallszahlen eine Zufallszahl

  1. Erstellen Sie eine neue Instanz der CspParameters-Klasse, indem Sie den Anbietertyp als ganze Zahl und den Anbieternamen an den Konstruktor übergeben.

  2. Erstellen Sie eine neue Instanz des RNGCryptoServiceProvider, indem Sie ein CspParameters-Objekt an den Konstruktor übergeben.

  3. Erstellen Sie mit der GetBytes-Methode oder der GetNonZeroBytes-Methode einen zufälligen Wert.

Beispiel

Im folgenden Codebeispiel wird veranschaulicht, wie Daten mit einer Smartcard signiert werden. Im Codebeispiel wird ein CspParameters-Objekt erstellt, das eine Smartcard verfügbar macht, und anschließend wird mit dem CSP ein RSACryptoServiceProvider-Objekt initialisiert. Anschließend werden im Codebeispiel einige Daten signiert und überprüft.

Imports System
Imports System.Security.Cryptography



Module SCSign

    Sub Main(ByVal args() As String)
        ' To idendify 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
using System;
using System.Security.Cryptography;

namespace SmartCardSign
{
    class SCSign
    {
        static void Main(string[] args)
        {
            // To idendify 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);

        }
    }
}
using namespace System;
using namespace System::Security::Cryptography;
int main()
{

   // To idendify 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 = gcnew CspParameters( 1,L"Schlumberger Cryptographic Service Provider" );
   csp->Flags = CspProviderFlags::UseDefaultKeyContainer;

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

   // Create some data to sign.
   array<Byte>^data = gcnew array<Byte>{
      0,1,2,3,4,5,6,7
   };
   Console::WriteLine( L"Data           : {0}", BitConverter::ToString( data ) );

   // Sign the data using the Smart Card CryptoGraphic Provider.
   array<Byte>^sig = rsa->SignData( data, L"SHA1" );
   Console::WriteLine( L"Signature  : {0}", BitConverter::ToString( sig ) );

   // Verify the data using the Smart Card CryptoGraphic Provider.
   bool verified = rsa->VerifyData( data, L"SHA1", sig );
   Console::WriteLine( L"Verified       : {0}", verified );
}

Kompilieren des Codes

  • Fügen Sie den System-Namespace und den System.Security.Cryptography-Namespace hinzu.

  • Auf dem Computer müssen ein Smartcardleser und -treiber installiert sein.

  • Sie müssen das CspParameters-Objekt mit spezifischen Informationen zum Kartenleser initialisieren. Weitere Informationen finden Sie in der Dokumentation des Kartenlesers.

Siehe auch

Weitere Ressourcen

Kryptografische Aufgaben

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Juli 2010

Name der ausführbaren Datei für den Registrierungs-Editor korrigiert.

Kundenfeedback.