Blobs de clave de proveedor base

El proveedor base y el proveedor extendido usan los mismos blobs clave.

Blobs de clave pública

Los blobs de clave pública, tipo PUBLICKEYBLOB, se usan para almacenar claves públicas fuera de un proveedor de servicios criptográficos (CSP). Los BLOB de clave pública del proveedor base tienen el formato siguiente.

PUBLICKEYSTRUC  publickeystruc;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];

En la tabla siguiente se describe cada componente de clave pública. Todos los valores están en formato little-endian .

Campo Descripción
modulus Los datos del módulo de clave pública se encuentran directamente después de la estructura RSAPUBKEY . El tamaño de estos datos variará, en función del tamaño de la clave pública. El número de bytes se puede determinar dividiendo el valor del campo bitlen RSAPUBKEY por ocho.
publickeystruc Una estructura PUBLICKEYSTRUC .
rsapubkey Estructura RSAPUBKEY . El miembro mágico debe establecerse en 0x31415352. Este valor hexadecimal es la codificación ASCII de RSA1.

 

Nota

Los blobs de clave pública no están cifrados. Contienen claves públicas en formato de texto no cifrado .

 

Blobs de clave privada

Los BLOB de clave privada, tipo PRIVATEKEYBLOB, se usan para almacenar claves privadas fuera de un CSP. Los BLOB de clave privada del proveedor base tienen el formato siguiente.

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

En la tabla siguiente se describe el componente BLOB de clave privada.

Nota

Estos campos corresponden a los campos descritos en la sección 7.2 de Estándares de criptografía de clave pública (PKCS) n.º 1 con pequeñas diferencias.

 

Campo Descripción
Coeficiente Coeficiente. Tiene un valor numérico de (inverso de q) mod p.
exponent1 Exponente 1. Tiene un valor numérico de d mod (p – 1).
exponent2 Exponente 2. Tiene un valor numérico de d mod (q – 1).
Módulo Módulo. Esto tiene un valor de Prime1×Prime2 y a menudo se conoce como n.
prime1 Número primo 1, a menudo conocido como p.
prime2 Número primo 2, a menudo conocido como q.
privateExponent Exponente privado, a menudo conocido como d.
publickeystruc Una estructura PUBLICKEYSTRUC .
rsapubkey Estructura RSAPUBKEY . El miembro mágico debe establecerse en 0x32415352. Este valor hexadecimal es la codificación ASCII de RSA2.

 

Nota

Los blobs de clave privada no están cifrados. Contienen claves privadas en formato de texto no cifrado.

 

Al llamar a CryptExportKey, el desarrollador puede elegir si desea cifrar la clave. PrivateKEYBLOB se cifra si el parámetro hExpKey contiene un identificador válido para una clave de sesión. Todo, pero la parte PUBLICKEYSTRUC del BLOB está cifrada.

Nota

El algoritmo de cifrado y los parámetros de clave de cifrado no se almacenan junto con el BLOB de clave privada. La aplicación debe administrar y almacenar esta información. Si se pasa cero para hExpKey, la clave privada se exportará sin cifrado.

 

Precaución

Es peligroso exportar claves privadas sin cifrado porque, a continuación, son vulnerables a la interceptación y el uso de entidades no autorizadas.

 

Blobs de clave simples

Los blobs de clave simples, tipo SIMPLEBLOB, se usan para almacenar y transportar claves de sesión fuera de un CSP. Los BLOB de clave simple del proveedor base siempre se cifran con una clave pública de intercambio de claves. El miembro pbData del SIMPLEBLOB es una secuencia de bytes en el formato siguiente.

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

En la tabla siguiente se describe cada componente del miembro pbData del SIMPLEBLOB.

Campo Descripción
algid Estructura ALG_ID que especifica el algoritmo de cifrado utilizado para cifrar los datos de clave de sesión. Normalmente, tiene un valor de CALG_RSA_KEYX, lo que indica que los datos de la clave de sesión se cifraron con una clave pública de intercambio de claves mediante el algoritmo de clave pública RSA.
encryptedkey Secuencia BYTE que representa los datos de la clave de sesión cifrada en forma de bloque de cifrado PKCS #1, tipo 2. Para obtener información acerca de este formato de datos, vea Public Key Cryptography Standards (PKCS) #1, publicado por RSA Data Security, Inc. Estos datos siempre son del mismo tamaño que el módulo de la clave pública. Por ejemplo, las claves públicas generadas por el proveedor base RSA de Microsoft pueden tener una longitud de 512 bits (64 bytes), por lo que los datos de la clave de sesión cifrada también son siempre de 512 bits (64 bytes).
publickeystruc Una estructura PUBLICKEYSTRUC .