RSA/Schannel-Schlüssel-BLOBs

BLOBs werden mit dem RSA / Schannel-Anbieter verwendet, um Schlüssel aus dem Kryptografiedienstanbieter (Cryptographic Service Provider, CSP) zu exportieren und in diesen zu importieren.

BLOBs mit öffentlichem Schlüssel

BLOBsmit öffentlichem Schlüssel , typ PUBLICKEYBLOB, werden verwendet, um öffentliche Schlüsselzu speichern. Diese Schlüssel werden als Bytesequenz im folgenden Format exportiert und importiert.

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 Eine BYTE-Sequenz. Die Modulusdaten des öffentlichen Schlüssels befinden sich direkt nach der RSAPUBKEY-Struktur. Die Länge dieser Daten variiert je nach Länge des öffentlichen Schlüssels. Die Anzahl der Bytes kann bestimmt werden, indem der Wert des Bitlenmembers von RSAPUBKEY 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 öffentliche/private Schlüsselpaarezu speichern. Diese Schlüssel werden als Bytesequenz im folgenden Format exportiert und importiert.

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];

Wenn das Schlüsselblob verschlüsselt ist, wird alles außer dem PUBLICKEYSTRUC-Teil des BLOB verschlüsselt.

Hinweis

Der Verschlüsselungsalgorithmus und die Verschlüsselungsschlüsselparameter werden nicht zusammen mit dem BLOB des privaten Schlüssels gespeichert. Es liegt in der Verantwortung der Anwendung, diese Informationen zu verwalten.

In der folgenden Tabelle werden die einzelnen BLOB-Komponenten für private Schlüssel 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
exponent1 Eine BYTE-Sequenz. Der erste Exponent. Dieser weist den numerischen Wert d mod (p – 1) auf.
exponent2 Eine BYTE-Sequenz. Der zweite Exponent. Dieser weist den numerischen Wert d mod (q – 1) auf.
Koeffizient Eine BYTE-Sequenz. Koeffizient. Dieser weist den numerischen Wert (umkehrend von q) mod p auf.
Modulus Eine BYTE-Sequenz. Der Modulus. Diese weist eine Zeichenfolge auf, die Prime1 * Prime2 enthält. Sie wird häufig als n bezeichnet.
prime1 Eine BYTE-Sequenz. Primzahl 1, häufig als p bezeichnet.
prime2 Eine BYTE-Sequenz. Primzahl 2, häufig als q bezeichnet.
publickeystruc Eine PUBLICKEYSTRUC-Struktur.
privateExponent Eine BYTE-Sequenz. Der private Exponent, häufig als d bezeichnet.
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 zum Speichern und Transport von Sitzungsschlüsseln verwendet. Diese werden immer mit einem öffentlichen Schlüssel für den Schlüsselaustauschverschlüsselt. Diese Schlüssel werden als Bytesequenz im folgenden Format exportiert und importiert.

PUBLICKEYSTRUC  publickeystruc ;
ALG_ID          algid;
BYTE            encryptedkey[rsapubkey.bitlen/8];

In der folgenden Tabelle werden die einzelnen einfachen BLOB-Komponenten beschrieben.

Feld BESCHREIBUNG
algid Eine _ ALG-ID-Struktur. Dies gibt in der Regel den CALG _ RSA _ KEYX-Algorithmus an, der angibt, dass die Sitzungsschlüsseldaten mit einem öffentlichen Schlüsselaustauschschlüssel verschlüsselt wurden, indem der RSA Public Key-Algorithmusverwendet wird.
Encryptedkey Eine BYTE-Sequenz. Die verschlüsselten Sitzungsschlüsseldaten haben die Form eines PKCS # 1-Verschlüsselungsblocks vom Typ 2. Informationen zu diesem Datenformat finden Sie unter Public Key Cryptography Standards (PKCS), veröffentlicht von RSA Data Security, Inc.
publickeystruc Eine PUBLICKEYSTRUC-Struktur.

Diese Daten haben immer die gleiche Größe wie der Modulus des öffentlichen Schlüssels. Beispielsweise haben öffentliche Schlüssel, die vom Microsoft Base Cryptographic Provider generiert werden, immer eine Länge von 512 Bits (64 Bytes), sodass die verschlüsselten Sitzungsschlüsseldaten ebenfalls immer 64 Bytes betragen.