「マイクロソフト系技術情報 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  †
- MD5
 
- Sha1
 
- Sha256
 
- Sha384
 
- Sha512
 
- Rsa
 
- ECDiffieHellman?
- ECDiffieHellmanP256
 
- ECDiffieHellmanP384
 
- ECDiffieHellmanP521
 
 
- ECDsa
- ECDsaP256
 
- ECDsaP384
 
- ECDsaP521
 
 
どれを使用すべき?  †
には、以下のようにある。
最適な実装を選択可能  †
- マネージ実装
.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 Frameworkの暗号化Providerの列挙  †
乱数生成、キー生成  †
乱数生成  †
RNGCryptoServiceProvider? クラス (System.Security.Cryptography)
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.rngcryptoserviceprovider.aspx
RNGCryptoServiceProvider?を使用して、暗号乱数を生成する。
Membership.GeneratePassword?も下位でRNGCryptoServiceProvider?を使用している。
キー生成  †
Rfc2898DeriveBytes? クラス (System.Security.Cryptography)
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.rfc2898derivebytes.aspx
Rfc2898DeriveBytes?を使用して、パスワード ベースのキーを生成する。
主に、
- キー付きハッシュ(KeyedHashAlgorithm?)
 
- 秘密鍵暗号方式(SymmetricAlgorithm?)
 
のキーを生成する(パスワードをそのまま使用しない)。
ハッシュ  †
暗号ハッシュ(HashAlgorithm?)  †
HashAlgorithm? クラス (System.Security.Cryptography)
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.hashalgorithm.aspx
キー付きハッシュ(KeyedHashAlgorithm?)  †
Managedのsuffixが無いが、MSDNではmscorlib.dllとなっているためManaged実装と思われる。
KeyedHashAlgorithm? クラス (System.Security.Cryptography)
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.keyedhashalgorithm.aspx
秘密鍵暗号方式(SymmetricAlgorithm?)  †
SymmetricAlgorithm?  †
SymmetricAlgorithm? クラス (System.Security.Cryptography)
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.symmetricalgorithm.aspx
公開鍵暗号方式(AsymmetricAlgorithm?)  †
AsymmetricAlgorithm?  †
AsymmetricAlgorithm? クラス (System.Security.Cryptography)
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.asymmetricalgorithm.aspx
※ AsymmetricAlgorithm?の内、暗号化・復号化が可能な公開鍵暗号方式は、
RSAとECDiffieHellman?のみ(他のアルゴリズムは、署名のみサポート)。
AsymmetricKeyExchangeFormatter?, Deformatter  †
PKCS #1 キー交換データの暗号化・復号化
署名・検証(AsymmetricAlgorithm?)  †
AsymmetricAlgorithm?  †
AsymmetricAlgorithm? クラス (System.Security.Cryptography)
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.asymmetricalgorithm.aspx
※ なお、RSAだけは、署名・検証だけでなく、暗号化・復号化にも利用可能。
AsymmetricSignatureFormatter?, Deformatter  †
非対称署名フォーマッタ、デフォーマッタ
追加のプロバイダ  †
Security.Cryptography  †
- AuthenticatedAes?
 
- AuthenticatedAesCng?
 
- AuthenticatedSymmetricAlgorithm?
 
- BCryptAuthenticatedSymmetricAlgorithm?
 
- BCryptAuthenticatedSymmetricCryptoTransform?
 
.NET Standardの暗号化Providerの列挙  †
追加のプロバイダ  †
NSec.Cryptography  †
- Aes256Gcm
 
- Blake2b
 
- Chacha20Poly1305
 
- Ed25519
 
- HkdfSha256
 
- X25519
 
参考  †
DOBON.NET: VB.NET, C#, 無料ソフトウェア...  †
http://dobon.net/index.html
暗号ハッシュ  †
秘密鍵暗号方式  †
公開鍵暗号方式  †
署名・検証  †
乱数生成、キー生成  †
Tags: :.NET開発, :セキュリティ, :暗号化, :証明書