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
Erstellen Sie eine neue Instanz der CspParameters-Klasse, indem Sie den Anbietertyp als ganze Zahl und den Anbieternamen an den Konstruktor übergeben.
Übergeben Sie die entsprechenden Flags an die Flags-Eigenschaft des neu erstellten CspParameters-Objekts. Übergeben Sie z. B. das UseDefaultKeyContainer-Flag.
Erstellen Sie eine neue Instanz der AsymmetricAlgorithm-Klasse (z. B. die RSACryptoServiceProvider-Klasse), indem Sie ein CspParameters-Objekt an den Konstruktor übergeben.
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
Erstellen Sie eine neue Instanz der CspParameters-Klasse, indem Sie den Anbietertyp als ganze Zahl und den Anbieternamen an den Konstruktor übergeben.
Erstellen Sie eine neue Instanz des RNGCryptoServiceProvider, indem Sie ein CspParameters-Objekt an den Konstruktor übergeben.
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.