Blobs de clave de proveedor de DSS
Los BLOB se usan con el proveedor digital Signature Standard (DSS) para exportar claves y importar claves en el proveedor de servicios criptográficos (CSP).
BLOBS de clave pública
Una clave pública de DSS se exporta e importa como BLOB, una secuencia de bytes estructurada de la siguiente manera.
PUBLICKEYSTRUC publickeystruc;
DSSPUBKEY dsspubkey;
BYTE p[dsspubkey.bitlen/8];
BYTE q[20];
BYTE g[dsspubkey.bitlen/8];
BYTE y[dsspubkey.bitlen/8];
DSSSEED seedstruct;
En la tabla siguiente se describen estos componentes. Todos los valores están en formato little-endian .
Campo | Descripción |
---|---|
dsspubkey | Estructura DSSPUBKEY . El miembro mágico debe tener un valor de 0x31535344. Este número hexadecimal es la codificación ASCII de DSS1. |
e | Secuencia BYTE . Generador, g. Debe tener la misma longitud que p. Si no es la misma longitud que p, debe rellenarse con 0x00 bytes. |
p | Secuencia BYTE . El módulo primo, p. El bit más significativo del byte más significativo debe establecerse en uno. |
publickeystruc | Estructura PUBLICKEYSTRUC . |
q | Secuencia BYTE . El valor primo, q, 20 bytes de longitud. El bit más significativo del byte más significativo debe establecerse en uno. |
seedstruct | Estructura DSSSEED . Valores de inicialización y contador para comprobar los primos. |
y | Secuencia BYTE . Clave pública, y. Debe tener la misma longitud que p. Si no es la misma longitud que p, debe rellenarse con 0x00 bytes. |
Nota
Los BLOB de clave pública no están cifrados . Contienen claves públicas en formato de texto no cifrado .
Blobs de clave privada
Una clave privada de DSS se exporta e importa como una secuencia de bytes estructurados de la siguiente manera.
PUBLICKEYSTRUC publickeystruc;
DSSPUBKEY dsspubkey;
BYTE p[dsspubkey.bitlen/8];
BYTE q[20];
BYTE g[dsspubkey.bitlen/8];
BYTE x[20];
DSSSEED seedstruct;
En la tabla siguiente se describe cada componente. Todos los valores están en formato little-endian .
Campo | Descripción |
---|---|
dsspubkey | Estructura DSSPUBKEY . El miembro mágico debe establecerse en 0x32535344. Este número hexadecimal es la codificación ASCII de DSS2. |
e | Secuencia BYTE . Generador, g. Debe tener la misma longitud que p. Si no es la misma longitud que p, debe rellenarse con 0x00 bytes. |
publickeystruc | Estructura PUBLICKEYSTRUC . |
p | Secuencia BYTE . El módulo primo, p. El bit más significativo del byte más significativo debe establecerse en uno. |
q | Secuencia BYTE . El valor primo, q. q es de 20 bytes de longitud. El bit más significativo del byte más significativo debe establecerse en uno. |
seedstruct | Estructura DSSSEED . Valores de inicialización y contador para comprobar los primos. |
x | Secuencia BYTE . Exponente secreto, x. Siempre debe tener 20 bytes de longitud. Si x es menor que 20 bytes de longitud, debe rellenarse con 0x00. |
Al llamar a CryptExportKey, el desarrollador puede elegir si se va a 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.