Erweiterte Anbieterschlüssel-BLOBs
Der Basisanbieter, der starke Anbieter und der erweiterte Anbieter verwenden die gleichen Schlüssel-BLOBs.
BLOBs mit öffentlichem Schlüssel
Öffentliche Schlüssel-BLOBsvom Typ PUBLICKEYBLOB werden verwendet, um öffentliche Schlüssel außerhalb eines Kryptografiedienstanbieters (Cryptographic Service Provider, CSP) zu speichern. BLOBs mit öffentlichem Schlüssel des erweiterten Anbieters weisen das folgende Format auf.
PUBLICKEYSTRUC publickeystruc;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];
In der folgenden Tabelle werden die einzelnen Komponenten des öffentlichen Schlüssels beschrieben. Alle Werte liegen im Little-Endian-Format vor.
| Feld | BESCHREIBUNG |
|---|---|
| modulus | Die Modulusdaten des öffentlichen Schlüssels befinden sich direkt nach der RSAPUBKEY-Struktur. Die Größe dieser Daten variiert je nach Größe des öffentlichen Schlüssels. Die Anzahl der Bytes kann bestimmt werden, indem der Wert des RSAPUBKEY-Bitlenfelds durch acht dividiert wird. |
| publickeystruc | Eine PUBLICKEYSTRUC-Struktur. |
| rsapubkey | Eine RSAPUBKEY-Struktur. Der Magic-Member muss auf 0x31415352 festgelegt werden. Dieser Hexadezimalwert ist die ASCII-Codierung von RSA1. |
Hinweis
BLOBs mit öffentlichem Schlüssel werden nicht verschlüsselt. Sie enthalten öffentliche Schlüssel in Klartextform.
Private Schlüsselblobs
Private Schlüssel-BLOBsvom Typ PRIVATEKEYBLOB werden verwendet, um private Schlüssel außerhalb eines CSP zu speichern. BLOBs mit privatem Schlüssel des erweiterten Anbieters weisen das folgende Format auf.
PUBLICKEYSTRUC publickeystruc;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];
BYTE prime1[rsapubkey.bitlen/16];
BYTE prime2[rsapubkey.bitlen/16];
BYTE exponent1[rsapubkey.bitlen/16];
BYTE exponent2[rsapubkey.bitlen/16];
BYTE coefficient[rsapubkey.bitlen/16];
BYTE privateExponent[rsapubkey.bitlen/8];
In der folgenden Tabelle wird die BLOB-Komponente des privaten Schlüssels beschrieben.
Hinweis
Diese Felder entsprechen den Feldern, die in Abschnitt 7.2 von Public Key Cryptography Standards (PKCS) # 1 mit geringfügigen Unterschieden beschrieben werden.
| Feld | BESCHREIBUNG |
|---|---|
| Koeffizient | Koeffizient. Dieser weist den numerischen Wert (umkehrend von q) mod p auf. |
| exponent1 | Exponent 1. Dieser weist den numerischen Wert d mod (p – 1) auf. |
| exponent2 | Exponent 2. Dieser weist den numerischen Wert d mod (q – 1) auf. |
| Modulus | Der Modulus. Dieser hat den Wert Prime1×Prime2 und wird häufig als n bezeichnet. |
| prime1 | Primzahl 1, häufig als p bezeichnet. |
| prime2 | Primzahl 2, häufig als q bezeichnet. |
| privateExponent | Privater Exponent, häufig als d bezeichnet. |
| publickeystruc | Eine PUBLICKEYSTRUC-Struktur. |
| rsapubkey | Eine RSAPUBKEY-Struktur. Der magic-Member muss auf 0x32415352 festgelegt werden. Dieser Hexadezimalwert ist die ASCII-Codierung von RSA2. |
Hinweis
Private Schlüsselblobs werden nicht verschlüsselt. Sie enthalten private Schlüssel in Klartextform.
Beim Aufrufen von CryptExportKeykann der Entwickler auswählen, ob der Schlüssel verschlüsselt werden soll. PRIVATEKEYBLOB wird verschlüsselt, wenn der hExpKey-Parameter ein gültiges Handle für einen Sitzungsschlüssel enthält. Alles außer dem PUBLICKEYSTRUC-Teil des BLOB wird verschlüsselt.
Hinweis
Der Verschlüsselungsalgorithmus und die Verschlüsselungsschlüsselparameter werden nicht zusammen mit dem BLOB des privaten Schlüssels gespeichert. Die Anwendung muss diese Informationen verwalten und speichern. Wenn 0 (null) für hExpKey übergeben wird, wird der private Schlüssel ohne Verschlüsselung exportiert.
Achtung
Es ist gefährlich, private Schlüssel ohne Verschlüsselung zu exportieren, da sie dann anfällig für abfangende und nicht autorisierte Entitäten sind.
Einfache Schlüsselblobs
Einfache Schlüssel-BLOBsvom Typ SIMPLEBLOB werden verwendet, um Sitzungsschlüssel außerhalb eines CSP zu speichern und zu transportieren. BLOBs mit einfachen Schlüsseln des erweiterten Anbieters werden immer mit einem öffentlichen Schlüssel für den Schlüsselaustauschverschlüsselt. Der pbData-Member von SIMPLEBLOB ist eine Bytefolge im folgenden Format.
PUBLICKEYSTRUC publickeystruc;
ALG_ID algid;
BYTE encryptedkey[rsapubkey.bitlen/8];
In der folgenden Tabelle werden die einzelnen Komponenten des pbData-Members von SIMPLEBLOB beschrieben.
| Feld | BESCHREIBUNG |
|---|---|
| algid | Eine _ ALG-ID-Struktur, die den Verschlüsselungsalgorithmus zum Verschlüsseln der Sitzungsschlüsseldaten angibt. Dieser weist in der Regel den Wert CALG _ RSA _ KEYX auf, der angibt, dass die Sitzungsschlüsseldaten mit einem öffentlichen Schlüsselaustauschschlüssel mit dem RSA-Algorithmus für öffentliche Schlüsselverschlüsselt wurden. |
| Encryptedkey | Eine BYTE-Sequenz, die die verschlüsselten Sitzungsschlüsseldaten in Form eines PKCS # 1-Verschlüsselungsblocks vom Typ 2 darstellt. Informationen zu diesem Datenformat finden Sie unter Public Key Cryptography Standards (PKCS) # 1, veröffentlicht von RSA Data Security, Inc. Diese Daten haben immer die gleiche Größe wie der Modulus des öffentlichen Schlüssels. Beispielsweise können öffentliche Schlüssel, die vom Microsoft RSA-Basisanbieter generiert werden, eine Länge von 512 Bits (64 Bytes) haben, sodass die verschlüsselten Sitzungsschlüsseldaten ebenfalls immer 512 Bits (64 Bytes) haben. |
| publickeystruc | Eine PUBLICKEYSTRUC-Struktur. |
Informationen zum Basisanbieter und den Schlüssel-BLOBs des erweiterten Anbieters finden Sie unter Basisanbieterschlüssel-BLOBs.