Objets BLOB clés du fournisseur de base
Le fournisseur de base et le fournisseur étendu utilisent les mêmes objets BLOB de clé.
Objets blob à clé publique
Les objets BLOB de clé publique, de type PUBLICKEYBLOB, sont utilisés pour stocker des clés publiques en dehors d’un fournisseur de services de chiffrement (CSP). Les objets BLOB de clé publique du fournisseur de base ont le format suivant.
PUBLICKEYSTRUC publickeystruc;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];
Le tableau suivant décrit chaque composant de clé publique. Toutes les valeurs sont au format little endian .
Champ | Description |
---|---|
modulo | Les données de module de clé publique se trouvent directement après la structure RSAPUBKEY . La taille de ces données varie en fonction de la taille de la clé publique. Le nombre d’octets peut être déterminé en divisant la valeur du champ bitlen RSAPUBKEY par huit. |
publickeystruc | Structure PUBLICKEYSTRUC . |
rsapubkey | Structure RSAPUBKEY . Le membre magic doit être défini sur 0x31415352. Cette valeur hexadécimale est l’encodage ASCII de RSA1. |
Notes
Les objets BLOB de clé publique ne sont pas chiffrés. Ils contiennent des clés publiques en texte clair .
Objets blob de clés privées
Les objets BLOB de clés privées, de type PRIVATEKEYBLOB, sont utilisés pour stocker des clés privées en dehors d’un fournisseur de solutions cloud. Les objets BLOB de clés privées du fournisseur de base ont le format suivant.
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];
Le tableau suivant décrit le composant BLOB de clé privée.
Notes
Ces champs correspondent aux champs décrits dans la section 7.2 des Normes de chiffrement à clé publique (PKCS) #1 avec des différences mineures.
Champ | Description |
---|---|
Coefficient | Coefficient. La valeur numérique est (inverse de q) mod p. |
exposant1 | Exposant 1. La valeur numérique est d mod (p – 1). |
exposant2 | Exposant 2. La valeur numérique est d mod (q – 1). |
Modulo | Module. Il a la valeur Prime1×Prime2 et est souvent appelé n. |
prime1 | Nombre premier 1, souvent appelé p. |
prime2 | Nombre premier 2, souvent appelé q. |
privateExponent | Exposant privé, souvent appelé d. |
publickeystruc | Structure PUBLICKEYSTRUC . |
rsapubkey | Structure RSAPUBKEY . Le membre magic doit être défini sur 0x32415352. Cette valeur hexadécimale est l’encodage ASCII de RSA2. |
Notes
Les objets BLOB de clé privée ne sont pas chiffrés. Elles contiennent des clés privées en texte clair.
Lors de l’appel de CryptExportKey, le développeur peut choisir de chiffrer la clé. Le PRIVATEKEYBLOB est chiffré si le paramètre hExpKey contient un handle valide pour une clé de session. Tout, sauf la partie PUBLICKEYSTRUC de l’objet BLOB, est chiffré.
Notes
L’algorithme de chiffrement et les paramètres de clé de chiffrement ne sont pas stockés avec l’objet BLOB de clé privée. L’application doit gérer et stocker ces informations. Si zéro est passé pour hExpKey, la clé privée est exportée sans chiffrement.
Attention
Il est dangereux d’exporter des clés privées sans chiffrement, car elles sont alors vulnérables à l’interception et à l’utilisation par des entités non autorisées.
Objets BLOB de touches simples
Les objets BLOB de clés simples, de type SIMPLEBLOB, sont utilisés pour stocker et transporter des clés de session en dehors d’un fournisseur de solutions cloud. Les objets BLOB à clé simple du fournisseur de base sont toujours chiffrés avec une clé publique d’échange de clé. Le membre pbData du SIMPLEBLOB est une séquence d’octets au format suivant.
PUBLICKEYSTRUC publickeystruc;
ALG_ID algid;
BYTE encryptedkey[rsapubkey.bitlen/8];
Le tableau suivant décrit chaque composant du membre pbData du SIMPLEBLOB.
Champ | Description |
---|---|
algid | Une structure ALG_ID qui spécifie l’algorithme de chiffrement utilisé pour chiffrer les données de clé de session. Cela a généralement une valeur de CALG_RSA_KEYX, ce qui indique que les données de clé de session ont été chiffrées avec une clé publique d’échange de clé à l’aide de l’algorithme de clé publique RSA. |
Encryptedkey | Séquence BYTE qui représente les données de clé de session chiffrées sous la forme d’un bloc de chiffrement PKCS #1, de type 2. Pour plus d’informations sur ce format de données, consultez les Normes de chiffrement à clé publique (PKCS) #1, publiées par RSA Data Security, Inc. Ces données ont toujours la même taille que le module de la clé publique. Par exemple, les clés publiques générées par le fournisseur de base Microsoft RSA peuvent avoir une longueur de 512 bits (64 octets), de sorte que les données de clé de session chiffrées sont également toujours de 512 bits (64 octets). |
publickeystruc | Structure PUBLICKEYSTRUC . |