別のコンピューターから暗号化されたセッションタイプのキーブロブをインポートするときに、CryptImportKey 関数が 0 (復号化キーハンドル) の hPubKey を受け入れる理由を誰か説明できますか?
環境は次のとおりです。
PC #1: ローカル鍵コンテナ (AT_KEYEXCHANGE を使用) で鍵交換鍵ペア (公開/秘密) を生成しCryptGenKey
、公開部分を PUBLICKEYBLOB としてエクスポートし、PC #2 に送信します。
PC #2: PC #1 から公開鍵ブロブを取得し、それをローカルの鍵コンテナーにインポートします。同じローカル キー コンテナーにセッション キーを作成します。クライアントの鍵ブロブからインポートされた公開鍵を使用して、ローカルの鍵コンテナー セッション鍵を SIMPLEBLOB ( CryptExportKey
) にエクスポートします (これはセッション鍵の暗号化に使用されます)。
PC #1: PC #2 から暗号化されたセッション キー ブロブを取得して を呼び出しCryptImportKey
、ローカル キー コンテナー hProv、キー ブロブ バッファー ポインターと長さ、hPubKey とフラグの 0 (ゼロ)、および HCRYPTKEY ハンドルへのポインターを提供します。 .
上記を実行した後、有効なハンドルが返され、返されたハンドルを呼び出しCryptEncrypt
てCryptDecrypt
使用できます。はい、CryptImportKey で、PC #1 で上記の最初の手順から生成された鍵交換鍵ペアのハンドルを指定すると、それも機能します。hPubKey の 0 が機能する理由がわかりません。CryptoAPI がデータを暗号化するための秘密鍵を「知っている」かのようです。
ありがとう。