2 Stimmen

Grundlegende Fragen zur Microsoft CryptoAPI

Ich habe im MSDN nachgeschaut und versucht, die Crytoapi zu verstehen. Im Folgenden sind einige Fragen und Vermutungen, wie die Dinge funktionieren könnten. Für Antworten, Bestätigungen oder Widerlegungen meiner Vermutungen bin ich sehr dankbar.

Laut der Notiz, die ich unter http://msdn.microsoft.com/en-us/library/ms867086.aspx bewahrt der ZDA öffentliche private Schlüsselpaare zwischen den Sitzungen auf.

* 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?

Es sieht für mich so aus, als ob ein Schlüsselcontainer enthalten kann:

* 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

Ist dies korrekt? Werden die nicht gepaarten Schlüssel zerstört, wenn der Container geschlossen wird?

Wie werden Schlüsselcontainer üblicherweise erstellt/benannt? Wie kann man verhindern, dass man auf einem anderen Anwendungscontainer herumtrampelt? Ich brauche einen Container mit öffentlichen/privaten Schlüsseln, so dass der temporäre Container, der in den Anmerkungen von cryptacquirecontext erwähnt wird, nicht anwendbar ist. Vielleicht sollte man einen Namen erstellen, der aus einem festen Teil und einer Sequenznummer besteht. Sie könnten den Container löschen, wenn Sie fertig sind.

cryptsignhash gibt an, dass entweder der private Schlüssel für die Signatur oder der private Schlüssel für den Schlüsselaustausch zum Signieren des Hashwerts verwendet werden soll. Ich vermute, dass dies bedeutet, dass cryptsignkey den privaten Schlüssel findet, der von cryptkeygen mit dem entsprechenden Alg_id-Parameter erstellt wurde (Werte CALG_RSA_KEYX oder CALG_RSA_SIGN).

Wenn ich einen Schlüssel exportiere, enthält der Keyblob dann Informationen darüber, um welche Art von Schlüssel es sich handelt?

wenn ich ein PUBLICKEYBLOB exportiere und es in eine andere Umgebung transportiere. Muss ich diesen Blob in die neue Umgebung importieren, bevor ich ihn zur Überprüfung einer Signatur verwenden kann? cryptverifysignature benötigt ein Handle auf den Schlüssel, so dass es so aussieht, als müsste er zuerst importiert werden. Ersetzt das Importieren eines PUBLICKEYBLOB den öffentlichen Schlüssel eines bestehenden öffentlichen/privaten Schlüsselpaares? Ich nehme an NICHT.

4voto

Rasmus Faber Punkte 47181

Das waren eine Menge Fragen. Lassen Sie mich versuchen, sie zu beantworten:

der CSP hält öffentliche private Schlüsselpaare zwischen den Sitzungen. Bedeutet das, dass sie auf unbestimmte Zeit aufbewahrt werden?

Ja, bis sie explizit durch den Aufruf von CryptAcquireContext mit dem Flag CRYPT_DELETEKEYSET gelöscht werden.

Welchen Wert haben diese Container und die in ihnen enthaltenen Schlüsselpaare?

Es sind dauerhafte Schlüssel, die Sie wiederverwenden können. Wenn Sie ein Zertifikat mit einem privaten Schlüssel erhalten, möchten Sie den privaten Schlüssel behalten - und Sie möchten den privaten Schlüssel nicht exportieren, wenn Sie es vermeiden können: Der ZDA kann den Schlüssel möglicherweise viel besser schützen als Sie.

Gibt es eine Möglichkeit, einen Zugriff auf eines der Schlüsselpaare zu erhalten?

CryptAcquireContext gefolgt von CryptGetUserKey.

Es sieht für mich so aus, als ob ein Schlüsselcontainer enthalten kann: 1 Schlüsselpaar für die Signatur, 1 Schlüsselpaar für den Schlüsselaustausch, eine beliebige Anzahl von PUBLIC-Schlüsseln, entweder vom Typ Signatur oder Schlüsselaustausch, eine beliebige Anzahl von Sitzungsschlüsseln. Ist dies korrekt?

Ja und nein. Die importierten öffentlichen Schlüssel und die Sitzungsschlüssel befinden sich logisch gesehen nicht in einem bestimmten Schlüsselcontainer.

Sind die nicht gepaarten Schlüssel zerstört, wenn der Container geschlossen wird?

Ja.

Was ist die übliche Methode zur Schlüsselcontainer zu erstellen/zu benennen? Wie kann man verhindern, dass man auf einen anderen andere Anwendungscontainer?

Die meisten Anwendungen verwenden eine GUID.

bedeutet dies, dass cryptsignkey findet den privaten Schlüssel, der von cryptkeygen erzeugte private Schlüssel mit dem entsprechenden Alg_id-Parameter (Werte CALG_RSA_KEYX oder CALG_RSA_SIGN).

Ja.

Wenn ich eine Taste exportiere, wird der Keyblob Informationen darüber, um welche Art von Schlüssel es ist?

Das hängt vom gewählten Blob-Typ ab, aber die meisten Keyblobs beginnen mit einem BLOBHEADER die den Schlüsseltyp enthält.

wenn ich ein PUBLICKEYBLOB exportiere und es in eine andere Umgebung Umgebung transportiere. Muss ich das importieren Blob in die neue Umgebung importieren, bevor ich bevor ich ihn zur Überprüfung einer Signatur verwenden kann?

Ja.

Ist der Import einer PUBLICKEYBLOB ersetzt den öffentlichen Schlüssel eines bestehenden öffentlichen/privaten Schlüsselpaares?

Nein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X