「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
暗号化アルゴリズムは、一通り揃っている。
.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?) †
suffixが無いが、調べると、
- 基本、CSP (System.Security.Cryptography.Algorithms.dll, mscorlib.dll, netstandard.dll)実装、
- HMACRIPEMD160 と MACTripleDES は、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://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.asymmetricalgorithm
※ AsymmetricAlgorithm?の内、暗号化・復号化が可能な公開鍵暗号方式は、
RSAとECDiffieHellman?のみ(他のアルゴリズムは、署名のみサポート)。
AsymmetricKeyExchangeFormatter?, Deformatter †
非対称キー交換フォーマッタ、デフォーマッタ
署名・検証(AsymmetricAlgorithm?) †
AsymmetricAlgorithm? †
AsymmetricAlgorithm? クラス (System.Security.Cryptography)
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.asymmetricalgorithm.aspx
※ なお、RSAだけは、署名・検証だけでなく、暗号化・復号化にも利用可能。
AsymmetricSignatureFormatter?, Deformatter †
非対称署名フォーマッタ、デフォーマッタ
追加のプロバイダ †
Security.Cryptography †
- AES with CCM or GCM
以下のクラスは、コメントを読むとAES-CCM or AES-GCMを実装している。
- AuthenticatedSymmetricAlgorithm?
↑(継承)
- AuthenticatedAes?, AuthenticatedAesCng?
.NET Frameworkからの移植 †
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? †
以下の様な違いがあるもよう。
- RSACryptoServiceProvider?は独自のキー操作に結びついている。
- RSACngのキーはCngKey?クラスによって管理され、コンストラクタに注入できる。
どちらでも良さそう。
性能 †
参考 †
DOBON.NET: VB.NET, C#, 無料ソフトウェア... †
http://dobon.net/index.html
暗号ハッシュ †
秘密鍵暗号方式 †
公開鍵暗号方式 †
署名・検証 †
乱数生成、キー生成 †
ライブラリ †
OpenSSL? †
libsodium †
- C言語で開発された、クロスプラットフォームの暗号化ライブラリを含む。
- PHPでは、PECLで提供されていたがコアに標準的に組み込まれた等の経緯があるもよう。
参考 †
Tags: :.NET開発, :セキュリティ, :暗号化, :証明書