0

谁能解释为什么 CryptImportKey 函数在从另一台计算机导入加密的会话类型密钥 blob 时接受 0 的 hPubKey(解密密钥句柄)?

环境是这样的:

PC #1:在本地密钥容器 (w/AT_KEYEXCHANGE) 中生成密钥交换密钥对(公共/私有)CryptGenKey,然后将公共部分导出为 PUBLICKEYBLOB 并将其发送到 PC #2

PC #2:从 PC #1 获取公钥 blob 并将其导入本地密钥容器。在同一本地密钥容器中创建会话密钥。使用从客户端密钥 blob 导入的公钥(用于加密会话密钥)将本地密钥容器会话密钥导出到 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 回答