.NET Framework の暗号モデル
更新 : 2010 年 7 月
.NET Framework には、多くの標準的な暗号化アルゴリズムの実装が用意されています。 これらのアルゴリズムは使いやすく、既定のプロパティはできる限り安全に設定されています。 さらに、.NET Framework 暗号モデルのオブジェクト継承、ストリーム デザイン、および構成は、拡張性に非常に優れています。
オブジェクト継承
.NET Framework セキュリティ システムには、派生クラス継承の拡張可能なパターンが実装されています。 階層構造は次のとおりです。
SymmetricAlgorithm、AsymmetricAlgorithm、HashAlgorithm などのアルゴリズム タイプ クラス。 このレベルは抽象的です。
Aes、RC2、ECDiffieHellman などのアルゴリズム タイプ クラスから継承するアルゴリズム クラス。 このレベルは抽象的です。
AesManaged、RC2CryptoServiceProvider、ECDiffieHellmanCng などのアルゴリズム クラスから継承するアルゴリズム クラスの実装。 このレベルは完全に実装されています。
この派生クラスのパターンを使用すると、新しいアルゴリズムを追加したり、既存のアルゴリズムに新しい実装を追加したりできます。 たとえば、新しい公開キー アルゴリズムを作成するには、AsymmetricAlgorithm クラスから継承します。 特定のアルゴリズムの新しい実装を作成するには、そのアルゴリズムの非抽象派生クラスを作成します。
.NET Framework でのアルゴリズムの実装方法
アルゴリズムに使用できるさまざまな実装の例として、対称アルゴリズムについて考えてみます。 すべての対称アルゴリズムのベースは SymmetricAlgorithm で、次のアルゴリズムによって継承されます。
Aes は、AesCryptoServiceProvider と AesManaged の 2 つのクラスによって継承されます。 AesCryptoServiceProvider クラスは Aes の Windows Crypto API (CAPI) 実装のラッパーで、AesManaged クラスはすべてマネージ コードで記述されます。 マネージ実装と CAPI 実装に加えて、CNG (Cryptography Next Generation) という 3 つ目の種類の実装もあります。 CNG アルゴリズムの例としては、ECDiffieHellmanCng があります。 CNG アルゴリズムは、Windows Vista 以降で使用できます。
これらの中で最適な実装を選択できます。 マネージ実装は、.NET Framework をサポートするすべてのプラットフォームで使用できます。 CAPI 実装は古いオペレーティング システムで使用でき、現在は開発されていません。 CNG は、新しい開発が行われていく最新の実装です。 ただし、マネージ実装は連邦情報処理規格 (FIPS: Federal Information Processing Standard) によって認定されておらず、ラッパー クラスよりも低速になることがあります。
ストリーム デザイン
共通言語ランタイムは、対称アルゴリズムとハッシュ アルゴリズムを実装するためにストリーム指向のデザインを使用します。 このデザインの中核となるのは、Stream クラスから派生する CryptoStream クラスです。 ストリーム ベースの暗号オブジェクトは、オブジェクトのデータ転送部分を処理するために、単一の標準インターフェイス (CryptoStream) をサポートします。 すべてのオブジェクトは標準インターフェイス上に構築されるため、複数のオブジェクトをチェインできます (たとえば、ハッシュ オブジェクトの後ろに暗号オブジェクトを追加できます)。また、データ用の中間ストレージを必要とせずに、データに対して複数の操作を実行できます。 ストリーミング モデルを使用すると、より小さなオブジェクトからオブジェクトを構築することもできます。 たとえば、暗号化アルゴリズムとハッシュ アルゴリズムの組み合わせを、そのオブジェクトがストリーム オブジェクトのセットから構築されている場合でも、単一のストリーム オブジェクトと見なすことができます。
暗号の構成
暗号の構成によって、アルゴリズムの特定の実装をアルゴリズム名に解決でき、.NET Framework 暗号クラスに拡張性が提供されます。 アルゴリズムの独自のハードウェア実装やソフトウェア実装を追加したり、実装を任意のアルゴリズム名に割り当てたりすることができます。 構成ファイルにアルゴリズムが指定されていない場合は、既定の設定が使用されます。 暗号の構成の詳細については、「暗号化クラスの設定」を参照してください。
アルゴリズムの選択
アルゴリズムは、データ整合性、データ プライバシー、キーの生成などのさまざまな理由で選択できます。 対称アルゴリズムとハッシュ アルゴリズムは、整合性を保つ (変更されないようにする) ため、またはプライバシーを守る (表示されないようにする) ためにデータを保護することを目的としています。 ハッシュ アルゴリズムは主に、データ整合性を確保するために使用されます。
以下に、推奨されるアルゴリズムを適用別に示します。
データ プライバシー:
データ整合性:
デジタル署名:
キー交換:
乱数生成:
パスワードからのキーの生成:
参照
概念
その他の技術情報
履歴の変更
日付 |
履歴 |
理由 |
---|---|---|
2010 年 7 月 |
トピックを拡張。 |
情報の拡充 |