2

私はクリトアピを理解しようとして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をインポートすると、既存の公開鍵と秘密鍵のペアの公開鍵が置き換えられますか?私はそうではないと思います。

4

1 に答える 1

4

それはたくさんの質問でした。それらに答えてみましょう:

CSP はセッション間で公開秘密鍵のペアを保持します。無期限に保管されているということですか?

はい、CRYPT_DELETEKEYSET フラグを指定して CryptAcquireContext を呼び出して明示的に削除されるまで。

これらのコンテナとそこに含まれるキー ペアにはどのような価値がありますか?

これらは、再利用できる永続キーです。秘密鍵で証明書を取得する場合、秘密鍵を保持したいと考えます。また、回避できる場合は秘密鍵をエクスポートしたくありません。CSP は、あなたよりもはるかに優れた方法で鍵を保護できる可能性があります。

キー ペアの 1 つにハンドルを取得する方法はありますか?

CryptAcquireContext の後に CryptGetUserKey が続きます。

私には、鍵コンテナに以下を含めることができるように見えます: 1 つの署名鍵ペア、1 つの鍵交換鍵ペア、signature または key_exchange タイプの任意の数の PUBLIC 鍵、任意の数のセッション鍵。これは正しいです?

はいといいえ。インポートされた公開鍵とセッション鍵は、論理的に特定の鍵コンテナーにはありません。

コンテナを閉じると、ペアになっていないキーは破棄されますか?

はい。

キーコンテナを作成/命名する通常の方法は何ですか? 他のアプリケーション コンテナを踏みつけないようにするにはどうすればよいでしょうか。

ほとんどのアプリケーションは GUID を使用します。

これは、cryptsignkey が適切な Alg_id パラメーター (値 CALG_RSA_KEYX または CALG_RSA_SIGN) を使用して cryptkeygen によって作成された秘密鍵を見つけることを意味します。

はい。

キーをエクスポートする場合、キーブロブにはキーの種類を示す情報が含まれていますか?

これは、選択した BLOB タイプによって異なりますが、ほとんどのキーブロブは、キー タイプを含むBLOBHEADERで始まります。

PUBLICKEYBLOB をエクスポートして他の環境に転送した場合。BLOB を使用して署名を検証する前に、その BLOB を新しい環境にインポートする必要がありますか?

はい。

PUBLICKEYBLOB をインポートすると、現存する公開鍵と秘密鍵のペアの公開鍵が置き換えられますか?

いいえ。

于 2009-09-23T11:59:13.023 に答える