Open棟梁Project - マイクロソフト系技術情報 Wiki
目次  †
概要  †
一通り揃っている。
Managed、CSP、CNG実装とは?  †
- Managedで終わる名称のProviderは、.NET実装と思われる(mscorlib.dll)。
 
- CryptoServiceProvider?(CSP)で終わる名称のProviderは、「暗号化サービス プロバイダー (CSP) を使用する」とある(System.Core.dll)。
 
- Cngで終わる名称のProviderは、PlatformNative?のCryptography Next Generation (CNG) 実装を使用している(System.Core.dll)。
 
参考  †
CSP  †
CNG  †
どれを使用すべき?  †
には、以下のようにある。
最適な実装を選択可能  †
- マネージ実装
.NET Framework をサポートするすべてのプラットフォームで利用可能。
ただし、マネージ実装はFIPSに認定されておらず、ラッパー クラスよりも低速である場合がある。 
- CAPI 実装
CSPラッパー。以前のOSで使用可能だが、開発中止となっている。 
- CNG 実装
CNGラッパー。まさに最新の実装であり、新しい開発が行われる。 
アルゴリズムの選択  †
- キー交換
- ECDiffieHellman?
 
- RSA(RS256)
 
 
- 乱数生成
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を使用する。
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
暗号ハッシュ  †
秘密鍵暗号方式  †
公開鍵暗号方式  †
署名・検証  †
乱数生成、キー生成  †
Open棟梁の暗号ラッパー  †
- Managed優先、無ければCSPを使用というポリシーで実装。
 
- CNG実装への移行は、まだ行っていない。
 
暗号ハッシュ  †
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/Util/GetHash.cs#L162
- Managed優先、無ければCSPを使用というポリシーで実装。
 
- Membership.GeneratePassword?を使っている。
RNGCryptoServiceProvider?に変更したい。
 
キー付きハッシュ  †
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/Util/GetKeyedHash.cs#L182
- Managedのsuffixが無いが、MSDNではmscorlib.dllとなっているためManaged実装と思われる。
 
- キーは、Rfc2898DeriveBytes?を使用して生成している。
 
- HMACの実装が不足している。
- HMACSHA1のみ実装
 
- HMACMD5、HMACRIPEMD160、HMACSHA256、HMACSHA384、HMACSHA512が未実装。
 
 
秘密鍵暗号方式  †
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/IO/SymmetricCryptography.cs#L430
- AesCryptoServiceProvider?が例外的に余分に実装されている。
 
- キーは、Rfc2898DeriveBytes?を使用して生成している。
 
公開鍵暗号方式  †
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/IO/ASymmetricCryptography.cs
- 暗号化・複合化で使用できるのは、RSACryptoServiceProvider?のみ。
 
署名・検証  †
なし。
乱数生成、キー生成  †
なし。
- 乱数発生にはRNGCryptoServiceProvider?を使ってもイイかもしれない。