Практическое руководство. Доступ к устройствам аппаратного шифрования
Обновлен: Ноябрь 2007
Для доступа к устройствам аппаратного шифрования может использоваться класс CspParameters. Например, этот класс может использоваться для интеграции в приложение возможности использования смарт-карт, аппаратного генератора случайных чисел или аппаратной реализации определенного криптографического алгоритма.
С помощью класса CspParameters создается поставщик службы шифрования (CSP), который обеспечивает доступ к корректно установленному устройству аппаратного шифрования. Наличие CSP можно установить, проверив с помощью редактора реестра (Regex.exe) следующий раздел реестра: HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider.
Подписывание данных с помощью карты ключа
Создайте новый экземпляр класса CspParameters, передав конструктору целочисленное значение, определяющее тип поставщика и имя поставщика.
Передайте соответствующие флаги свойству Flags созданного объекта CspParameters. Например, можно передать флаг UseDefaultKeyContainer.
Создайте новый экземпляр класса AsymmetricAlgorithm (например, класс RSACryptoServiceProvider), передав конструктору объект CspParameters.
Подпишите данные с помощью одного из методов Sign и проверьте данные с помощью одного из методов Verify.
Формирование случайного числа с помощью аппаратного генератора случайных чисел
Создайте новый экземпляр класса CspParameters, передав конструктору целочисленное значение, определяющее тип поставщика и имя поставщика.
Создайте новый экземпляр RNGCryptoServiceProvider, передав конструктору объект CspParameters.
Создайте случайное значение с помощью методов 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 следует использовать сведения, характерные для используемого устройства чтения смарт-карт. Дополнительные сведения см. в документации по устройству чтения смарт-карт.