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

Aktualisiert: November 2007

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 den folgenden Registrierungsschlüssel mit dem Registrierungs-Editor (Regex.exe) ü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