次の方法で共有


暗号化と復号化のためのキーの生成

更新 : 2007 年 11 月

キーの作成と管理は、暗号プロセスの重要な部分です。対称アルゴリズムでは、キーと初期化ベクタ (IV) を作成する必要があります。作成したキーと IV は、データの復号化を許可しない人には秘密にしておきます。非対称アルゴリズムでは、公開キーと秘密キーを作成する必要があります。公開キーはだれに公開してもかまいせんが、秘密キーを知らせる相手は、公開キーで暗号化されたデータを復号化する人だけにします。このセクションでは、対称アルゴリズムと非対称アルゴリズムの両方について、キーを作成して管理する方法を説明します。

共通キー

.NET Framework に用意されている対称暗号化クラスでは、データを暗号化および復号化するために、キーと新しい初期化ベクタ (IV) が必要になります。いずれかのマネージ対称暗号化クラスの新しいインスタンスを作成するとき、既定のコンストラクタを使用すると、常に新しいキーと IV が自動的に作成されます。自分のデータを復号化できるようにする相手は、自分と同じキーおよび IV を所有し、同じアルゴリズムを使用する必要があります。一般に、キーと IV はセッションごとに新しく作成する必要があり、キーも IV も格納して後のセッションで使用することは望ましくありません。

通常、共通キーと IV を離れた場所にいる人へ送信するためには、非対称暗号化方式を使用して共通キーと IV を暗号化します。これらの値を暗号化せずに安全でないネットワークをとおして送信することは、値を傍受した人ならだれでもデータを復号化できるようになるため、非常に危険です。キーと IV を暗号化して転送する手順の詳細については、「暗号スキームの作成」を参照してください。

TripleDES アルゴリズムを実装する TripleDESCryptoServiceProvider クラスの新しいインスタンスの作成方法を次の例に示します。

Dim TDES As TripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider()
TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();

上記のコードを実行すると新しいキーと IV が生成され、それぞれ Key プロパティと IV プロパティに設定されます。

複数のキーを生成する必要が生じることもあります。このような状況では、対称アルゴリズムを実装するクラスの新しいインスタンスを作成し、次に GenerateKey および GenerateIV メソッドを呼び出すことによって新しいキーと IV を作成します。非対称暗号化クラスの新しいインスタンスの作成後に新しいキーと IV を作成する方法を次のコード例に示します。

Dim TDES As TripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider()
TDES.GenerateIV()
TDES.GenerateKey()
TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();
TDES.GenerateIV();
TDES.GenerateKey();

上記のコードを実行すると、TripleDESCryptoServiceProvider の新しいインスタンスの作成時にキーと IV が生成されます。GenerateKey メソッドと GenerateIV メソッドを呼び出すと、別のキーと IV が作成されます。

非対称キー

.NET Framework には、非対称暗号化方式のための RSACryptoServiceProvider クラスと DSACryptoServiceProvider クラスが用意されています。これらのクラスの既定のコンストラクタを使用して新しいインスタンスを作成すると、公開キーと秘密キーのペアが作成されます。非対称キーは、複数のセッションで使用できるように格納したり、1 つのセッション専用として生成したりできます。公開キーは一般に公開できますが、秘密キーは厳密に保護する必要があります。

非対称アルゴリズム クラスの新しいインスタンスを作成すると、公開キーと秘密キーのペアが常に生成されます。クラスの新しいインスタンスを作成したら、次の 2 つの方法のどちらかを使ってキー情報を取得できます。

どちらのメソッドにも、公開キー情報だけを返すのか、または公開キー情報と秘密キー情報の両方を返すのかを示すブール値を渡すことができます。ImportParameters メソッドを使用すると、RSACryptoServiceProvider クラスを初期化して RSAParameters 構造体の値を設定できます。

非対称秘密キーは、ローカル コンピュータにそのまま平文として保存しないでください。秘密キーを格納する必要がある場合は、キー コンテナを使用することをお勧めします。秘密キーをキー コンテナに格納する方法の詳細については、「方法 : キー コンテナに非対称キーを格納する」を参照してください。

RSACryptoServiceProvider クラスの新しいインスタンスを作成し、公開キーと秘密キーのペアを作成して、公開キー情報を RSAParameters 構造体に保存するコード例を次に示します。

'Generate a public/private key pair.
Dim RSA as RSACryptoServiceProvider = new RSACryptoServiceProvider()
'Save the public key information to an RSAParameters structure.
Dim RSAKeyInfo As RSAParameters = RSA.ExportParameters(false)
//Generate a public/private key pair.
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
//Save the public key information to an RSAParameters structure.
RSAParameters RSAKeyInfo = RSA.ExportParameters(false);

参照

処理手順

方法 : キー コンテナに非対称キーを格納する

概念

データの暗号化

データの復号化

その他の技術情報

暗号タスク

暗号サービス