22

Microsoft CNG API (Cryptography API: Next Generation) には、同じことを行うように見える関数のセットが 2 つあります。

次の関数はBCrypt、鍵のインポート/エクスポート、暗号化/復号化、署名/検証、および Diffe-Helman 鍵交換から始まり、実行します。

BCryptExportKey
BCryptImportKey
BCryptEncrypt
BCryptDecrypt
BCryptSignHash
BCryptVerifySignature
BCryptSecretAgreement
BCryptDeriveKey

しかし、で始まる同じ関数のセットが存在しNCryptます:

NCryptExportKey
NCryptImportKey
NCryptEncrypt
NCryptDecrypt
NCryptSignHash
NCryptVerifySignature
NCryptSecretAgreement
NCryptDeriveKey

これら 2 つの関数セットの違いは何ですか? また、それぞれをいつ使用する必要がありますか?

4

2 に答える 2

32

BCrypt関数のファミリは暗号化プリミティブとして分類され、関数のファミリはキー ストレージおよび検索NCryptとして分類されます。

主な違いは、BCrypt一時キーのみを処理する場合にNCrypt関数が使用され、永続キーが必要な場合に関数が使用されることです。

実際には、BCrypt関数は通常、ハッシュと対称暗号化にNCrypt使用されますが、関数は公開/秘密鍵の暗号化と復号化、公開/秘密鍵の署名と検証、および共有秘密 (DH と ECDH など) のネゴシエーションに使用されます。

一部の公開/秘密キー操作はBCrypt関数で実行できますが、それらは一時キーでしか使用できないため、使用が制限されます。

永続キーは、各ユーザー (またはシステム) に固有のキー コンテナーに格納されます。これは、ユーザーが互いの秘密鍵を表示できないようにするためのセキュリティ対策です。

一般に、次の操作には次の関数を使用する必要があります。

  • BCryptHashData: ハッシュと HMAC に使用 (MD5、SHA1、SHA256、SHA384、SHA512)
    • 関連: BCryptCreateHash, BCryptFinishHash,BCryptDestroyHash
  • BCryptEncrypt: 対称キー暗号化 (DES、3DES、AES)。
    • 関連: BCryptGenerateSymmetricKey,BCryptDestroyKey
  • BCryptDecrypt: 対称鍵の復号化 (DES、3DES、AES)。
    • 関連: BCryptGenerateSymmetricKey,BCryptDestroyKey
  • NCryptEncrypt: 非対称キー暗号化 (RSA)
  • NCryptDecrypt: 非対称キー復号化 (RSA)
  • NCryptSignHash:非対称鍵署名(RSA、DSA、ECDSA)
  • NCryptVerifySignature: 非対称鍵署名検証 (RSA、DSA、ECDSA)
  • NCryptSecretAgreement: 非対称鍵秘密共有 (DH、ECDH)
    • 関連している:NCryptDeriveKey

これらのケースのいくつかについて、 MSDNで例を入手できます。

実際の例として、これらすべてをUFTPソース コード、具体的にはencrypt_cng.cファイルencryption.hに実装しました (このファイル内の関数が共通のアプリケーション レベル API を実装して、 CryptoAPI や OpenSSL などの他の暗号化ライブラリ)。

于 2016-11-14T19:30:19.920 に答える