Basisanbieter-Schlüssel-BLOBs
Der Basisanbieter und der erweiterte Anbieter verwenden die gleichen Schlüssel-BLOBs.
Public Key-BLOBs
Öffentliche Schlüssel-BLOBs vom Typ PUBLICKEYBLOB werden verwendet, um öffentliche Schlüssel außerhalb eines Kryptografiedienstanbieters (CSP ) zu speichern. Basisanbieter-BLOBs für öffentliche Schlüssel weisen das folgende Format auf.
PUBLICKEYSTRUC publickeystruc;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];
In der folgenden Tabelle werden die einzelnen Komponenten für öffentliche Schlüssel beschrieben. Alle Werte haben das Little-Endian-Format .
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 geteilt wird. |
publickeystruc | Eine PUBLICKEYSTRUC-Struktur . |
rsapubkey | Eine RSAPUBKEY-Struktur . Das magic-Element muss auf 0x31415352 festgelegt werden. Dieser Hexadezimalwert ist die ASCII-Codierung von RSA1. |
Hinweis
Öffentliche Schlüssel-BLOBs werden nicht verschlüsselt. Sie enthalten öffentliche Schlüssel in Klartextform .
BLOBs für private Schlüssel
BloBs für private Schlüssel vom Typ PRIVATEKEYBLOB werden verwendet, um private Schlüssel außerhalb eines CSP zu speichern. Private Key-BLOBs des Basisanbieters 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 in Abschnitt 7.2 von PKCS #1 ( Public Key Cryptography Standards ) beschriebenen Feldern mit geringfügigen Unterschieden.
Feld | BESCHREIBUNG |
---|---|
Koeffizient | Koeffizient. Dies hat den numerischen Wert (umgekehrt von q) mod p. |
exponent1 | Exponent 1. Dieser hat den numerischen Wert d mod (p – 1). |
exponent2 | Exponent 2. Dieser hat den numerischen Wert d mod (q – 1). |
Modulo | Der Modulus. Dieser hat den Wert Prime1×Prime2 und wird häufig als n bezeichnet. |
prime1 | Primzahl 1, häufig als p. |
prime2 | Primzahl 2, häufig auch bekannt als q. |
privateExponent | Privater Exponent, oft bekannt als d. |
publickeystruc | Eine PUBLICKEYSTRUC-Struktur . |
rsapubkey | Eine RSAPUBKEY-Struktur . Das magic-Element muss auf 0x32415352 festgelegt werden. Dieser Hexadezimalwert ist die ASCII-Codierung von RSA2. |
Hinweis
BLOBs für private Schlüssel werden nicht verschlüsselt. Sie enthalten private Schlüssel in Klartextform.
Beim Aufrufen von CryptExportKey kann 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 BLOBs ist verschlüsselt.
Hinweis
Der Verschlüsselungsalgorithmus und die Verschlüsselungsschlüsselparameter werden nicht zusammen mit dem BLOB für private Schlüssel gespeichert. Die Anwendung muss diese Informationen verwalten und speichern. Wenn 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 Abfangen und Verwendung durch nicht autorisierte Entitäten sind.
Einfache Schlüssel-BLOBs
Einfache Schlüssel-BLOBs vom Typ SIMPLEBLOB werden verwendet, um Sitzungsschlüssel außerhalb eines CSP zu speichern und zu transportieren. Einfache Schlüssel-BLOBs des Basisanbieters werden immer mit einem öffentlichen Schlüsselaustauschschlüssel verschlüsselt. Das pbData-Element des SIMPLEBLOB ist eine Sequenz von Bytes im folgenden Format.
PUBLICKEYSTRUC publickeystruc;
ALG_ID algid;
BYTE encryptedkey[rsapubkey.bitlen/8];
In der folgenden Tabelle werden die einzelnen Komponenten des pbData-Elements von SIMPLEBLOB beschrieben.
Feld | BESCHREIBUNG |
---|---|
algid | Eine ALG_ID-Struktur , die den Verschlüsselungsalgorithmus angibt, der zum Verschlüsseln der Sitzungsschlüsseldaten verwendet wird. Dies weist in der Regel den Wert CALG_RSA_KEYX auf, der angibt, dass die Sitzungsschlüsseldaten mit einem öffentlichen Schlüsselaustauschschlüssel mithilfe des RSA Public Key-Algorithmus verschlü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. Öffentliche Schlüssel, die vom Microsoft RSA-Basisanbieter generiert werden, können beispielsweise 512 Bit (64 Bytes) lang sein, sodass die verschlüsselten Sitzungsschlüsseldaten immer 512 Bit (64 Bytes) betragen. |
publickeystruc | Eine PUBLICKEYSTRUC-Struktur . |