Практическое руководство. Доступ к устройствам аппаратного шифрования

Для доступа к устройствам аппаратного шифрования может использоваться класс CspParameters. Например, этот класс может использоваться для интеграции в приложение возможности использования смарт-карт, аппаратного генератора случайных чисел или аппаратной реализации определенного криптографического алгоритма.

С помощью класса CspParameters создается поставщик службы шифрования (CSP), который обеспечивает доступ к корректно установленному устройству аппаратного шифрования. Наличие CSP можно установить, проверив с помощью редактора реестра (Regedit.exe) следующий раздел реестра: HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider.

Подписывание данных с помощью карты ключа

  1. Создайте новый экземпляр класса CspParameters, передав конструктору целочисленное значение, определяющее тип поставщика и имя поставщика.

  2. Передайте соответствующие флаги свойству Flags созданного объекта CspParameters. Например, можно передать флаг UseDefaultKeyContainer.

  3. Создайте новый экземпляр класса AsymmetricAlgorithm (например, класс RSACryptoServiceProvider), передав конструктору объект CspParameters.

  4. Подпишите данные с помощью одного из методов Sign и проверьте данные с помощью одного из методов Verify.

Формирование случайного числа с помощью аппаратного генератора случайных чисел

  1. Создайте новый экземпляр класса CspParameters, передав конструктору целочисленное значение, определяющее тип поставщика и имя поставщика.

  2. Создайте новый экземпляр RNGCryptoServiceProvider, передав конструктору объект CspParameters.

  3. Создайте случайное значение с помощью методов GetBytes или GetNonZeroBytes.

Пример

В следующем примере кода демонстрируется подписывание данных с помощью смарт-карты. В этом примере создается объект CspParameters, обеспечивающий доступ к смарт-карте, а затем инициализируется объект RSACryptoServiceProvider с помощью CSP. Затем в примере производится подписывание и проверка данных.

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

Компиляция кода

  • Включите пространства имен System и System.Security.Cryptography.

  • На компьютере должно быть установлено устройство чтения смарт-карт и драйверы.

  • Для инициализации объекта CspParameters следует использовать сведения, характерные для используемого устройства чтения смарт-карт. Дополнительные сведения см. в документации по устройству чтения смарт-карт.

См. также

Другие ресурсы

Задачи криптографии

Журнал изменений

Дата

Журнал

Причина

Июль 2010

Исправлено имя исполняемого файла редактора реестра.

Обратная связь от клиента.