Udostępnij za pośrednictwem


Porady: dostęp do sprzętowych urządzeń szyfrujących

Uwaga

Ten artykuł dotyczy systemu Windows.

Możesz użyć CspParameters klasy , aby uzyskać dostęp do urządzeń szyfrowania sprzętowego. Na przykład można użyć tej klasy do zintegrowania aplikacji z kartą inteligentną, generatorem liczb losowych sprzętu lub implementacją sprzętową określonego algorytmu kryptograficznego.

Klasa CspParameters tworzy dostawcę usług kryptograficznych (CSP), który uzyskuje dostęp do prawidłowo zainstalowanego urządzenia szyfrowania sprzętowego. Dostępność dostawcy usług kryptograficznych można sprawdzić, sprawdzając następujący klucz rejestru przy użyciu Edytora rejestru (Regedit.exe): HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider.

Aby podpisać dane przy użyciu karty klucza

  1. Utwórz nowe wystąpienie CspParameters klasy, przekazując typ dostawcy liczby całkowitej i nazwę dostawcy do konstruktora.

  2. Przekaż odpowiednie flagi do Flags właściwości nowo utworzonego CspParameters obiektu. Na przykład przekaż flagę UseDefaultKeyContainer .

  3. Utwórz nowe wystąpienie AsymmetricAlgorithm klasy (na przykład klasę RSACryptoServiceProvider ), przekazując CspParameters obiekt do konstruktora.

  4. Podpisz dane przy użyciu jednej z Sign metod i zweryfikuj dane przy użyciu jednej z Verify metod.

Aby wygenerować liczbę losową przy użyciu sprzętowego generatora liczb losowych

  1. Utwórz nowe wystąpienie CspParameters klasy, przekazując typ dostawcy liczby całkowitej i nazwę dostawcy do konstruktora.

  2. Utwórz nowe wystąpienie RNGCryptoServiceProviderobiektu , przekazujące CspParameters obiekt do konstruktora.

  3. Utwórz wartość losową przy użyciu GetBytes metody or GetNonZeroBytes .

Przykład

W poniższym przykładzie kodu pokazano, jak podpisywać dane przy użyciu karty inteligentnej. Przykładowy kod tworzy CspParameters obiekt, który uwidacznia kartę inteligentną, a następnie inicjuje RSACryptoServiceProvider obiekt przy użyciu dostawcy usług kryptograficznych. Przykładowy kod podpisuje i weryfikuje niektóre dane.

Z powodu problemów z kolizją z algorytmem SHA1 zalecamy użycie algorytmu SHA256 lub lepszego.

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

   // 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 = 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 );
}

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

Kompilowanie kodu

  • Uwzględnij System przestrzenie nazw i System.Security.Cryptography .

  • Na komputerze musi być zainstalowany czytnik kart inteligentnych i sterowniki.

  • Należy zainicjować CspParameters obiekt przy użyciu informacji specyficznych dla czytnika kart. Aby uzyskać więcej informacji, zobacz dokumentację czytnika kart.

Zobacz też