我一直在浏览 MSDN 试图了解 crytoapi。下面是一些关于事情如何运作的问题和猜测。非常感谢任何答案或确认或反驳我的猜测。
根据我在http://msdn.microsoft.com/en-us/library/ms867086.aspx找到的说明,CSP 在会话之间保留公钥对。
* Does that mean they are kept indefinitely? If so, whatever signature or exchange key pairs are extant when the CSP is closed remain.
* Of what value are these containers and any key pairs they contain? I guess they could be used to sign things without obtaining a handle to a key pair.
* Is there any way to get a handle to one of the key pairs?
在我看来,好像一个密钥容器可以包含:
* 1 signature key pair
* 1 key exchange key pair
* any number of PUBLIC keys of either signature or key_exchange type
* any number of session keys
它是否正确?容器关闭时非配对键是否被破坏?
创建/命名密钥容器的常用方法是什么?如何避免踩到其他应用程序容器?我需要一个带有公钥/私钥的容器,因此 cryptacquirecontext 的备注部分中提到的临时容器不适用。也许使用由一些固定部分加上序列号组成的创建名称。完成后可以删除容器。
cryptsignhash 指定使用签名或密钥交换私钥对散列进行签名。我想这意味着 cryptsignkey 将使用适当的 Alg_id 参数(值 CALG_RSA_KEYX 或 CALG_RSA_SIGN)找到由 cryptkeygen 创建的私钥。
如果我导出一个密钥,keyblob 是否包含说明它是什么类型的密钥的信息?
如果我导出 PUBLICKEYBLOB 并将其传输到其他环境。是否必须在新环境中导入该 blob 才能使用它来验证签名?cryptverifysignature 需要密钥的句柄,因此看起来必须首先导入它。导入 PUBLICKEYBLOB 是否会替换任何现有公钥/私钥对的公钥?我假设不是。