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)
これらのケースのいくつかについて、 MSDNで例を入手できます。
実際の例として、これらすべてをUFTPソース コード、具体的にはencrypt_cng.c
ファイルencryption.h
に実装しました (このファイル内の関数が共通のアプリケーション レベル API を実装して、 CryptoAPI や OpenSSL などの他の暗号化ライブラリ)。