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 .