.NET Framework の暗号モデル.NET Framework Cryptography Model

.NET Framework は、多くの標準的な暗号化アルゴリズムの実装を提供します。The .NET Framework provides implementations of many standard cryptographic algorithms. これらのアルゴリズムは簡単に使用でき、またできるだけ安全な既定のプロパティを提供しています。These algorithms are easy to use and have the safest possible default properties. さらに、オブジェクトの継承、ストリームの設計、および構成の .NET Framework の暗号モデルは非常に拡張性に優れています。In addition, the .NET Framework cryptography model of object inheritance, stream design, and configuration is extremely extensible.

オブジェクトの継承Object Inheritance

.NET Framework のセキュリティ システムは、拡張可能な派生クラス継承のパターンを実装しています。The .NET Framework security system implements an extensible pattern of derived class inheritance. 階層は次のとおりです。The hierarchy is as follows:

派生クラスのこのパターンを使用すると、新しいアルゴリズムの追加、または既存アルゴリズムの新規実装の追加を簡単に行えます。Using this pattern of derived classes, it is easy to add a new algorithm or a new implementation of an existing algorithm. たとえば、新しい公開キー アルゴリズムを作成するには、AsymmetricAlgorithm クラスから継承します。For example, to create a new public-key algorithm, you would inherit from the AsymmetricAlgorithm class. 特定のアルゴリズムの実装を新しく作成するには、そのアルゴリズムの非抽象派生クラスを作成します。To create a new implementation of a specific algorithm, you would create a non-abstract derived class of that algorithm.

.NET Framework でアルゴリズムを実装する方法How Algorithms Are Implemented in the .NET Framework

アルゴリズムに使用できるさまざまな実装例として、対称アルゴリズムを検討します。As an example of the different implementations available for an algorithm, consider symmetric algorithms. すべての対称アルゴリズムのベースは SymmetricAlgorithm であり、次のアルゴリズムによって継承されます。The base for all symmetric algorithms is SymmetricAlgorithm, which is inherited by the following algorithms:

  1. Aes

  2. DES

  3. RC2

  4. Rijndael

  5. TripleDES

Aes は、AesCryptoServiceProviderAesManaged の 2 つのクラスによって継承されます。Aes is inherited by two classes: AesCryptoServiceProvider and AesManaged. AesCryptoServiceProvider クラスは Aes の Windows 暗号化 API (CAPI) 実装のラッパーですが、AesManaged クラスは全体がマネージド コードで書かれています。The AesCryptoServiceProvider class is a wrapper around the Windows Cryptography API (CAPI) implementation of Aes, whereas the AesManaged class is written entirely in managed code. さらに、マネージド実装と CAPI 実装に加え、3 つ目の実装、Cryptography Next Generation (CNG) もあります。There is also a third type of implementation, Cryptography Next Generation (CNG), in addition to the managed and CAPI implementations. CNG アルゴリズムの例が ECDiffieHellmanCng です。An example of a CNG algorithm is ECDiffieHellmanCng. CNG アルゴリズムは、Windows Vista 以降のバージョンで利用可能です。CNG algorithms are available on Windows Vista and later.

ご自身にとって最適な実装を選択できます。You can choose which implementation is best for you. マネージド実装は、.NET Framework をサポートするすべてのプラットフォームで利用できます。The managed implementations are available on all platforms that support the .NET Framework. CAPI 実装は、以前のオペレーティング システムで使用可能ですが、開発中止となっています。The CAPI implementations are available on older operating systems, and are no longer being developed. CNG はまさに最新の実装であり、新しい開発が行われます。CNG is the very latest implementation where new development will take place. ただし、マネージド実装は連邦情報処理規格 (FIPS: Federal Information Processing Standard) に認定されておらず、ラッパー クラスよりも低速である場合があります。However, the managed implementations are not certified by the Federal Information Processing Standards (FIPS), and may be slower than the wrapper classes.

ストリーム デザインStream Design

共通言語ランタイムは、対称アルゴリズムおよびハッシュ アルゴリズムを実装するためのストリーム指向デザインを使用しています。The common language runtime uses a stream-oriented design for implementing symmetric algorithms and hash algorithms. この設計の中心となるは、Stream クラスから派生する CryptoStream クラスです。The core of this design is the CryptoStream class, which derives from the Stream class. ストリーム ベースの暗号化オブジェクトは、単一の標準インターフェイス (CryptoStream) をサポートし、オブジェクトのデータ転送部分を処理します。Stream-based cryptographic objects support a single standard interface (CryptoStream) for handling the data transfer portion of the object. すべてのオブジェクトは標準のインターフェイス上に構築されるため、複数のオブジェクト (ハッシュ オブジェクトに続く暗号化オブジェクトなど) を連結したり、データ用の中間ストレージなしでデータ上で複数の操作を実行したりできます。Because all the objects are built on a standard interface, you can chain together multiple objects (such as a hash object followed by an encryption object), and you can perform multiple operations on the data without needing any intermediate storage for it. また、ストリーミング モデルを使用して、より小さなオブジェクトからオブジェクトを構築することもできます。The streaming model also enables you to build objects from smaller objects. たとえば、複合暗号化とハッシュ アルゴリズムは 1 つのストリーム オブジェクトと見ることができますが、このオブジェクトは一連の複数のストリーム オブジェクトから作成されているかもしれません。For example, a combined encryption and hash algorithm can be viewed as a single stream object, although this object might be built from a set of stream objects.

暗号化の構成Cryptographic Configuration

暗号化の構成によって、アルゴリズムの特定の実装のアルゴリズム名への解決が可能になり、.NET Framework の暗号化クラスの機能を拡張できます。Cryptographic configuration lets you resolve a specific implementation of an algorithm to an algorithm name, allowing extensibility of the .NET Framework cryptography classes. アルゴリズムの独自のハードウェアまたはソフトウェア実装を追加して、実装を任意のアルゴリズム名にマップすることができます。You can add your own hardware or software implementation of an algorithm and map the implementation to the algorithm name of your choice. 構成ファイルでアルゴリズムを指定しない場合は、既定の設定が使用されます。If an algorithm is not specified in the configuration file, the default settings are used. 暗号の構成の詳細については、次を参照してください。暗号化クラスの構成します。For more information about cryptographic configuration, see Configuring Cryptography Classes.

アルゴリズムの選択Choosing an Algorithm

データの整合性、データのプライバシー保護、またはキー生成など、さまざまな理由のためにアルゴリズムを選択することができます。You can select an algorithm for different reasons: for example, for data integrity, for data privacy, or to generate a key. 対称アルゴリズムおよびハッシュ アルゴリズムは、整合性の理由 (変更の防止) またはプライバシー上の理由 (表示の防止) のいずれかのためにデータを保護することを意図しています。Symmetric and hash algorithms are intended for protecting data for either integrity reasons (protect from change) or privacy reasons (protect from viewing). ハッシュ アルゴリズムは、主にデータの整合性用に使用されます。Hash algorithms are used primarily for data integrity.

アプリケーションで推奨されるアルゴリズムの一覧を示します。Here is a list of recommended algorithms by application:

関連項目See also