方法 : ハードウェア暗号化デバイスにアクセスする
更新 : 2007 年 11 月
CspParameters クラスを使って、ハードウェア暗号化デバイスにアクセスできます。たとえば、このクラスを使って、スマート カード、ハードウェア乱数ジェネレータ、または特定の暗号化アルゴリズムを実装したハードウェアにアプリケーションを統合できます。
CspParameters クラスは、適切にインストールされたハードウェア暗号化デバイスにアクセスする暗号化サービス プロバイダ (CSP) を作成します。CSP を使用できるかどうかは、レジストリ エディタ (Regex.exe) を使ってレジストリ キー HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider を調べると確認できます。
キー カードを使ってデータに署名するには
CspParameters クラスの新しいインスタンスを作成し、整数プロバイダ型とプロバイダ名をコンストラクタに渡します。
適切なフラグを新しく作成した CspParameters オブジェクトの Flags プロパティに渡します。たとえば、UseDefaultKeyContainer フラグを渡します。
AsymmetricAlgorithm クラス (RSACryptoServiceProvider クラスなど) の新しいインスタンスを作成し、CspParameters オブジェクトをコンストラクタに渡します。
Sign メソッドの 1 つを使ってデータに署名し、Verify メソッドの 1 つを使ってデータを検証します。
ハードウェア乱数ジェネレータを使って乱数を生成するには
CspParameters クラスの新しいインスタンスを作成し、整数プロバイダ型とプロバイダ名をコンストラクタに渡します。
RNGCryptoServiceProvider クラスの新しいインスタンスを作成し、CspParameters オブジェクトをコンストラクタに渡します。
GetBytes メソッドまたは GetNonZeroBytes メソッドを使って乱数を作成します。
使用例
次のコード例では、スマート カードを使ってデータに署名する方法を示します。このコード例では、スマート カードを公開する CspParameters オブジェクトを作成し、CSP を使って RSACryptoServiceProvider オブジェクトを初期化します。次に、データに署名し、検証します。
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 オブジェクトを初期化する必要があります。詳細については、カード リーダーのドキュメントを参照してください。