0

別のコンピューターから暗号化されたセッションタイプのキーブロブをインポートするときに、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 ハンドルへのポインターを提供します。 .

上記を実行した後、有効なハンドルが返され、返されたハンドルを呼び出しCryptEncryptCryptDecrypt使用できます。はい、CryptImportKey で、PC #1 で上記の最初の手順から生成された鍵交換鍵ペアのハンドルを指定すると、それも機能します。hPubKey の 0 が機能する理由がわかりません。CryptoAPI がデータを暗号化するための秘密鍵を「知っている」かのようです。

ありがとう。

4

1 に答える 1

0

私が考えることができる唯一のことは、セッション内でこれを使用すること(コンテキストがあり、したがって秘密鍵を知っている)、または実際にデータを暗号化していないことです。モジュラスを一意のキーとして使用して秘密キーを検索することは実際に可能ですが、ユーザーに通知せずにそのような方法を使用することを理解できませんでした。

PS申し訳ありませんが、あなたの質問に直接コメントすることはできません(まだ)ので、長い時間枠のためにこれを投稿しました.

于 2011-05-01T13:10:17.193 に答える