マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

暗号化アルゴリズムは、一通り揃っている。

  • 乱数生成
    RNGCryptoServiceProvider?
  • パスワードからのキー生成
    Rfc2898DeriveBytes?
  • 暗号(暗号化・復号化、署名・検証に利用可能)
    • 秘密鍵・暗号化
      • Aes
      • DES
      • RC2
      • Rijndael
      • TripleDES
  • 公開鍵・暗号化
    • RSA
    • DSA
    • ECDsa
  • ハイブリッド・暗号化(キー交換)
    • RSA
    • ECDiffieHellman?
  • 署名(署名・検証に利用可能)
    • RSA
    • DSA
    • ECDsa
  • 認証
  • データの整合性 (MAC)
    • HMAC MD5
    • HMAC RIPEMD160
    • HMAC SHA256
    • HMAC SHA384
    • HMAC SHA512
    • MAC TripleDES
  • データのプライバシー(AEAD)
    については自作が必要。
    • 3DES-CBC
    • AES-CBC
    • AES-CTR
    • AES-CCM
    • AES-GCM ★
    • AES-GMAC

.NET Frameworkの暗号化Providerの列挙

乱数生成、キー生成

乱数生成

  • RNGCryptoServiceProvider?を使用して、暗号乱数を生成する。
  • Membership.GeneratePassword?も下位でRNGCryptoServiceProvider?を使用している。

キー生成

  • Rfc2898DeriveBytes?を使用して、パスワード ベースのキーを生成する。
  • 主に、
    • キー付きハッシュ(KeyedHashAlgorithm?
    • 秘密鍵暗号方式(SymmetricAlgorithm?

のキーを生成する(パスワードをそのまま使用しない)。

ハッシュ化

暗号ハッシュ(HashAlgorithm?

  • HashAlgorithm?.Createというファクトリを使用して、
    HashAlgorithm?型で扱えば、あまり差異が無く使える。

キー付きハッシュ(KeyedHashAlgorithm?

  • KeyedHashAlgorithm?.Createというファクトリを使用して、
    KeyedHashAlgorithm?型で扱えば、あまり差異が無く使える。
    (ただし、Key指定する場合、個別のコンストラクタを使用する必要がある)

秘密鍵・暗号化方式

SymmetricAlgorithm?

公開鍵・暗号化方式

AsymmetricAlgorithm?

  • AsymmetricAlgorithm?の内、暗号化・復号化が可能な公開鍵暗号方式は、
    RSAのみ(他のアルゴリズムは、キー交換や署名のみサポート)。

ハイブリッド・暗号化(キー交換)方式

AsymmetricKeyExchange?

非対称キー交換フォーマッタ(Formatter)、デフォーマッタ(Deformatter)
プロバイダをラップして、手続きだけを提供するクラス。

ECDiffieHellman?

署名・検証

デジタル署名

AsymmetricAlgorithm?

  • RSAだけは、署名・検証だけでなく、暗号化・復号化にも利用可能。
  • Managed、CAPI(CSP)、CNG実装が一通り提供されている。
    新しいアルゴリズムは、CNGとOpenSSLの二択になって行くようにも見える。

AsymmetricSignatureFormatter?

  • 非対称署名フォーマッタ、デフォーマッタ
    プロバイダをラップして、手続きだけを提供するクラス。

追加可能なプロバイダ

Security.Cryptography

昨今(、クロスドメイン認証周りの需要でか)、日進月歩で追加されている

Security.Cryptography.XML

XML署名・暗号

.NET Standardの暗号化Providerの列挙

.NET Frameworkからの移植

追加のプロバイダ

Managed、CAPI(CSP)、CNG実装とは?

  • Managedで終わる名称のProviderは、.NET実装と思われる。
  • CryptoServiceProvider? (CSP) で終わる名称のProviderは、
    「CryptoAPI Cryptographic Service Providers (CSP ≒ CAPI) 実装と思われる。
  • Cryptography Next Generation (CNG) で終わる名称のProviderは、
    CNG Cryptographic Algorithm Providers実装と思われる。

CAPI (CSP)

CNG

  • CNG系の暗号化プロバイダの秘密鍵、暗号化操作は、
    CNG キー分離サービスは、分離 LSA プロセスでホストされているため、
    CC (Common Criteria)国際標準規格の要求に従ってキープロセス分離を提供する。
  • 分離 LSA プロセス
    • 仮想化ベースのセキュリティを使って保護され、OSの他の部分からアクセスできない。
    • CNGプロバイダを使用するプロセスは、RPCを使って分離 LSA プロセスと通信する。

アルゴリズム

  • MD5
  • Sha1
  • Sha256
  • Sha384
  • Sha512
  • Rsa
  • ECDsa
    • ECDsaP256
    • ECDsaP384
    • ECDsaP521
  • ECDiffieHellman?
    • ECDiffieHellmanP256
    • ECDiffieHellmanP384
    • ECDiffieHellmanP521

参考

  • Microsoft Docs

Managed、CSP、CNG、OpenSSLの選択肢

には、以下のようにある。

最適な実装を選択可能

  • マネージ実装
    .NET Framework をサポートするすべてのプラットフォームで利用可能。
    ただし、マネージ実装はFIPSに認定されておらず、ラッパー クラスよりも低速である場合がある。
  • CAPI 実装
    CSPラッパー。以前のOSで使用可能だが、開発中止となっている。
  • CNG 実装
    CNGラッパー。まさに最新の実装であり、新しい開発が行われる。

.NET Core、Linux

  • 選択と言うより、
    プラットフォームによって限定的になるもよう。
  • 例えば、X.509 を使用した際に取得できるRSAプロバイダが、
    • .NET FrameworkではRSACsp
    • .NET Core on WindowsではRSACng
    • .NET Core on Linuxでは、RSAOpenSsl?

になることなどを観測した。

  • この辺りは、プラットフォーム依存が強いので、
    クロスプラットフォーム対応は難しい部分がありそう。

性能

参考

ライブラリ

OpenSSL

BouncyCastle

libsodium

  • C言語で開発された、クロスプラットフォームの暗号化ライブラリを含む。
  • PHPでは、PECLで提供されていたがコアに標準的に組み込まれた等の経緯があるもよう。

Open 棟梁

参考

DOBON.NET: VB.NET, C#, 無料ソフトウェア...

http://dobon.net/index.html

暗号ハッシュ

秘密鍵暗号方式

公開鍵暗号方式

署名・検証

乱数生成、キー生成

OSSコンソーシアム

開発基盤部会 Wiki

開発基盤部会 Blog


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


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-11-28 (土) 19:41:46 (1237d)