私はクリトアピを理解しようとしてMSDNを調べてきました。以下は、物事がどのように機能するかについてのいくつかの質問と推測です。私の推測に対する回答、確認、または反論は大歓迎です。
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の備考セクションに記載されている一時コンテナーは適用できません。たぶん、いくつかの固定部分とシーケンス番号で構成されるcreatenameを使用します。完了したらコンテナを削除できます。
cryptsignhashは、署名または鍵交換秘密鍵のいずれかを使用してハッシュに署名することを指定します。これは、cryptsignkeyが適切なAlg_idパラメーター(値CALG_RSA_KEYXまたはCALG_RSA_SIGN)を使用してcryptkeygenによって作成された秘密鍵を見つけることを意味すると思います。
キーをエクスポートする場合、keyblobにはそれがどのような種類のキーであるかを示す情報が含まれていますか?
PUBLICKEYBLOBをエクスポートして、他の環境に転送した場合。署名の検証に使用する前に、そのBLOBを新しい環境にインポートする必要がありますか?cryptverifysignatureにはキーへのハンドルが必要なので、最初にインポートする必要があるように見えます。PUBLICKEYBLOBをインポートすると、既存の公開鍵と秘密鍵のペアの公開鍵が置き換えられますか?私はそうではないと思います。