「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次  †
概要  †
暗号化アルゴリズムは、一通り揃っている。
Managed、CAPI(CSP)、CNG実装とは?  †
- Managedで終わる名称のProviderは、.NET実装と思われる(mscorlib.dll)。
 
- CryptoServiceProvider? (CSP) で終わる名称のProviderは、「CryptoAPI Cryptographic Service Providers (CSP ≒ CAPI) を使用する」とある(System.Core.dll)。
 
- Cryptography Next Generation (CNG) で終わる名称のProviderは、CNG Cryptographic Algorithm Providersの実装を使用している(System.Core.dll)。
 
参考  †
CAPI (CSP)  †
CNG  †
どれを使用すべき?  †
には、以下のようにある。
最適な実装を選択可能  †
- マネージ実装
.NET Framework をサポートするすべてのプラットフォームで利用可能。
ただし、マネージ実装はFIPSに認定されておらず、ラッパー クラスよりも低速である場合がある。 
- CAPI 実装
CSPラッパー。以前のOSで使用可能だが、開発中止となっている。 
- CNG 実装
CNGラッパー。まさに最新の実装であり、新しい開発が行われる。 
アルゴリズムの選択  †
- データの整合性
- HMAC SHA-256
 
- HMAC SHA-512
 
 
- デジタル署名
- ECDsa
 
- RSA(RS256: RSA SHA-256)
 
 
- キー交換
- ECDiffieHellman?
 
- RSA(RS256: RSA SHA-256)
 
 
- 乱数生成
RNGCryptoServiceProvider? 
- パスワードからのキー生成
Rfc2898DeriveBytes? 
CngKey?  †
以下の様な違いがあるが、
RSACngのキーはCngKey?クラスによって管理され、RSACngのコンストラクタに注入できますが、
RSACryptoServiceProvider?は独自のキー操作に結びついています。
どちらでも良さそう。
性能  †
.NETの暗号化Providerの列挙  †
ハッシュ  †
暗号ハッシュ(HashAlgorithm?)  †
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.hashalgorithm.aspx
キー付きハッシュ(KeyedHashAlgorithm?)  †
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.keyedhashalgorithm.aspx
暗号化  †
秘密鍵暗号方式(SymmetricAlgorithm?)  †
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.symmetricalgorithm.aspx
公開鍵暗号方式(AsymmetricAlgorithm?)  †
AsymmetricAlgorithm?の内、暗号化・復号化が可能な公開鍵暗号方式は、RS256(RSA)のみ。
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.asymmetricalgorithm.aspx
署名・検証(AsymmetricAlgorithm?)  †
署名・検証は、AsymmetricAlgorithm?の内の、以下のProviderを使用する。
なお、RS256(RSA)は、暗号化・復号化だけでなく、署名・検証にも利用可能である。
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.asymmetricalgorithm.aspx
乱数生成、キー生成  †
乱数生成  †
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.rngcryptoserviceprovider(v=vs.110).aspx
RNGCryptoServiceProvider?を使用する。
Membership.GeneratePassword?も下位でRNGCryptoServiceProvider?を使用している。
キー生成  †
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.rfc2898derivebytes.aspx
Rfc2898DeriveBytes?を使用する。
主に、
- キー付きハッシュ(KeyedHashAlgorithm?)
 
- 秘密鍵暗号方式(SymmetricAlgorithm?)
 
のキーを生成する(パスワードをそのまま使用しない)。
参考  †
DOBON.NET: VB.NET, C#, 無料ソフトウェア...  †
http://dobon.net/index.html
暗号ハッシュ  †
秘密鍵暗号方式  †
公開鍵暗号方式  †
署名・検証  †
乱数生成、キー生成  †
Tags: :.NET開発, :セキュリティ, :暗号化, :証明書