「マイクロソフト系技術情報 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
暗号ハッシュ †
秘密鍵暗号方式 †
公開鍵暗号方式 †
署名・検証 †
乱数生成、キー生成 †
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?を使ってもイイかもしれない。
Tags: :.NET開発, :セキュリティ, :暗号化, :証明書