「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
暗号化アルゴリズムは、一通り揃っている。
- 乱数生成
RNGCryptoServiceProvider?
- パスワードからのキー生成
Rfc2898DeriveBytes?
- 暗号(暗号化・復号化、署名・検証に利用可能)
- 秘密鍵・暗号化
- Aes
- DES
- RC2
- Rijndael
- TripleDES
- データの整合性 (MAC)
- HMAC MD5
- HMAC RIPEMD160
- HMAC SHA256
- HMAC SHA384
- HMAC SHA512
- MAC TripleDES
- データのプライバシー(AEAD)
については自作が必要。
- 3DES-CBC
- AES-CBC
- AES-CTR
- AES-CCM
- AES-GCM ★
- AES-GMAC
.NET Frameworkの暗号化Providerの列挙 †
乱数生成、キー生成 †
乱数生成 †
- RNGCryptoServiceProvider?を使用して、暗号乱数を生成する。
- Membership.GeneratePassword?も下位でRNGCryptoServiceProvider?を使用している。
キー生成 †
- Rfc2898DeriveBytes?を使用して、パスワード ベースのキーを生成する。
- 主に、
- キー付きハッシュ(KeyedHashAlgorithm?)
- 秘密鍵暗号方式(SymmetricAlgorithm?)
のキーを生成する(パスワードをそのまま使用しない)。
ハッシュ †
暗号ハッシュ(HashAlgorithm?) †
- HashAlgorithm?.Createというファクトリを使用して、
HashAlgorithm?型で扱えば、あまり差異が無く使える。
キー付きハッシュ(KeyedHashAlgorithm?) †
- KeyedHashAlgorithm?.Createというファクトリを使用して、
KeyedHashAlgorithm?型で扱えば、あまり差異が無く使える。
(ただし、Key指定する場合、個別のコンストラクタを使用する必要がある)
秘密鍵暗号方式(SymmetricAlgorithm?) †
SymmetricAlgorithm? †
公開鍵暗号方式(AsymmetricAlgorithm?) †
AsymmetricAlgorithm? †
- AsymmetricAlgorithm?の内、暗号化・復号化が可能な公開鍵暗号方式は、
RSAのみ(他のアルゴリズムは、キー交換や署名のみサポート)。
AsymmetricKeyExchangeFormatter?, ECDiffieHellman? †
- 非対称キー交換フォーマッタ、デフォーマッタ
プロバイダをラップして、手続きだけを提供するクラス。
署名・検証(AsymmetricAlgorithm?) †
AsymmetricAlgorithm? †
AsymmetricSignatureFormatter? †
- 非対称署名フォーマッタ、デフォーマッタ
プロバイダをラップして、手続きだけを提供するクラス。
追加のプロバイダ †
Security.Cryptography †
- AES with CCM or GCM
以下のクラスは、コメントを読むとAES-CCM or AES-GCMを実装している。
- AuthenticatedSymmetricAlgorithm?
↑(継承)
- AuthenticatedAes?, AuthenticatedAesCng?
Security.Cryptography.XML †
XML署名・暗号
.NET Frameworkからの移植 †
Managed、CAPI(CSP)、CNG実装とは? †
- Managedで終わる名称のProviderは、.NET実装と思われる。
- CryptoServiceProvider? (CSP) で終わる名称のProviderは、
「CryptoAPI Cryptographic Service Providers (CSP ≒ CAPI) 実装と思われる。
- Cryptography Next Generation (CNG) で終わる名称のProviderは、
CNG Cryptographic Algorithm Providers実装と思われる。
CAPI (CSP) †
CNG †
- CNG系の暗号化プロバイダの秘密鍵、暗号化操作は、
CNG キー分離サービスは、分離 LSA プロセスでホストされているため、
CC (Common Criteria)国際標準規格の要求に従ってキープロセス分離を提供する。
- 分離 LSA プロセス
- 仮想化ベースのセキュリティを使って保護され、OSの他の部分からアクセスできない。
- CNGプロバイダを使用するプロセスは、RPCを使って分離 LSA プロセスと通信する。
アルゴリズム †
- Sha1
- Sha256
- Sha384
- Sha512
- ECDsa
- ECDsaP256
- ECDsaP384
- ECDsaP521
- ECDiffieHellman?
- ECDiffieHellmanP256
- ECDiffieHellmanP384
- ECDiffieHellmanP521
参考 †
には、以下のようにある。
最適な実装を選択可能 †
- マネージ実装
.NET Framework をサポートするすべてのプラットフォームで利用可能。
ただし、マネージ実装はFIPSに認定されておらず、ラッパー クラスよりも低速である場合がある。
- CAPI 実装
CSPラッパー。以前のOSで使用可能だが、開発中止となっている。
- CNG 実装
CNGラッパー。まさに最新の実装であり、新しい開発が行われる。
.NET Core、Linux †
- 選択と言うより、プラットフォームによって限定的になるケースもあるもよう。
- 例えば、X.509 を使用した際に取得できるRSAプロバイダが、
- .NET FrameworkではRSACsp
- .NET Core on WindowsではRSACng
- .NET Core on Linuxでは、RSAOpenSsl?
になることなどを観測した。
- この辺りは、プラットフォーム依存が強いので、
クロスプラットフォーム対応は難しい部分がありそう。
性能 †
参考 †
DOBON.NET: VB.NET, C#, 無料ソフトウェア... †
http://dobon.net/index.html
暗号ハッシュ †
秘密鍵暗号方式 †
公開鍵暗号方式 †
署名・検証 †
乱数生成、キー生成 †
ライブラリ †
libsodium †
- C言語で開発された、クロスプラットフォームの暗号化ライブラリを含む。
- PHPでは、PECLで提供されていたがコアに標準的に組み込まれた等の経緯があるもよう。
参考 †
Tags: :.NET開発, :セキュリティ, :暗号化, :証明書