4

会社が販売しているスマートカード用のCSPライブラリ(CryptoAPI用)を作成しています。

秘密鍵のAT_SIGNATURE鍵タイプとCALG_RSA_SIGNアルゴリズムの違いについて質問があります(AT_KEYEXCHANGEとCALG_RSA_KEYXについても同じです)。

MSDNサイトに何が書かれているのかは知っていますが、CPGenKey()関数の呼び出しでCALG_RSA ...アルゴリズムのいずれかが指定されている場合、CSPDLLはどのように具体的に機能する必要がありますか?つまり、セッションRSA秘密鍵を生成する必要がありますか、それとも鍵を生成してカードに保存する必要がありますか?または、CPAcquireContext()呼び出し(CRYPT_VERIFY_CONTEXTなど)で指定されたフラグに依存し、AT_SIGNATUREを「署名のデフォルトアルゴリズム」として定義する必要があります。これは、カードの場合はRSAですか。

ありがとう

4

1 に答える 1

0

それは私の答えではありません。インターネットで適切な説明を見つけただけです。

AT_SIGNATURE キーは、メッセージの署名にのみ使用できます。セッション キーのラップ (エクスポート) には使用できません。AT_KEYEXCHANGE キーは両方の目的で使用できます。したがって、両方に 1 つのキー ペアのみを使用する場合は、必ず AT_KEYEXCHANGE キー ペアが必要です。

また、いくつかのセキュリティへの影響を理解する必要があります。また、2 つのキーを使用する方が同じキー ペアを両方に使用するよりも優れている理由を理解する必要があります。

通常、署名する秘密鍵は絶対に公開しないでください。紛失した場合は、新しい署名キー ペアを生成し、その時点からそれを使用するだけです。一方、通常は鍵交換鍵をバックアップする必要があります。これがないと、将来 (秘密鍵を紛失した場合) メッセージを復号化できないからです。ただし、バックアップとは、キーが他の誰かに利用可能になる可能性があることを意味します-あなたから来たとされるメッセージに署名できるようになりました-そしてあなたはそれを望まないでしょう. 2 つのアクションに異なるキー ペアを使用すると、安全な署名を行うことができ (署名用の秘密キーが外に出ることはありません)、キー交換キーをバックアップすることもできます。

これらのキーの生成に関するもう 1 つの注意: 署名キーを知られたくないので、CryptGenKey(AT_SIGNATURE) で生成するときは、フラグ KEY_EXPORTABLE または KEY_ARCHIVABLE を設定しないでください。ユーザーが知っている署名鍵が使用されます。一方、CryptGenKey(AT_KEYEXCHANGE) を使用してキー交換キーを生成する場合は、すぐにバックアップする必要があります。フラグ CRYPT_ARCHIVABLE を設定し、バックアップのためにキーをすぐにエクスポートします。(このフラグを使用すると、キーを作成した直後に一度だけエクスポートできるため、CRYPT_EXPORTABLE を設定していつでもエクスポートできるようにするよりも安全です。)

ラズロ・エルテト SafeNet, Inc.

于 2014-07-22T08:11:14.750 に答える