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 . |