BLOB di chiavi del provider DSS
I BLOB vengono usati con il provider DSS ( Digital Signature Standard ) per esportare le chiavi da e importare chiavi in, il provider di servizi di crittografia (CSP).
BLOB a chiave pubblica
Una chiave pubblica DSS viene esportata e importata come BLOB, una sequenza di byte strutturata come indicato di seguito.
PUBLICKEYSTRUC publickeystruc;
DSSPUBKEY dsspubkey;
BYTE p[dsspubkey.bitlen/8];
BYTE q[20];
BYTE g[dsspubkey.bitlen/8];
BYTE y[dsspubkey.bitlen/8];
DSSSEED seedstruct;
Nella tabella seguente vengono descritti questi componenti. Tutti i valori sono in formato little-endian .
Campo | Descrizione |
---|---|
dsspubkey | Struttura DSSPUBKEY . Il membro magic deve avere un valore di 0x31535344. Questo numero esadecimale è la codifica ASCII di DSS1. |
g | Sequenza BYTE . Generatore, g. Deve avere la stessa lunghezza di p. Se non è la stessa lunghezza di p, deve essere riempita con 0x00 byte. |
p | Sequenza BYTE . Modulo primo, p. Il bit più significativo del byte più significativo deve essere impostato su uno. |
publickeystruc | Struttura PUBLICKEYSTRUC . |
q | Sequenza BYTE . Lunghezza massima, q, 20 byte. Il bit più significativo del byte più significativo deve essere impostato su uno. |
seedstruct | Struttura DSSSEED . Valori di inizializzazione e contatore per la verifica dei primi. |
y | Sequenza BYTE . Chiave pubblica, y. Deve avere la stessa lunghezza di p. Se non è la stessa lunghezza di p, deve essere riempita con 0x00 byte. |
Nota
I BLOB a chiave pubblica non sono crittografati. Contengono chiavi pubbliche in formato testo non crittografato .
BLOB di chiave privata
Una chiave privata DSS viene esportata e importata come sequenza di byte strutturati come indicato di seguito.
PUBLICKEYSTRUC publickeystruc;
DSSPUBKEY dsspubkey;
BYTE p[dsspubkey.bitlen/8];
BYTE q[20];
BYTE g[dsspubkey.bitlen/8];
BYTE x[20];
DSSSEED seedstruct;
La tabella seguente descrive ogni componente. Tutti i valori sono in formato little-endian .
Campo | Descrizione |
---|---|
dsspubkey | Struttura DSSPUBKEY . Il membro magic deve essere impostato su 0x32535344. Questo numero esadecimale è la codifica ASCII di DSS2. |
g | Sequenza BYTE . Generatore, g. Deve avere la stessa lunghezza di p. Se non è la stessa lunghezza di p, deve essere riempita con 0x00 byte. |
publickeystruc | Struttura PUBLICKEYSTRUC . |
p | Sequenza BYTE . Modulo primo, p. Il bit più significativo del byte più significativo deve essere impostato su uno. |
q | Sequenza BYTE . La lunghezza del valore primo, q. q è di 20 byte. Il bit più significativo del byte più significativo deve essere impostato su uno. |
seedstruct | Struttura DSSSEED . Valori di inizializzazione e contatore per la verifica dei primi. |
x | Sequenza BYTE . Esponente segreto, x. Deve sempre avere una lunghezza di 20 byte. Se x è minore di 20 byte, deve essere riempito con 0x00. |
Quando si chiama CryptExportKey, lo sviluppatore può scegliere se crittografare la chiave. PRIVATEKEYBLOB viene crittografato se il parametro hExpKey contiene un handle valido per una chiave di sessione. Tutto, ma la parte PUBLICKEYSTRUC del BLOB è crittografata.
Nota
I parametri dell'algoritmo di crittografia e della chiave di crittografia non vengono archiviati insieme al BLOB della chiave privata. L'applicazione deve gestire e archiviare queste informazioni. Se zero viene passato per hExpKey, la chiave privata verrà esportata senza crittografia.
Attenzione
È pericoloso esportare chiavi private senza crittografia perché sono quindi vulnerabili all'intercettazione e all'uso da parte di entità non autorizzate.