「マイクロソフト系技術情報 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?) †
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://msdn.microsoft.com/ja-jp/library/system.security.cryptography.asymmetricalgorithm.aspx
※ 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 †
- 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開発, :セキュリティ, :暗号化, :証明書