方法 : ハードウェア暗号化デバイスにアクセスする

更新 : 2010 年 7 月

CspParameters クラスを使って、ハードウェア暗号化デバイスにアクセスできます。 たとえば、このクラスを使って、スマート カード、ハードウェア乱数ジェネレーター、または特定の暗号化アルゴリズムを実装したハードウェアにアプリケーションを統合できます。

CspParameters クラスは、適切にインストールされたハードウェア暗号化デバイスにアクセスする暗号化サービス プロバイダー (CSP) を作成します。 CSP を使用できるかどうかは、レジストリ エディター (Regedit.exe) を使ってレジストリ キー HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider を調べると確認できます。

キー カードを使ってデータに署名するには

  1. CspParameters クラスの新しいインスタンスを作成し、整数プロバイダー型とプロバイダー名をコンストラクターに渡します。

  2. 適切なフラグを新しく作成した CspParameters オブジェクトの Flags プロパティに渡します。 たとえば、UseDefaultKeyContainer フラグを渡します。

  3. AsymmetricAlgorithm クラス (RSACryptoServiceProvider クラスなど) の新しいインスタンスを作成し、CspParameters オブジェクトをコンストラクターに渡します。

  4. Sign メソッドの 1 つを使ってデータに署名し、Verify メソッドの 1 つを使ってデータを検証します。

ハードウェア乱数ジェネレーターを使って乱数を生成するには

  1. CspParameters クラスの新しいインスタンスを作成し、整数プロバイダー型とプロバイダー名をコンストラクターに渡します。

  2. RNGCryptoServiceProvider クラスの新しいインスタンスを作成し、CspParameters オブジェクトをコンストラクターに渡します。

  3. 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 オブジェクトを初期化する必要があります。 詳細については、カード リーダーのドキュメントを参照してください。

参照

その他の技術情報

暗号タスク

履歴の変更

日付

履歴

理由

2010 年 7 月

レジストリ エディターの実行可能ファイルの名前を修正しました。

カスタマー フィードバック