マイクロソフト系技術情報 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ラッパー。まさに最新の実装であり、新しい開発が行われる。

アルゴリズムの選択

  • データのプライバシー
    Aes
  • データの整合性
    • 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

暗号ハッシュ

秘密鍵暗号方式

公開鍵暗号方式

署名・検証

乱数生成、キー生成

暗号・復号化 部品 - Open 棟梁 Wiki


Tags: :.NET開発, :セキュリティ, :暗号化, :証明書


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-10-01 (月) 21:40:10 (17d)